本篇文章主要記錄一些css常見的選擇器的區別和用法,如相鄰兄弟選擇器(+)、兄弟選擇器(>)、子選擇器(+)、:nth-child()等,掌握了這些,能夠幫助咱們在前端開發中事半功倍。css
定義:相鄰兄弟選擇器(Adjacent sibling selector)可選擇緊接在另外一元素後的元素,且兩者有相同父元素。html
html代碼:前端
<p>這裏是第一個p標籤</p>
<p>這裏是第二個p標籤</p>
<h2>標題H2</h2>
<p>這裏是第三個p標籤</p>
<p>這裏是第四個p標籤</p>
<p>這裏是第五個p標籤</p>
複製代碼
css樣式:瀏覽器
h2+p {color: red; }
複製代碼
結果: spa
<ul>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ul>
<ol>
<li>List item 1</li>
<li>List item 2</li>
<li>List item 3</li>
</ol>
複製代碼
li + li {color:red;}
複製代碼
結果:3d
分析: 一開始特別納悶爲啥「List item 2」和「List item 3」都被選中了~~~code
首先分析選擇器樣式:li+li{},字面意思是選取全部位於li標籤後的第一個li元素cdn
正由於css選擇器的樣式爲li+li{},因此代碼中的li標籤就能夠一直套用這個「公式」。htm
注:前端面包屑導航中常常用到該選擇器。blog
定義:做用是查找某一個指定元素的後面的全部兄弟結點
結果:
經過這兩個例子,能夠發現雖然這兩個選擇器都表示兄弟選擇器,可是‘+’選擇器則表示某元素後相鄰的兄弟元素,也就是緊挨着的,是單個的(特殊狀況:循環多個)。而‘~’選擇器則表示某元素後全部同級的指定元素,強調全部的。
定義:只能選擇做爲某元素兒子元素的元素(直接子元素),不包括孫元素、曾孫元素等等等。
定義:用於選取屬於其父元素的首個子元素的指定選擇器
嗯,乍一看好像說的不是很明白,所以這個選擇器很容易讓人誤解,一般會有兩種誤解:
正確的理解應該是:只要E元素是它的父級的第一個子元素,就選中。它須要同時知足兩個條件,一個是「第一個子元素」,另外一個是「這個子元素恰好是E」。
<style> span:first-child{color: red;} p:first-child{color: blue;} /*p元素的父元素的第一個子元素是div而不是p元素,所以該樣式不起做用*/ i:first-child{color: orange;} </style>
<div class="demo">
<div>.demo的第一個子元素是div</div>
<!--第一個span元素是它的父級P元素的第一個span,顏色變紅色-->
<p><span>第一個span</span>第一個段落P<span>第二個span</span></p>
<!--第一個i元素是它的父級a元素的第一個i,顏色變橙色-->
<p>一個連接<i>第一個i元素</i></p>
<!--第二個i元素是它的父級a元素的第一個i,顏色變橙色-->
<p>一個連接<i>第二個i元素</i></p>
<p>一個連接</p>
</div>
複製代碼
效果:
定義:該選擇器選取父元素的第 N 個子元素,與類型無關。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>菜鳥教程(runoob.com)</title>
<style> p:nth-child(2) { background:#ff0000; } </style>
</head>
<body>
<h1>這是一個標題</h1>
<p>這是第一個段落。</p>
<p>這是第二個段落。</p>
<p>這是第三個段落。</p>
<p>這是第四個段落。</p>
<p><b>注意:</b> Internet Explorer 8 以及更早版本的瀏覽器不支持 :nth-child()選擇器.</p>
</body>
</html>
複製代碼
效果:
:nth-child(n)的詳細用法:
nth-child(3) 表示選擇列表中的第三個元素。
nth-child(2n)表示列表中的偶數標籤,即選擇第二、第四、第6……標籤
nth-child(2n-1) 表示選擇列表中的奇數標籤,即選擇 第一、第三、第五、第7……標籤
nth-child(n+3) 表示選擇列表中的標籤從第3個開始到最後(>=3)
nth-child(-n+3) 表示選擇列表中的標籤從0到3,即小於3的標籤(<=3)
nth-last-child(3) 表示選擇列表中的倒數第3個標籤
定義:選擇器匹配屬於父元素的特定類型的第 N 個子元素的每一個元素,與元素類型有關
<!DOCTYPE html>
<html>
<head>
<style> p:nth-of-type(2) { background:#ff0000; } </style>
</head>
<body>
<h1>這是標題</h1>
<p>第一個段落。</p>
<p>第二個段落。</p>
<p>第三個段落。</p>
<p>第四個段落。</p>
<p>第五個段落。</p>
</body>
</html>
複製代碼
效果:
定義:能夠爲擁有指定屬性的 HTML 元素設置樣式,而不只限於 class 和 id 屬性。
<html>
<head>
<style type="text/css"> [title~=hello] { color:red; } </style>
</head>
<body>
<h1>能夠應用樣式:</h1>
<h2 title="hello world">Hello world</h2>
<p title="student hello">Hello W3School students!</h1>
</body>
</html>
複製代碼
結果: