搜尋
首頁web前端css教學使用 :is()、:where() 和 :has() 偽類別編寫更少的 CSS

CSS 多年來已經發展了很多。它引入了許多新的強大工具,使生活更輕鬆。今天我從這些工具中挑選了其中三個。我們將看到 :is()、:has() 和 :where() 偽類別如何幫助簡化程式碼、使其更具可讀性並減少重複。

本文將向您介紹 :is()、:where() 和 :has() 偽類的含義、方式和原因。您將看到我們如何使用這些偽類透過編寫更少且更優化的程式碼來設計我們的網站,這可能是軟體開發中的絕佳實踐。

當我們將探索偽類時,這裡用一句話進行了基本概述。在 CSS 中,偽類是基於特定條件或狀態應用於元素的規則。點擊此連結了解更多有關偽類的資訊。

我們要解決什麼問題?

使用CSS(級聯樣式表)設計我們的網站時,我們都面臨的一件事是程式碼重複。

例如:

.card .title, .card .body-content, .card .footer-action {
 ...
}

在此範例中,我有一個 .card 選擇器,它的每個子選擇器都會重複該選擇器。但同時,您也會看到相同的樣式套用於它們。

這就是群組選擇器在 CSS 中正常運作的方式,用逗號分隔每個選擇器。這段程式碼工作正常,但我關心的是避免重複和組織不好。

我們在這裡面臨的另一個問題是 CSS 特異性問題。透過使用這樣的程式碼和過多的重複,有時我們會忘記在何處以及在什麼條件下使用什麼樣式。這就是這些偽類發揮重要作用的地方。

讓我們一一看看每個偽類以了解它們的用途。

解釋 :is() 偽類

:is() 偽類別可讓您選擇共享通用樣式的多個元素,而無需重複相同的程式碼。它透過將選擇器組合成一個區塊來簡化選擇器,從而減少冗餘。它將選擇器清單作為參數,並將樣式套用於與該清單中任何選擇器相符的所有元素。

.card :is(.title, .body-content, .footer-action) {
 ...
}

我已經使用了上面的範例,您將看到透過使用 :is() 偽類別分組來減少 CSS 程式碼中的重複是多麼容易。它使代碼保持乾淨和高效。

上面的範例顯示我們提供 .title、.body-content 和 .footer-action 作為 :is() 偽類別的參數。在 :is() 父容器 .card 之前定義,以使其子容器的樣式與其他程式碼分開。這就是 :is() 對與其清單相符的所有參數套用相同樣式的方式。

:is() 偽類廣泛應用於所有主流瀏覽器,下圖來自 caniuse.com,展示了不同版本瀏覽器的詳細概述:

Write less CSS using :is(), :where(), and :has() pseudo-classes

...

解釋 :where() 偽類

:where() 偽類與 :is() 非常相似。我們可以將多個選擇器分組以減少程式碼中的重複。它接受選擇器作為參數。 :is() 和 :where() 偽類之間的主要區別在於,:where() 的特異性為零。這意味著當您想要設定元素樣式而不為 CSS 選擇器添加額外的權重時,它會很有幫助。

使用 :where() 偽類定義的樣式可以輕鬆覆蓋。這意味著 :where() 不會在其選擇器中添加額外的特異性,並且 :where() 偽類內部的樣式是基於選擇器本身的特異性。

使用 :where() 偽類的一個很好的用例是為多個元素定義基本樣式,並且您不希望該樣式影響以後可能會覆蓋它的任何更具體的規則。

這樣 :where() 就可以讓你應用樣式,而不會讓你的 CSS 過於固執地決定哪些規則應該在衝突中獲勝。

/* Applying a default style */
:where(h1, p, a) {
  color: red; 
  font-size: 20px;
}

/* More specific style */
a {
  color: blue;
  font-size: 16px;
}

在上面的範例中,h1、p 和 a 標籤作為參數提供給 :where() 偽類以實現基本樣式。之後,用作獨立標籤及其樣式的標籤可以輕鬆覆蓋 :where().

中定義的樣式

像 :is() 一樣,幾乎所有主流瀏覽器都支援 :where()。請參閱 caniuse.com 上的下圖來檢查支援的瀏覽器版本:

Write less CSS using :is(), :where(), and :has() pseudo-classes

解釋 :has() 偽類

:has() 是父選擇器。這意味著它允許您根據其包含的子元素選擇父元素。這是一件大事,因為 CSS 以前不允許這種行為。你也可以說 :has() 是 CSS 的 if 語句,因為它滿足了條件需求。

假設您只想為包含 img 的 div 設定樣式。這對傳統 CSS 來說是不可能的,但 :has() 使之成為可能。

<!-- Card with Image -->
<div class="card">
      <img  src="/static/imghwm/default1.png" data-src="https://placeholderjs.com/300x300" class="lazy" alt="使用 :is()、:where() 和 :has() 偽類別編寫更少的 CSS" >
      <h1 id="Card-With-Image">Card With Image</h1>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, accusantium.</p>
</div>

<!-- Card without Image -->
<div class="card">
      <h1 id="Card-With-Image">Card With Image</h1>
      <p>Lorem ipsum dolor sit amet consectetur adipisicing elit. Cumque, accusantium.</p>
      <a href="#">Call to Action</a>
    </div>
.card:has(a) {
  background-color: #e6e6e6;
}

.card:has(img) {
  background-color: #979759;
}

Write less CSS using :is(), :where(), and :has() pseudo-classes

In this example, you see I have created two div elements with the same .card class, in CSS by using :has() pseudo-class. By using the same .card with :has() pseudo-class, two conditions are given with different styling that you can able to see in the image output.

:has() is also supported in almost all major browsers. See an image below from caniuse.com to check supported browser versions:

Write less CSS using :is(), :where(), and :has() pseudo-classes

Conclusion

As new features are introduced in CSS, the more power it gains, and allows writing code more readable, efficient, and optimized code. You have learned :is(), :where() and :has() pseudo-classes in this article, and you see how useful they are. These pseudo-classes make our job much easier, they can be easily maintained, and the code is optimized.

This article is to show you how powerful these features are, and we’re one step closer of using these features in our project. I highly suggest you use features like these to increase your productivity.

This post is originally posted at programmingly.dev. Read full article by following this link: write less CSS by using :is(), :where(), :has() pseudo-classes

以上是使用 :is()、:where() 和 :has() 偽類別編寫更少的 CSS的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
這不應該發生:對不可能進行故障排除這不應該發生:對不可能進行故障排除May 15, 2025 am 10:32 AM

解決這些不可能的問題之一,這是您從未想過的其他問題的問題。

@KeyFrames vs CSS過渡:有什麼區別?@KeyFrames vs CSS過渡:有什麼區別?May 14, 2025 am 12:01 AM

@keyframesandCSSTransitionsdifferincomplexity:@keyframesallowsfordetailedanimationsequences,whileCSSTransitionshandlesimplestatechanges.UseCSSTransitionsforhovereffectslikebuttoncolorchanges,and@keyframesforintricateanimationslikerotatingspinners.

使用頁面CMS進行靜態站點內容管理使用頁面CMS進行靜態站點內容管理May 13, 2025 am 09:24 AM

我知道,我知道:有大量的內容管理系統選項可用,而我進行了幾個測試,但實際上沒有一個是一個,y&#039;知道嗎?怪異的定價模型,艱難的自定義,有些甚至最終成為整個&

鏈接HTML中CSS文件的最終指南鏈接HTML中CSS文件的最終指南May 13, 2025 am 12:02 AM

鏈接CSS文件到HTML可以通過在HTML的部分使用元素實現。 1)使用標籤鏈接本地CSS文件。 2)多個CSS文件可通過添加多個標籤實現。 3)外部CSS文件使用絕對URL鏈接,如。 4)確保正確使用文件路徑和CSS文件加載順序,優化性能可使用CSS預處理器合併文件。

CSS Flexbox與網格:全面評論CSS Flexbox與網格:全面評論May 12, 2025 am 12:01 AM

選擇Flexbox還是Grid取決於佈局需求:1)Flexbox適用於一維佈局,如導航欄;2)Grid適合二維佈局,如雜誌式佈局。兩者在項目中可結合使用,提升佈局效果。

如何包括CSS文件:方法和最佳實踐如何包括CSS文件:方法和最佳實踐May 11, 2025 am 12:02 AM

包含CSS文件的最佳方法是使用標籤在HTML的部分引入外部CSS文件。 1.使用標籤引入外部CSS文件,如。 2.對於小型調整,可以使用內聯CSS,但應謹慎使用。 3.大型項目可使用CSS預處理器如Sass或Less,通過@import導入其他CSS文件。 4.為了性能,應合併CSS文件並使用CDN,同時使用工具如CSSNano進行壓縮。

Flexbox vs Grid:我應該學習兩者嗎?Flexbox vs Grid:我應該學習兩者嗎?May 10, 2025 am 12:01 AM

是的,youshouldlearnbothflexboxandgrid.1)flexboxisidealforone-demensional,flexiblelayoutslikenavigationmenus.2)gridexcelstcelsintwo-dimensional,confffferDesignssignssuchasmagagazineLayouts.3)blosebothenHancesSunHanceSlineHancesLayOutflexibilitibilitibilitibilitibilityAnderibilitibilityAndresponScormentilial anderingStruction

軌道力學(或我如何優化CSS KeyFrames動畫)軌道力學(或我如何優化CSS KeyFrames動畫)May 09, 2025 am 09:57 AM

重構自己的代碼看起來是什麼樣的?約翰·瑞亞(John Rhea)挑選了他寫的一個舊的CSS動畫,並介紹了優化它的思維過程。

See all articles

熱AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover

AI Clothes Remover

用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool

Undress AI Tool

免費脫衣圖片

Clothoff.io

Clothoff.io

AI脫衣器

Video Face Swap

Video Face Swap

使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

禪工作室 13.0.1

禪工作室 13.0.1

強大的PHP整合開發環境

Dreamweaver Mac版

Dreamweaver Mac版

視覺化網頁開發工具

DVWA

DVWA

Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

Dreamweaver CS6

Dreamweaver CS6

視覺化網頁開發工具