偷偷摘套内射激情视频,久久精品99国产国产精,中文字幕无线乱码人妻,中文在线中文a,性爽19p

這個“被忽視”的 CSS4 選擇器,解決了一個折騰了十年的痛點

開發(fā) 前端
今天我們用原生 CSS把這個問題一次性拿下:不用 hack、不拼接意大利面式選擇器、不借助 JavaScript。只是一個干凈利落的選擇器思路——它不只是一件工具,更像是一種更精細(xì)、更上下文驅(qū)動的樣式思維。

你是否也遇到過這種場景:想根據(jù)前一個元素來給當(dāng)前節(jié)點寫樣式,結(jié)果被 CSS 的“只能向后看”難住了? 說實話,我也卡在這兒過——而且不止一次。

今天我們用原生 CSS把這個問題一次性拿下:不用 hack、不拼接意大利面式選擇器、不借助 JavaScript。只是一個干凈利落的選擇器思路——它不只是一件工具,更像是一種更精細(xì)、更上下文驅(qū)動的樣式思維。

接下來,咱們逐步拆解:這個選擇器如何基于前一個兄弟節(jié)點精確選中目標(biāo),讓樣式既整潔,又足夠靈活。

原理一覽

主角登場::has 選擇器(在 CSS4 中引入)。它是動態(tài)樣式的“瑞士軍刀”,匹配精度高,不需要 JS,因此可維護(hù)性也更強(qiáng)。

:has 會根據(jù)元素內(nèi)部是否包含某些內(nèi)容,或其后是否緊跟/存在某些條件來決定是否命中。于是,它不僅能“向前看”(例如 “如果這個 div 里有 img 就這樣寫樣式”),也能反向利用:根據(jù)后面的內(nèi)容影響前一個兄弟。

沒錯,我們終于有了 CSS 原生手段去實現(xiàn)這種邏輯:“如果后面出現(xiàn)了某個東西,就把前一個元素改一改?!?/span> 因此,你可以在不動 DOM 的前提下,保持結(jié)構(gòu)與表現(xiàn)的解耦

快速示例

<h2>Heading</h2>
<p>This paragraph follows the heading</p>

想要只在 h2 后面緊跟著 <p> 時修改標(biāo)題樣式?用 :has,寫法非常直接:

h2:has(+ p) {
  margin-bottom: 0.25rem;
  color: steelblue;
}

這樣一來,只有在 h2 的緊鄰后面是段落時,標(biāo)題才會變色并收緊下邊距?!?/span>無需加工具類、無需重排 DOM。

再深入一點

  • :has(+ p) 的語義是:如果 h2 的緊鄰兄弟是 p,就選中這個 h2。因此,它是一個條件命中器。
  • 關(guān)鍵在于 +:它表示緊鄰兄弟
  • 若換成 ~,則表示后續(xù)任意位置的兄弟(不是必須緊鄰),從而擴(kuò)大了匹配范圍,因此更靈活也更強(qiáng)大
h2:has(~ ul) {
  border: 2px solid red;
}

只要 h2 后面某處存在一個 <ul>,該標(biāo)題就會獲得一圈紅色描邊——無需添加任何額外標(biāo)記,因此在內(nèi)容編輯場景中也能自然生效,與此同時仍舊保持樣式與結(jié)構(gòu)的分離。

作用域限定

為了避免“牽一發(fā)而動全身”,把規(guī)則限制在容器內(nèi)往往是更穩(wěn)妥的做法:

.article h2:has(+ p) {
  font-style: italic;
}

這樣只有 .article 里的標(biāo)題會被命中,從而降低樣式外溢的風(fēng)險,并且提高可預(yù)測性。

為什么這對你重要?

你大概也厭倦了那些“補(bǔ)丁式”方案:加無意義的包裹 div、硬改 HTML 順序、甚至夾雜 JS 來兜底。 而 :has 提供的是上下文級的精度:你可以根據(jù)語義鄰接關(guān)系來寫樣式,因此布局更自適應(yīng)、然而規(guī)則仍清晰、最終維護(hù)成本更低。

真實落地的幾個用法

  • 表單:只在下一個輸入是 required 時高亮對應(yīng)的 label
  • 卡片:當(dāng)某張卡片后面跟著某種“卡片類型”時,增加額外間距。
  • 內(nèi)容排版:若標(biāo)題后緊接段落則收緊外邊距;反之如果后面是圖片,就保持較大的留白。

再看一個導(dǎo)航的例子:我們想讓當(dāng)前鏈接前一個項高亮。

<nav>
  <a href="/home">Home</a>
  <a href="/about" class="current">About</a>
  <a href="/contact">Contact</a>
</nav>

目標(biāo):當(dāng) About 處于 .current 狀態(tài)時,讓緊挨在它前面的 Home 高亮。CSS 如下:

nav a:has(+ a.current) {
  color: goldenrod;
  font-weight: bold;
}

因為 Home恰好位于.current 的前一個兄弟位置,所以它會被高亮。因此我們無需觸碰 HTML、也不用疊加多余類名,從而保證導(dǎo)航結(jié)構(gòu)簡潔可讀。

小小“坑點”

  • 功能雖強(qiáng),但也有邊界:到 2025 年:has 在 Chrome / Firefox / Safari 15.4+ 上支持已經(jīng)很穩(wěn),不過仍建議對老舊設(shè)備做一次檢查,以免出現(xiàn)“黑盒”問題。
過度嵌套的 :has 會讓選擇器難讀、難查原因,因此要控制粒度,并且盡量加上容器作用域(例如 .nav :has(...)),從而降低意外命中。

最后的要點

我曾以為“CSS 不能回頭看”。而現(xiàn)在,有了 :has,這種“后視鏡式”判斷終于有了原生解法。 不妨在下一個項目里試試它——因此你會得到更干凈的樣式表,然而仍然具備動態(tài)的上下文行為,最終讓代碼和布局一起“呼吸”。

感謝你的閱讀。下次我們繼續(xù)分享一個小而妙的 CSS 心得。

責(zé)任編輯:姜華 來源: 大遷世界
相關(guān)推薦

2020-10-16 16:28:54

Python開發(fā)技術(shù)

2017-04-26 17:10:00

咕咚MVCMVVM

2025-08-25 00:00:00

ESLintGithublinting

2017-04-26 18:01:52

咕咚MVCMVVM

2020-02-18 09:58:46

網(wǎng)絡(luò)安全IT安全漏洞

2022-11-08 08:29:43

Goslog 庫工具

2025-02-12 08:27:49

CSS選擇器ID

2025-02-08 08:42:22

2025-09-08 09:08:01

2024-02-05 10:10:06

Vue策略編譯

2010-01-28 10:11:18

IT金飯碗

2023-10-24 18:05:00

2017-01-15 15:13:37

Android性能優(yōu)化優(yōu)化點

2021-05-10 07:30:33

Google技術(shù)谷歌

2019-03-22 11:07:26

Windows 7Windows 10微軟

2021-01-13 13:49:29

漸進(jìn)式網(wǎng)頁應(yīng)用應(yīng)用程序開發(fā)

2020-09-06 08:26:59

Python 3開發(fā)代碼

2013-03-11 10:30:56

CSSWeb

2023-11-03 11:57:04

2011-08-17 10:04:13

vSphere 5虛擬化
點贊
收藏

51CTO技術(shù)棧公眾號