<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          你可能不知道的10個(gè)CSS新功能(2021版)

          共 5288字,需瀏覽 11分鐘

           ·

          2021-04-14 20:22

          原文:https://torquemag.io/2021/03/new-css-features/
          作者:Nick Sch?ferhoff

          多年來(lái),CSS已經(jīng)超越了背景顏色、邊框、文本樣式、邊距和盒模型。現(xiàn)代CSS能夠提供一系列的功能,而在過(guò)去,您需要JavaScript或變通方法來(lái)實(shí)現(xiàn)這些功能。

          為了慶祝它在2021年取得的成就,在這篇文章中,我們想看看一些你可能不知道的令人驚嘆的CSS新特性。我們將強(qiáng)調(diào)web設(shè)計(jì)人員和開(kāi)發(fā)人員可以用現(xiàn)代CSS做的很酷的事情,討論用例,瀏覽器支持,并給你一個(gè)快速的例子。

          CSS的新功能:現(xiàn)代CSS可以做什么

          這是CSS如今具備的一些令人驚奇的功能

          自定義屬性/變量

          自定義屬性基本上允許你在一個(gè)集中的地方定義CSS屬性的替身,以用于你的設(shè)計(jì)。要理解為什么這很有用,最好的方法就是去看一個(gè)例子。

          通常,在構(gòu)建一個(gè)主題時(shí),你會(huì)選擇一個(gè)配色方案,然后每次都要聲明這些顏色。

          a {
          color: #cd2653;
          }

          .social-icons a {
          background: #cd2653;
          }

          .wp-block-button.is-style-outline {
          color: #cd2653;
          }

          這種方法的問(wèn)題是,如果你想對(duì)其中一種顏色進(jìn)行更改,你必須更改它的每一個(gè)實(shí)例。雖然代碼編輯器可以通過(guò)搜索和替換輕松做到這一點(diǎn),但這仍然很煩人。特別是當(dāng)你只是想做一個(gè)快速的測(cè)試,而又要把所有的東西反過(guò)來(lái)的時(shí)候。

          有更好的解決方案

          自定義屬性可以解決這個(gè)問(wèn)題。在它們的幫助下,你可以將有關(guān)顏色指定給一個(gè)變量一次,然后每次使用時(shí)只需將該變量作為CSS屬性輸入即可,就像這樣:

          :root {
          --global--color-primary: #28303d;
          }

          a {
          color: var(--global--color-primary);
          }

          .social-icons a {
          background: var(--global--color-primary);
          }

          這樣,當(dāng)您要進(jìn)行更改時(shí),只需要在一個(gè)地方進(jìn)行更改即可。酷吧?過(guò)去,你需要采用SASS這樣的預(yù)處理程序來(lái)使用變量,現(xiàn)在它是CSS的一個(gè)原生功能。

          正如您在上面看到的,自定義屬性也非常易于使用。在文檔開(kāi)頭的 :root 選擇器下定義你的變量(注意雙連字符 -- 在變量前面,這就是將它們定義為自定義屬性的原因,而且它們是區(qū)分大小寫(xiě)的!)。之后,你可以通過(guò) var() 函數(shù)在整個(gè)文檔中使用它們。

          如果你想改變一個(gè)變量,只需改變 :root 下的聲明就可以了。

          至于此CSS功能的采用程度如何,瀏覽器支持非常好:

          @supports

          接下來(lái),我們有一個(gè)類(lèi)似于媒體查詢(xún)的CSS規(guī)則。然而,@supports 并不是讓CSS規(guī)則以屏幕大小或手機(jī)類(lèi)型為條件,而是允許你根據(jù)用戶(hù)瀏覽器支持的CSS屬性和值來(lái)做同樣的事情。

          這有什么用?

          正如你將在這篇文章中看到的那樣,并非所有的瀏覽器和設(shè)備都支持所有的CSS功能。雖然你通常可以使用回退聲明來(lái)處理這個(gè)問(wèn)題,但在某些情況下,如果你不特別包含對(duì)舊技術(shù)的支持,就會(huì)嚴(yán)重破壞你的網(wǎng)站。

          此外,你還可以使用 @supports 為更現(xiàn)代的瀏覽器添加額外的功能或樣式,以便處理它們(這就是為什么使用 @supports 的查詢(xún)也被稱(chēng)為“功能查詢(xún)”)。

          如何使用功能查詢(xún)

          如果你熟悉媒體查詢(xún),使用支持檢查將非常容易。下面是如何使用它:

          @supports (display: grid) {
          .site-content {
          display: grid;
          }
          }

          正如你所看到的,它只是簡(jiǎn)單的規(guī)則,后面的括號(hào)里是你要檢查的屬性或?qū)傩灾祵?duì)。之后就是通常的CSS聲明,如果滿足條件,要應(yīng)用什么規(guī)則。

          上面的例子指出,如果瀏覽器支持CSS grid(稍后會(huì)有更多的說(shuō)明),它應(yīng)該將 display: grid; 應(yīng)用到帶有 .site-content 類(lèi)的元素上。

          還需要注意的是,@supports 理解操作符notand、和 or(也可以組合)來(lái)創(chuàng)建更具體的規(guī)則,比如為不支持該特定功能的瀏覽器提供回退。

          @supports not (display: grid) {
          .site-content {
          float: left;
          }
          }

          為了正確地使用@supports,你需要知道哪些瀏覽器支持它,好消息是所有現(xiàn)代瀏覽器都支持。

          但是,由于這些查詢(xún)的目標(biāo)是啟用或禁用舊瀏覽器無(wú)法處理的特性,所以請(qǐng)確保正確地構(gòu)造它們。這意味著,如果要使用特性查詢(xún),請(qǐng)為支持特性查詢(xún)的瀏覽器創(chuàng)建它。

          Flexbox Gaps

          Flexbox是我們之前詳細(xì)討論過(guò)的另一個(gè)CSS布局模塊。長(zhǎng)期以來(lái),它的一個(gè)弱點(diǎn)就是flexbox間隙,也就是可以定義行和列之間的中斷。

          值得慶幸的是,瀏覽器對(duì)這個(gè)CSS功能的支持正在改善。現(xiàn)在您可以開(kāi)始使用 gaprow-gapcolumn-gap 在使用Grid、Flexbox和Multi-Column Layouts創(chuàng)建的布局中創(chuàng)建空間。

          這是一個(gè)簡(jiǎn)短的示例,說(shuō)明在flexbox中的外觀:

          .flex-gap-test {
          display: inline-flex;
          flex-wrap: wrap;
          gap: 16px;
          }

          <div class="flex-gap-test">
          <div>1</div>
          <div>2</div>
          <div>3</div>
          <div>4</div>
          <div>5</div>
          <div>6</div>
          </div>

          這是在頁(yè)面上:

          雖然可以通過(guò)頁(yè)邊距來(lái)實(shí)現(xiàn)同樣的布局,但它需要更多的標(biāo)記和變通方法,而不是簡(jiǎn)單地聲明間隙大小。

          content-visibility

          content-visibility 是一個(gè)非常酷的新CSS功能,可以提高網(wǎng)站性能。它的工作原理基本上就像懶惰加載一樣,只是不針對(duì)圖片,而是針對(duì)任何HTML元素。您可以使用它來(lái)阻止網(wǎng)站的任何部分加載,直到其可見(jiàn)為止。

          使用也超級(jí)簡(jiǎn)單,只需將其應(yīng)用到你所選擇的元素上,就像這樣:

          .content-below-fold {
          content-visibility: auto;
          }

          content-visibility 有三個(gè)值。默認(rèn)情況下,它被設(shè)置為可見(jiàn),在這種情況下,元素會(huì)像往常一樣加載。另外,你也可以將其設(shè)置為hidden,在這種情況下,無(wú)論元素是否可見(jiàn),都不會(huì)被渲染。另一方面,當(dāng)設(shè)置為 auto 時(shí),可見(jiàn)區(qū)域外的元素將被跳過(guò),一旦出現(xiàn)在屏幕上,就會(huì)被渲染。

          很酷的東西,對(duì)不對(duì)?

          在這種情況下,有一點(diǎn)可能也很重要,那就是 contain-intrinsic-size。由于設(shè)置為 content-visibility: hidden; 的元素實(shí)際上大小為零,這讓你可以為隱藏的元素應(yīng)用一個(gè)理論上的高度和寬度,以便瀏覽器可以從一開(kāi)始就考慮到它,而不是在元素渲染時(shí)才考慮。這樣,您可以避免在滾動(dòng)過(guò)程中布局突然改變。

          瀏覽器對(duì) content-visibility 的支持還有點(diǎn)不完善,但也在不斷完善中。同樣的,對(duì)于contain-intrinsic-size的支持也是如此。

          一旦被更廣泛地采用,我預(yù)測(cè)它將成為加快渲染過(guò)程的最有效工具之一。

          Transitions, Transforms, Animations

          在以前,如果你想讓東西在你的網(wǎng)站上移動(dòng),你通常不得不求助于JavaScript(或動(dòng)畫(huà)GIF,對(duì)于那些屬于MySpace一代的人)。然而,你可能不知道的是,多年來(lái)CSS也有能力讓東西動(dòng)起來(lái)。實(shí)現(xiàn)這類(lèi)事情的三大工具是:

          • 過(guò)渡 Transitions——允許你使一個(gè)屬性值到另一個(gè)屬性值的變化(如懸停效果)平滑而不是突然。
          • 轉(zhuǎn)換 Transformations——使您可以在2D和3D空間中移動(dòng),旋轉(zhuǎn)和縮放元素。
          • 動(dòng)畫(huà) Animations——在CSS中設(shè)置簡(jiǎn)單或復(fù)雜的動(dòng)畫(huà),并配置它們的運(yùn)行方式和時(shí)間。

          自然,我們沒(méi)有篇幅在這里詳細(xì)介紹這三個(gè)方面的內(nèi)容。然而,讓我們?yōu)槊總€(gè)人做一些速成的例子,讓你對(duì)可能的事情有一個(gè)印象。

          CSS過(guò)渡

          這是CSS過(guò)渡的快速示例:

          div {
          width: 100px;
          height: 100px;
          transition: height 3s;
          }

          div:hover {
          height: 500px;
          }

          當(dāng)有人懸停在元素上時(shí),上面的標(biāo)記將使 div 高度的增加速度減慢到3秒。

          CSS轉(zhuǎn)換

          以下是CSS轉(zhuǎn)換的示例。當(dāng)有人將鼠標(biāo)懸停在元素上方時(shí),它將使元素順時(shí)針旋轉(zhuǎn)30度:

          div:hover {
          transform: rotate(30deg);
          }

          CSS動(dòng)畫(huà)

          最后,是展示CSS動(dòng)畫(huà)的簡(jiǎn)短代碼段:

          @keyframes color-change {
          from {background-color: blue;}
          to {background-color: yellow;}
          }

          div:hover {
          animation-name: color-change;
          animation-duration: 3s;
          }

          注意如何使用 @keyframes 命名動(dòng)畫(huà)并定義其功能,然后使用 animation-name 將其應(yīng)用于元素。animation-duration 控制完成的時(shí)間,還有其他類(lèi)似的屬性。

          如果你想嘗試所有這些,好消息是,瀏覽器的支持非常好,因此,沒(méi)有任何障礙可以讓您隨意旋轉(zhuǎn)CSS過(guò)渡,轉(zhuǎn)換和動(dòng)畫(huà)。

          滾動(dòng)捕捉

          Scroll snapping讓你可以選擇將用戶(hù)的視口鎖定在你網(wǎng)站的某個(gè)部分或元素上。它對(duì)創(chuàng)建酷炫的過(guò)渡非常有用,并幫助用戶(hù)在向下滾動(dòng)頁(yè)面時(shí)關(guān)注最重要的頁(yè)面元素。

          這種效果在移動(dòng)應(yīng)用程序中很多可見(jiàn),但是,通過(guò)滾動(dòng)捕捉,您也可以將其帶到網(wǎng)站上。

          在最基本的層面上,使用也相對(duì)簡(jiǎn)單。你只需將滾動(dòng)捕捉的類(lèi)型應(yīng)用到一個(gè)容器上,并定義它的子代應(yīng)該捕捉到哪里。

          .container {
          scroll-snap-type: y mandatory;
          }

          .container div {
          scroll-snap-align: start;
          }

          瀏覽器的兼容性還算不錯(cuò)。

          然而,請(qǐng)注意,所有可用的滾動(dòng)捕捉屬性的支持有點(diǎn)不均衡。因此,請(qǐng)務(wù)必檢查您的特定用例。

          :is 和 :where

          在我們的新CSS特性列表中,你可能不知道的最后一個(gè)條目是 :is:where 偽類(lèi)。它們?cè)试S你通過(guò)縮短CSS選擇器的列表來(lái)減少CSS標(biāo)記的重復(fù)。

          例如,比較一下:

          .main a:hover,
          .sidebar a:hover,
          .site-footer a:hover {
          /* markup goes here */
          }

          對(duì)此:

          :is(.main, .sidebar, .site-footer) a:hover {
          /* markup goes here */
          }

          相同的東西適用于 :where

          :where(.main, .sidebar, .site-footer) a:hover {
          /* markup goes here */
          }

          如果標(biāo)記是一樣的,有什么區(qū)別呢?不同的是 :is 更具體。它取括號(hào)中最特殊的元素的特殊性程度。相比之下,:where 的特異性永遠(yuǎn)是零。因此,再往下覆蓋就容易多了。

          瀏覽器的應(yīng)用還有點(diǎn)不穩(wěn)定,但慢慢就會(huì)有了。所以,請(qǐng)隨意開(kāi)始嘗試。

          還有其他值得一看的CSS新功能嗎?

          像所有其他的Web技術(shù)一樣,CSS標(biāo)記也在不斷發(fā)展。這意味著,總是有新的CSS功能可以發(fā)現(xiàn),有新的東西可以嘗試和試驗(yàn)。

          上面,我們已經(jīng)看了一些CSS如今已經(jīng)能夠做到的事情的例子,你可能會(huì)忽略。

          你最喜歡現(xiàn)代CSS的什么功能?在下面的評(píng)論區(qū)分享吧


          粉絲福利

          極客時(shí)間專(zhuān)欄《朱赟技術(shù)管理課》7天有效,需要的速取!獲取資源請(qǐng)?jiān)诠娞?hào)對(duì)話框中回復(fù)關(guān)鍵字:JK04,關(guān)鍵字全部大寫(xiě)哦!如果沒(méi)有關(guān)注請(qǐng)掃下面的二維碼。更多福利資料請(qǐng)查看公眾號(hào)菜單
          推薦文章
          在Vue.js中加載字體的最佳做法
          經(jīng)驗(yàn)技巧:什么是職場(chǎng)暗語(yǔ)?
          改善程序性能和代碼質(zhì)量:通過(guò)代理模式組合HTTP請(qǐng)求
          新老手必備的34種JavaScript簡(jiǎn)寫(xiě)優(yōu)化技術(shù)
          如何在JavaScript中實(shí)現(xiàn)隊(duì)列數(shù)據(jù)結(jié)構(gòu)

          最近文章

          瀏覽 51
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  亚洲性爱小视频 | 日韩黄色电影网址网站 | 精品久久久久中文 | 大鸡巴AV | 亚洲AV成人无码久久精品麻豆 |