搜尋
首頁web前端css教學CSS中一些利用偽類、偽元素和鄰近元素選擇器的技巧

前幾天遇到頁面需求是這樣的:

CSS中一些利用偽類、偽元素和鄰近元素選擇器的技巧

一個評論框,後面的按鈕有點讚或者發送評論兩種狀態,其中發送按鈕有根據輸入框中是否有字分為可點擊和不可點選兩種狀態。

需求:
沒有文字,沒有聚焦——點讚
沒有文字,聚焦——灰色發送
有文字——紅色發送

如果用JS實現,需要監聽輸入框的change和focus事件,比較麻煩。但是用CSS中的偽類別就可以實現相近效果。

<input type="text" class="input" required>
<div class="like">点赞</div>
<div class="send">发送</div>
.send {
  display: none;
}

.input:focus ~ .send {
  display: block;
}

.input:valid ~ .send {
  display: block;
  color: red;
}


.input:focus ~ .like, .input:valid ~ .like {
  display: none;
}

(如果評論框用contenteditable屬性的div元素實現,可以用:empty偽類代替:valid。)

所以CSS3中的偽類和偽元素非常多,其中一些如果用的巧妙,可以實現很多原本需要JS才可以達成的效果。

contenteditable屬性的div的placeholder

因為某些原因,我們有時候用帶有contenteditable屬性的div而不是input或textarea來作為輸入框。例如,div可以根據內容自動調整高度。但是div元素不支援placeholder屬性。怎麼在div內容為空的時候顯示一個預設文字呢?可以利用:empty偽類。

  <div class="input" contenteditable placeholder="请输入文字"></div>
.input:empty::before {
  content: attr(placeholder);
}

畫格子

這個是在美團的行動端頁面上看到的:

CSS中一些利用偽類、偽元素和鄰近元素選擇器的技巧

我們需要在城市列表這個區域畫一個格子。我們當然首先想到的是用border屬性,但設計師有個要求是,如果最後一行只有一個或兩個城市,為了美觀後面也要有空白的格子。像這樣子:

CSS中一些利用偽類、偽元素和鄰近元素選擇器的技巧

美團的頁面中,格子的垂直線是怎麼畫的呢?是用::after和::before元素畫的。

.table:before {
  content: &#39;&#39;;
  position: absolute;
  width: 25%;
  left: 25%;
  height: 100%;
  border-left: 1px solid #ddd8ce;
  border-right: 1px solid #ddd8ce;
}

.table:after {
  content: &#39;&#39;;
  position: absolute;
  width: 10%;
  left: 75%;
  height: 100%;
  border-left: 1px solid #ddd8ce;
  border-right: none;
}

分別創造了兩個高度為100%的偽元素,利用它們的邊框作為表格的垂直線。這種方案可以實現設計師的要求,又不會增加空白的頁面元素,破壞語意。但是限制就是最多只能畫四條垂直線,也就是說表格最多有5列。

Tab切換

純CSS實現Tab切換也是可以的。主要是利用了單選框元素的:checked偽類和相鄰選擇器。因為是單選框,所以保證了同一時間只有一個tab處於啟動狀態。如果不要求更複雜的效果,這樣純CSS實現的tab切換效果,要比JS簡單可靠很多。

  <input id="tab1" type="radio" name="tabs" checked>
  <label for="tab1">TAB1</label>
  <input id="tab2" type="radio" name="tabs">
  <label for="tab2">TAB2</label>

  <div id="content1" class="tab-content">CONTENT1<div>  
  <div id="content2" class="tab-content">CONTENT2</div>
  input, .tab-content{
    display: none;
  }
  #tab1:checked ~ #content1,
  #tab2:checked ~ #content2 {
    display: block;
  }

另外利用表單元素的偽類,可以label元素來取代單選框、複選框等表單元素的本身,因為為表單元素本身定義樣式十分困難。

感知子元素的個數

這個是我看過的最複雜的一個技巧之一,來自這篇文章,不依靠JS實現了根據子元素的個數來應用不同的樣式。

例如這樣的CSS:

.list li:nth-last-child(n+4) ~ li,
.list li:nth-last-child(n+4):first-child {
  color: red
}

可以實現這樣的效果:如果.list裡面li元素個數大於等於4,則顯示為紅色。

這是怎麼實現的呢?

:nth-last-child(n+4)這一個選擇器的意思就是倒數第四個以及之前的元素,後面加了~ li,就是表示符合前面條件的元素之後的li元素。

如果元素總數不足4,則不會存在符合:nth-last-child(n+4)的元素(一共沒有四個,也就不存在倒數第四個),那麼li:nth-last-child (n+4) ~ li就不會選擇任何的元素了。

但是如果只用~ li,是不會配對到第一個li的,所以又加上了li:nth-last-child(n+4):first-child。

這樣也就實現了根據元素個數的多少來應用不同的樣式。


陳述
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
光標的下一個CSS樣式光標的下一個CSS樣式Apr 23, 2025 am 11:04 AM

具有CSS的自定義光標很棒,但是我們可以將JavaScript提升到一個新的水平。使用JavaScript,我們可以在光標狀態之間過渡,將動態文本放置在光標中,應用複雜的動畫並應用過濾器。

世界碰撞:使用樣式查詢的鑰匙幀碰撞檢測世界碰撞:使用樣式查詢的鑰匙幀碰撞檢測Apr 23, 2025 am 10:42 AM

互動CSS動畫和元素相互啟動的元素在2025年似乎更合理。雖然不需要在CSS中實施乒乓球,但CSS的靈活性和力量的增加,可以懷疑Lee&Aver Lee有一天會成為一種

使用CSS背景過濾器進行UI效果使用CSS背景過濾器進行UI效果Apr 23, 2025 am 10:20 AM

有關利用CSS背景濾波器屬性來樣式用戶界面的提示和技巧。您將學習如何在多個元素之間進行背景過濾器,並將它們與其他CSS圖形效果集成在一起以創建精心設計的設計。

微笑嗎?微笑嗎?Apr 23, 2025 am 09:57 AM

好吧,事實證明,SVG的內置動畫功能從未按計劃進行棄用。當然,CSS和JavaScript具有承載負載的能力,但是很高興知道Smil並沒有像以前那樣死在水中

'漂亮”在情人眼中'漂亮”在情人眼中Apr 23, 2025 am 09:40 AM

是的,讓#039;跳上文字包裝:Safari Technology Preview In Pretty Landing!但是請注意,它與在鉻瀏覽器中的工作方式不同。

CSS-tricks編年史XLIIICSS-tricks編年史XLIIIApr 23, 2025 am 09:35 AM

此CSS-tricks更新了,重點介紹了年鑑,最近的播客出現,新的CSS計數器指南以及增加了幾位新作者,這些新作者貢獻了有價值的內容。

tailwind的@Apply功能比聽起來更好tailwind的@Apply功能比聽起來更好Apr 23, 2025 am 09:23 AM

在大多數情況下,人們展示了@Apply的@Apply功能,其中包括Tailwind的單個property實用程序之一(會改變單個CSS聲明)。當以這種方式展示時,@Apply聽起來似乎很有希望。如此明顯

感覺就像我沒有釋放:走向理智的旅程感覺就像我沒有釋放:走向理智的旅程Apr 23, 2025 am 09:19 AM

像白痴一樣部署的部署歸結為您部署的工具與降低複雜性與添加的複雜性之間的獎勵之間的不匹配。

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

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

熱工具

SublimeText3漢化版

SublimeText3漢化版

中文版,非常好用

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1

記事本++7.3.1

好用且免費的程式碼編輯器

SAP NetWeaver Server Adapter for Eclipse

SAP NetWeaver Server Adapter for Eclipse

將Eclipse與SAP NetWeaver應用伺服器整合。

SublimeText3 Linux新版

SublimeText3 Linux新版

SublimeText3 Linux最新版