iT邦幫忙

2022 iThome 鐵人賽

DAY 10
0
自我挑戰組

掌握 Master CSS 優化開發體驗系列 第 10

Day 10 - 在元素上應用選取器

  • 分享至 

  • xImage
  •  

通用選取器

_ 符號為選取後代節點,* 符號為所有元素。

_* 組合起來為選取到後代所有元素,常會應用在統一設定盒模型。

<body class="box:border_*">...</body>
.box\:border_\* * {
  box-sizing: border-box;
}

class 選取器

當屬性 f:#5a5bd5 與類名 active 組合時 f:#5a5bd5.active,意思為若是當前元素有對應類名 active,即會套用對應的屬性 f:#5a5bd5

以下方程式碼為例:第二個 a 元素因為有對應的類名 active,因此會套用 f:#5a5bd5 以及 bb:2 這兩個屬性。

<ul class="flex bb:1|solid|#ddd">
  <li>
    <a class="... f:#5a5bd5.active bb:2.active">Home</a>
  </li>
  <li>
    <a class="... f:#5a5bd5.active bb:2.active active">Product</a>
  </li>
  <li>
    <a class="... f:#5a5bd5.active bb:2.active">Team</a>
  </li>
  <li>
    <a class="... f:#5a5bd5.active bb:2.active">About</a>
  </li>
  <li>
    <a class="... f:#5a5bd5.active bb:2.active">Contact</a>
  </li>
</ul>
.f\:\#5a5bd5\.active.active {
  color: rgb(90, 91, 213);
}

.bb\:2\.active.active {
  border-bottom-width: 0.125rem;
}

https://ithelp.ithome.com.tw/upload/images/20220923/20103817Qp3rTPczj0.jpg

ID 選取器

與上方的 class 選取器同理,當元素有對應的 id 時,即會套用對應的屬性。

以下方程式碼為例:第二個 a 元素因為有對應的 id product,因此會套用 f:#5a5bd5 以及 bb:2 這兩個屬性。

<ul class="flex bb:1|solid|#ddd">
  <li>
    <a class="... f:#5a5bd5#product bb:2#product" id="home">Home</a>
  </li>
  <li>
    <a class="... f:#5a5bd5#product bb:2#product" id="product">Product</a>
  </li>
  <li>
    <a class="... f:#5a5bd5#product bb:2#product" id="team">Team</a>
  </li>
  <li>
    <a class="... f:#5a5bd5#product bb:2#product" id="about">About</a>
  </li>
  <li>
    <a class="... f:#5a5bd5#product bb:2#product" id="contact">Contact</a>
  </li>
</ul>
.f\:\#5a5bd5\#product#product {
  color: rgb(90, 91, 213);
}

.bb\:2\#product#product {
  border-bottom-width: 0.125rem;
}

https://ithelp.ithome.com.tw/upload/images/20220923/201038175qhsFqxZhx.jpg

屬性選取器

屬性選取器會使用一組中括號 [] 來表示,這邊簡單列舉幾項應用:

b:0[alt] 代表元素有 alt 時,套用 b:0 這個屬性。

<img class="b:0[alt]" src="..." alt="Home">
<img class="b:0[alt]" src="...">
.b\:0\[alt\][alt] {
  border-width: 0rem;
}

b:0[type=email] 代表元素的 type="email" 時,套用 b:0 這個屬性。

<input class="b:0[type=email]" type="text" />
<input class="b:0[type=email]" type="email" />
.b\:0\[type\=email\][type="email"] {
  border-width: 0rem;
}

後代選取器

後代選取器會使用 _ 符號選取後代節點,這邊舉幾個例子:

_ 後方接著 h2 標籤 f:24_h2,代表選取到後代所有的 h2 元素,並套用 f:24 這個屬性。

<div class="f:24_h2">
  <h2>Hello World!</h2>
  <h2>Hello World!</h2>
</div>
.f\:24_h2 h2 {
  font-size: 1.5rem;
}

_ 後方接著 .title 類名 f:24_.title,代表選取到後代所有的 .title,並套用 f:24 這個屬性。

<div class="f:24_.title">
  <h2 class="title">Hello World!</h2>
  <h2 class="title">Hello World!</h2>
</div>
.f\:24_\.title .title {
  font-size: 1.5rem;
}

親代選取器

+ 符號會選取到同層級後方指定的 "第一個元素"

f:24+p代表選取到同層級後方的第一個 p 元素,套用 f:24 屬性。

<h1 class="f:24+p">Mountain</h1>
<p>A mountain is an elevated portion of the Earth's crust.</p>
.f\:24\+p + p {
  font-size: 1.5rem;
}

~ 符號會選取到同層級後方指定的 "所有元素"

f:24~p 代表選取到同層級後方所有的 p 元素,套用 f:24 屬性。

<h1 class="f:24~p">Mountain</h1>
<p>A mountain is an elevated portion of the Earth's crust.</p>
<p>A mountain is an elevated portion of the Earth's crust.</p>
<p>A mountain is an elevated portion of the Earth's crust.</p>
.f\:24\~p ~ p {
  font-size: 1.5rem;
}

子代選取器

> 符號會選取到 "子代" 的元素。

mb:8>li 代表只有第一個 ul 元素子代的 li 才會套用到 mb:8 這個屬性。

<ul class="mb:8>li">
  <li>
    Home
    <ul>
      <li>SubMenu-1</li>
      <li>SubMenu-2</li>
    </ul>
  </li>
  <li>Product</li>
  <li>Team</li>
  <li>About</li>
  <li>Contact</li>
</ul>
.mb\:8\>li > li {
  margin-bottom: 0.5rem;
}

總結

本日 codepen 連結

Master CSS 選取器的應用非常地靈活,因此如何編寫、安排類名也是很重要的一環。

參考


上一篇
Day 09 - 在元素上應用偽元素
下一篇
Day 11 - 在元素上應用響應式斷點
系列文
掌握 Master CSS 優化開發體驗30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言