偽類選擇器之E:first-child系列和E:first-of-type系列


剛開始學(xué)習(xí)選擇器,一開始對偽類選擇器確實有點懵仿贬。昨天晚上自己動手寫了寫纽竣,終于是慢慢搞懂了。下面對一些容易誤解的一些知識點做個總結(jié)茧泪,便于以后復(fù)習(xí)和查閱蜓氨。


一.E:first-child

  • 我們先來看看:first-child,一開始我就對這個偽類選擇器誤解了队伟,以為只是選擇某個元素的第一個子元素穴吹。舉個例子:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>偽類選擇器</title>
<style>
p:first-child{
  color: yellow;
}
li:first-child{
  background: #ccc;
}
span:first-child{
  color: red;
}
</style>
</head>
<body>
  <div>
    <h3> <em>My</em> <span>goal</span></h3>
    <p>Next stage</p>
    <ol>
      <li>Learn the front knowledge.</li>
      <li>Find a satisfactory internship.</li>
      <li>Find a <span>good job</span> when graduating.</li>
    </ol>
    <p>Come on!</p>
  </div>
</body>
</html>

我們可以事先想一下結(jié)果會是什么。
先分析一下嗜侮。在上面的例子中作為某個父元素的第一個子元素的有:第一個h3港令、第一個em、第一個span棘钞、第一個p缠借、第一個li。
再來看看第一個樣式宜猜,p:first-child{color: yellow;}泼返,它的意思不是說要把p元素的第一個元素變成黃色,而是說把作為某個元素第一個子元素的所有p元素設(shè)置為黃色。也就是說它必須要滿足兩個條件:第一姨拥,必須為p標簽绅喉;第二,必須要為某個父元素的第一個子元素叫乌。按照這么說來柴罐,例子中沒有符合條件的p標簽。
然后再來看看第二個樣式憨奸,li:first-child{background: #ccc;},將作為某個元素(ol或者ul)的第一個子元素li設(shè)置背景色為灰色革屠,顯而易見,有符合條件的li元素排宰,那就是<li>Learn the front knowledge.</li>似芝。
最后再來看看第三個樣式,span:first-child{color: red;}板甘,它就是說把作為某個元素第一個子元素是span的元素顏色變?yōu)榧t色党瓮。從上面的例子來看,span有兩次出現(xiàn)盐类。第一次是作為h3的第二個子元素寞奸,所以不滿足要求呛谜。再來看看第二個span,它是作為li的第一個子元素枪萄,滿足了兩個條件隐岛,所以肯定會變成紅色。
結(jié)果和預(yù)想的完全吻合:

first-child

  • 為了加深理解咱們再來舉兩例:
  • 例1:
<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>first-child</title>
<style>
.fruit p:first-child{
 color: red;
}
.fruit > p:first-child{
 text-align: center;
}
</style>
</head>
<body>
<div class="fruit">
  <p>There are many fruit.For example:</p>
    <ul>
      <li>grape</li>
      <li>banana</li>
      <li>watermelon <p>and so on.</p></li>
    </ul>
  <p>Which is your favorite?</p>
</div>
</body>
</html>

上面的代碼中寫了兩個樣式呻引,其中會牽扯到組合選擇器礼仗。我們先來看看第一個吐咳,.fruit p:first-child{color: red;}逻悠。這是一個后代選擇器,這在我的另一篇博客:CSS選擇器當中做過說明韭脊。它用來匹配.fruit的所有后代(不只是子元素童谒、還包括子元素向下遞歸),而在這里后代的要求為:必須是p元素且必須為某個元素的第一個子元素沪羔。這樣說來滿足要求的就是:
<p>There are many fruit.For example:</p><p>and so on.</p>饥伊,所以結(jié)果是把它們渲染為紅色。再來看看第二個樣式蔫饰,.fruit > p:first-child{text-align: center;}琅豆。這是一個直接子元素選擇器,它用來匹配.fruit的直接子元素(不包括向下遞歸的元素篓吁,而是同一層級的第一層子元素茫因。),而直接子元素的要求為:必須是p元素且必須為某個元素的第一個子元素杖剪。這樣說來滿足要求的就是:<p>There are many fruit.For example:</p>冻押。
再來看看結(jié)果,和預(yù)想的完全一樣盛嘿。

后代選擇器和:first-chlid組合使用

  • 例2:
<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>first-child</title>
<style>
p:first-child span{
  font-weight: bold;
}
</style>
</head>
<body>
 <div class="hello">
   <p><em>Hello</em>,my name is <span>cao tingting</span>.I'm a <span>new-comer</span> here and relly <span>appreciate</span> your advice.</p>
 </div>
</body>
</html>

例2中只有一個樣式洛巢,它表示什么意思呢?p:first-child span次兆,首先找到某個元素第一個子元素是p的標簽稿茉,再來找到p里面所有的<span>。那么顯而易見芥炭,在這個例子中就是<span>cao tingting</span>漓库、<span>new-comer</span>以及<span>new-comer</span>,將他們設(shè)置粗體蚤认。

效果

總結(jié):E:first-child要滿足兩個條件米苹。第一:必須是E元素;第二:必須要是某元素的第一個子元素砰琢。

二.E:first-of-type

這個偽類選擇器的含義就是匹配父元素下使用同種標簽的第一個子元素(等同于:nth-of-type(1))蘸嘶,它和E:first-child不一樣良瞧。它主要強調(diào)同種類的標簽中的第一個而不管這類標簽是否是第一個出現(xiàn)。也就是說先找出所有的E元素再找到第一個训唱。下面來舉個例子進行說明褥蚯,我們就用第一個例子來說明,以便進行對比况增。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>偽類選擇器</title>
<style>
p:first-child{
  background: #ccc;
}
p:first-of-type{
   color: red;
}
</style>
</head>
<body>
  <div>
    <h3><em>My</em> <span>goal</span></h3>
    <p>Next stage</p>
    <ol>
      <li>Learn the front knowledge.</li>
      <li>Find a satisfactory internship.</li>
      <li>Find a <span>good job</span> when graduating.</li>
    </ol>
    <p>Come on!</p>
  </div>
</body>
</html>

前面已經(jīng)分析過為什么p:first-child會沒有效果赞庶,咱們再來看看p:first-of-type,首先找出所有的p元素澳骤,再來看看第一個是誰歧强,這里面就是<p>Next stage</p>瘩扼,所以它渲染為紅色秩命。

效果對比圖

總結(jié):E:first-of-type強調(diào)的是以元素種類劃分齐婴,即先找到所有的E元素涮因,再來找到第一個浴讯。

三.以此類推的E:nth-child(n)和E:nth-of-type(n)等等

關(guān)于n的取值囚企,它可以為: 1哆料,2爵川,3棋枕,4白修,5; 2n+1, 2n, 4n-1重斑; odd, even兵睛。

  • nth-child(n)
    它表示匹配其父元素的第n個子元素,第一個編號為1绸狐。如果第n個子元素為E卤恳,則被選中。它其實和E:first-child是一個原理寒矿,都要滿足上面提到的兩個條件突琳。
    與E:first-child原理相同的還有:
    E:nth-last-child(n),表示匹配其父元素的倒數(shù)第n個子元素,第一個編號為1符相;
    E:last-child拆融,表示匹配父元素的最后一個子元素,等同于:nth-last-child(1)啊终;

  • E:nth-of-type(n)
    它表示匹配同一種類標簽的第n個子元素镜豹。它的原理和E:first-of-type一樣。
    與E:first-of-type原理相同的還有:
    E:nth-last-of-type(n)蓝牲,表示匹配作為某個元素子元素E(只計算使用同種標簽的元素)的倒數(shù)第n個元素趟脂。
    E:first-of-type:匹配父元素下使用同種標簽的第一個子元素,等同于:nth-of-type(1)
    E:last-of-type:匹配父元素下使用同種標簽的最后一個子元素例衍,等同于:nth-last-of-type(1)
    為了看的更明顯昔期,再來舉個例子吧已卸。

<!DOCTYPE html>
<html>
<head>
  <meta charset="utf-8">
  <title>對比</title>
<style>
span:nth-child(2n){
  background: yellow;
}
span:nth-of-type(2n){
  color: red;
}
</style>
</head>
<body>
 <div class="box">
   <div class="content">
     <h3>標題</h3>
       <span>內(nèi)容1</span>
       <span>內(nèi)容2</span>
     <p>這是一個<span>很長</span>的<span>段落。</span></p>
   </div>
       <ol>
         <li>列表<span>內(nèi)容</span></li>
         <li>列表內(nèi)容</li>
         <li>列表內(nèi)容</li>
       </ol>
 </div>
</body>
</html>

結(jié)果也是可以預(yù)料的硼一。


結(jié)果對比

到此為止應(yīng)該對這一塊都很清楚了吧累澡。


再來補充幾點用法

四.感知子元素的個數(shù)

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

:nth-last-child(n+4)這一個選擇器的意思就是倒數(shù)第四個以及之前的元素,后面加了~ li般贼,就是表示符合前面條件的元素之后的li元素愧哟。
如果總數(shù)不夠四個,就不會選擇任何元素哼蛆。
但是如果只用~ li蕊梧,是不會匹配到第一個li的,所以又加上了li:nth-last-child(n+4):first-child人芽。
實現(xiàn)了根據(jù)元素個數(shù)的多少來應(yīng)用不同的樣式望几。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市萤厅,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌靴迫,老刑警劉巖惕味,帶你破解...
    沈念sama閱讀 206,214評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異玉锌,居然都是意外死亡名挥,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,307評論 2 382
  • 文/潘曉璐 我一進店門主守,熙熙樓的掌柜王于貴愁眉苦臉地迎上來禀倔,“玉大人,你說我怎么就攤上這事参淫【群” “怎么了?”我有些...
    開封第一講書人閱讀 152,543評論 0 341
  • 文/不壞的土叔 我叫張陵涎才,是天一觀的道長鞋既。 經(jīng)常有香客問我,道長耍铜,這世上最難降的妖魔是什么邑闺? 我笑而不...
    開封第一講書人閱讀 55,221評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮棕兼,結(jié)果婚禮上陡舅,老公的妹妹穿的比我還像新娘。我一直安慰自己伴挚,他們只是感情好靶衍,可當我...
    茶點故事閱讀 64,224評論 5 371
  • 文/花漫 我一把揭開白布臂寝。 她就那樣靜靜地躺著,像睡著了一般摊灭。 火紅的嫁衣襯著肌膚如雪咆贬。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,007評論 1 284
  • 那天帚呼,我揣著相機與錄音掏缎,去河邊找鬼。 笑死煤杀,一個胖子當著我的面吹牛眷蜈,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播沈自,決...
    沈念sama閱讀 38,313評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼酌儒,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了枯途?” 一聲冷哼從身側(cè)響起忌怎,我...
    開封第一講書人閱讀 36,956評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎酪夷,沒想到半個月后榴啸,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,441評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡晚岭,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,925評論 2 323
  • 正文 我和宋清朗相戀三年鸥印,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片坦报。...
    茶點故事閱讀 38,018評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡库说,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出片择,到底是詐尸還是另有隱情潜的,我是刑警寧澤,帶...
    沈念sama閱讀 33,685評論 4 322
  • 正文 年R本政府宣布构回,位于F島的核電站夏块,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏纤掸。R本人自食惡果不足惜脐供,卻給世界環(huán)境...
    茶點故事閱讀 39,234評論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望借跪。 院中可真熱鬧政己,春花似錦、人聲如沸掏愁。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,240評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至沦泌,卻和暖如春糊昙,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背谢谦。 一陣腳步聲響...
    開封第一講書人閱讀 31,464評論 1 261
  • 我被黑心中介騙來泰國打工释牺, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人回挽。 一個月前我還...
    沈念sama閱讀 45,467評論 2 352
  • 正文 我出身青樓没咙,卻偏偏與公主長得像,于是被迫代替她去往敵國和親千劈。 傳聞我的和親對象是個殘疾皇子祭刚,可洞房花燭夜當晚...
    茶點故事閱讀 42,762評論 2 345

推薦閱讀更多精彩內(nèi)容