理論上每個 Element 都可以設定獨立 Class 加以選取,若想在不增加 Class 前提下選取下一個 Element,可使用 +
加以選取。
Version
CSS 3
Adjacent Sibiling Combinator
Web Tech
已經有 .title
,在不想增加 class 前提下想將 HTML
改成紅色。
<template>
<h1 class="title">Web Tech</h1>
<p>HTML</p>
<p>CSS</p>
<p>JavaScript</p>
</template>
<style scoped>
.title + p {
color: #f00;
}
</style>
第 2 行
<h1 class="title">Web Tech</h1>
<p>HTML</p>
<p>CSS</p>
<p>JavaScript</p>
Web Tech
有 .title
,但 HTML
沒有任何 class。
第 9 行
.title + p {
color: #f00;
}
使用 +
選取 .title
下一個 <p>
,因此可選到 HTML
加以改變顏色。
Not Select First li
第二個 <li>
與第三個 <li>
的 iPhone
與 iPad
改成紅色。
<template>
<ul>
<li>Macbook</li>
<li>iPhone</li>
<li>iPad</li>
</ul>
</template>
<style scoped>
li + li {
color: #f00;
}
</style>
10 行
li + li {
color: #f00;
}
li + li
:選取每個<li>
之後的<li>
,因此第一個<li>
不被選取
Vertical Line
想在每個 item 間加入水平分隔線,但第一筆之前與最後一筆之後都沒有分隔線。
<template>
<ul>
<li>Macbook</li>
<li>iPhone</li>
<li>iPad</li>
</ul>
</template>
<style scoped>
li + li {
border-top: 1px solid #f00;
}
</style>
10 行
li + li {
border-top: 1px solid #f00;
}
li + li
:一樣使用此技巧選取所有<li>
,但不包含第一筆,設定每筆的 top border
Horizontal Line
舉一反三也可用在水平方向。
<template>
<ul>
<li>Macbook</li>
<li>iPhone</li>
<li>iPad</li>
</ul>
</template>
<style scoped>
li {
display: inline-block;
padding: 3px;
}
li + li {
border-left: 1px solid #f00;
}
</style>
10 行
li {
display: inline-block;
padding: 3px;
}
設定 <li>
style:
display: inline-block
:使<li>
改成水平顯示padding: 3px
:設定<li>
之間 padding
15 行
li + li {
border-left: 1px solid #f00;
}
li + li
:一樣使用此技巧選取所有<li>
,但不包含第一筆,設定每筆的 left border
Conclusion
- 善用
+
可減少不必要的 class li + li
為<li>
常用 pattern,可讓我們不選擇第一筆