本篇文章給大家分享值得了解的10 個2021 年比較有用但又不熱門的CSS功能,快來收藏吧!
沒有 CSS,現(xiàn)代 Web 應(yīng)用程序?qū)o法實現(xiàn)。標(biāo)記語言(譯者注:這是樣式表語言……)負(fù)責(zé)讓網(wǎng)站有良好的視覺體驗、令人愉悅的布局,并且每個元素都各居其位。但是,你知道新的 CSS 特性一直在出現(xiàn)嗎?
多年來,CSS 已經(jīng)超越了單純設(shè)置背景色、邊框、文本樣式、邊距和盒模型的范疇。現(xiàn)代的 CSS 現(xiàn)在能夠提供過去需要 JavaScript 或其他解決方法才能實現(xiàn)的功能!
為了慶祝 CSS 的發(fā)展,在這篇文章中,我們想看看 CSS 在 2021 年推出的一些令人驚奇而大家可能還不知道的功能(譯者注:準(zhǔn)確來說,2021 年比較有用但又不熱門的功能)。我們將重點介紹 Web 設(shè)計師和開發(fā)者可以使用的現(xiàn)代 CSS 的出色功能,討論一下用例和瀏覽器支持,并為大家提供一個簡單的示例。
讓我們開始吧!
新的 CSS 功能:現(xiàn)在 CSS 可以做什么
這是 CSS 如今具有的一些令人驚奇的功能。
自定義屬性與變量
譯者注:這里的自定義屬性(Custom Properties)和我們所說的變量是一個東西,見 MDN Web Doc
自定義屬性基本上允許我們定義 CSS 屬性的替代品以用于我們的設(shè)計。一個例子就能讓你理解為什么說這個功能有用:
通常,在構(gòu)建主題時,我們會選擇一種配色方案,然后在必要時聲明這些顏色。
a { color: #cd2653; } .social-icons a { background: #cd2653; } .wp-block-button.is-style-outline { color: #cd2653; }
這種方法的問題是,如果我們想要更改一種顏色,則必須在每一處使用了這個顏色的地方做出對應(yīng)的修改。盡管代碼編輯器可以通過搜索和替換輕松地做到這一點,但這仍然很煩人。尤其是如果我們只是想進行快速測試,并且必須再次撤消所有操作。
更好的解決方案
自定義屬性就解決了這個問題。在它們的幫助下,我們可以輕松地將剛才所說的配色分配給一個變量,然后每次使用該顏色時,只需將其作為 CSS 屬性輸入即可,如下所示:
:root { --global--color-primary: #28303d; } a { color: var(--global--color-primary); } .social-icons a { background: var(--global--color-primary); }
這樣,每當(dāng)我們想要對配色進行更改時,只需要在一個地方進行更改即可。太酷了吧?過去,我們還需要使用 Sass 之類的預(yù)處理器來使用變量,而現(xiàn)在它是 CSS 的原生功能。
正如您在上面看到的,自定義屬性也非常易于使用。在 :root
選擇器下的文檔開始處定義變量(請注意,變量前面應(yīng)使用雙連字符 --
,這是將變量稱為自定義屬性的原因,它們也區(qū)分大小寫!)。之后我們就可以通過 var()
函數(shù)在整個文檔中使用它們。
如果要更改變量,只需更改 :root
下面的聲明就可以了。
此 CSS 功能的兼容性如何,瀏覽器支持非常好:
@supports
接下來,有一個類似于媒體查詢的 CSS 規(guī)則。不過我們不是用它基于屏幕大小或設(shè)備類型編寫特定的樣式,而是根據(jù)用戶瀏覽器支持的 CSS 屬性和值,應(yīng)用特定的樣式。
這有什么用?
正如你將在本文中看到的那樣,并非所有的瀏覽器和設(shè)備都支持所有 CSS 功能。盡管我們通??梢允褂脙?yōu)雅降級來處理此問題,但在某些情況下,如果我們不專門包括對最新的技術(shù)的支持,則使用這些技術(shù)可能會嚴(yán)重破壞我們的網(wǎng)站的樣式結(jié)構(gòu)。
此外,我們還可以使用 @supports
為支持特定功能的更現(xiàn)代的瀏覽器添加額外的功能或樣式(這就是為什么使用的查詢 @supports
也稱為“功能查詢”的原因)。
如何使用功能查詢
如果您熟悉媒體查詢,則使用支持檢查將非常容易。使用方法如下:
@supports (display: grid) { .site-content { display: grid; } }
如你所見,其實不過就是規(guī)則的聲明后跟要在方括號中檢查的屬性或?qū)傩?— 值對,再加上我們平時用的 CSS 聲明用于說明滿足條件時要應(yīng)用哪些樣式規(guī)則。
上面的示例指出,如果瀏覽器支持 CSS 網(wǎng)格功能(稍后將對此進行詳細(xì)介紹),則應(yīng)用 display: grid;
樣式到 .site-content
的元素。
同樣重要的是要注意 @supports
支持使用運算符 not
、and
和 or
(也可以結(jié)合使用)以創(chuàng)建更具體的規(guī)則,例如對不支持該特定功能的瀏覽器的優(yōu)雅降級:
@supports not (display: grid) { .site-content { float: left; } }
為了能夠正常使用 @supports
功能,你需要知道哪些瀏覽器支持它(我知道,這是一種元數(shù)據(jù))。好消息是**所有的現(xiàn)代瀏覽器都支持**。
但是,由于這些查詢的目的是啟用或禁用舊版瀏覽器無法處理的功能,因此請確保正確編寫它們。即如果要使用功能查詢,請為支持功能查詢的瀏覽器創(chuàng)建功能查詢條件。讓瀏覽器以它無法理解的方式忽略某些內(nèi)容是沒有用的。
Flexbox 間隙
Flexbox 是另一種 CSS 布局模塊,而我們已經(jīng)討論過它。長期以來,F(xiàn)lexbox 的缺點是它不支持間隙,我說的是,不支持定義行和列之間的間隔。
幸運的是,瀏覽器對此 CSS 功能的支持正在改善。現(xiàn)在,我們可以開始使用 gap
、row-gap
和 column-gap
屬性,在網(wǎng)格布局、Flexbox 布局和 Multi-Column 布局中創(chuàng)建間隙。
這是一個在 Flexbox 中創(chuàng)建間隙的快速示例:
.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>
這就是效果:
盡管我們可以通過 margin
實現(xiàn)相同的布局,但是與簡單地聲明間隙大小相比,它需要