iT邦幫忙

2024 iThome 鐵人賽

DAY 20
1

cover

:only-child 選擇器可以用於選中在父元素中唯一的子元素,用白話來說就是獨生子女元素,常用在只有一個子元素時,可以為該唯一的元素添加特殊的樣式。同樣地,:only-of-type 則是選擇特定類型中唯一的子元素

💠:only-child 基本用法

語法

選擇器:only-child { 
	屬性名: 屬性值; 
}
  • 選擇沒有兄弟的元素

範例

以下範例中,兩個 <div> 元素中分別有多個與一個 <p> 元素。當 <div> 中只有一個 <p> 元素時,該元素的文字會呈現紅色。

<div>
  <p>第一個 P 元素</p>
  <p>第二個 P 元素</p>
  <p>第三個 P 元素</p>
</div>

<div>
  <p>只有一個 P 元素</p>
</div>
p:only-child {
  color: red;
}

only-child

💠:only-of-type 基本用法

語法

選擇器:only-of-type { 
	屬性名: 屬性值; 
}
  • 選擇沒有同類型兄弟的元素

範例

在以下範例中,所有只有一個類型的子元素,文字會呈現紅色。

<div>
  <p>第一個 P 元素</p>
  <p>第二個 P 元素</p>
  <div>第一個 div 元素</div>
  <span>第一個 span 元素</span>
</div>
div :only-of-type {
  color: red;
}

only-of-type

💠實務應用:突顯單篇文章

一起試試:[CODEPEN]

在部落格中,當文章列表中只有一篇文章時,可以透過 :only-child 為其添加特殊的邊框或調整字體大小,以突出這篇文章。

<h2>當只有一篇文章時</h2>
<div class="article-list">
  <div class="article">
    <h3>如何成為前端工程師</h3>
    <p>成為前端工程師需要具備多方面的技能,並且隨著技術發展持續學習</p>
  </div>
</div>

<hr>

<h2>當有多篇文章時</h2>
<div class="article-list">
  <div class="article">
    <h3>HTML5 新特性介紹</h3>
    <p>這篇文章將介紹 HTML5 的新特性,以及如何應用這些特性來提升網站的互動性。</p>
  </div>
  <div class="article">
    <h3>CSS Flexbox 完整指南</h3>
    <p>本指南將深入解說 Flexbox 布局模型,幫助你打造更靈活的網頁排版。</p>
  </div>
  <div class="article">
    <h3>JavaScript ES6 語法更新</h3>
    <p>這篇文章詳細講解了 ES6 版本中的 JavaScript 語法更新,並展示了常見的使用範例。</p>
  </div>
</div>
.article-list {
  display: flex;
  flex-direction: column;
  gap: 20px;
}

.article {
  padding: 15px;
  border: 1px solid #bbb;
  font-size: 16px;
  background-color: #f2f2f2;
}

.article:only-child {
  border: 2px solid #4caf50;
  font-size: 20px;
  background-color: #e8f5e9;
}

only-child

當文章列表中只有一篇文章時,:only-child 會生效,將文章的邊框顏色改為綠色,字體大小調整為 20px,並改變背景色,讓該文章更加突出,從而自動調整排版,避免畫面過於空曠並提升視覺效果。


💠總結

:only-child:only-of-type 選擇器在 CSS 中提供了強大的樣式應用能力,特別是在處理獨特元素時。利用這些選擇器,我們可以在特定情況下,針對唯一子元素進行樣式調整,從而增強用戶介面的可讀性和吸引力。


上一篇
:nth-last-child & :nth-last-of-type 從後數起!CSS 的倒數計算法
下一篇
:root 從根開始掌控全局變數
系列文
你的優先選擇是什麼?從 CSS 選擇器到優先級,深入解析與實用技巧29
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言