Part 2-2 CSS選擇器

CSS選擇器概況

選擇器{
  屬性: 值; 
}
  • CSS選擇器類似于地址俊卤,通過選擇器的地址作用到標簽里.

基礎選擇器

元素選擇器
元素名{
    屬性:值;
}
  • 根據(jù)指定的元素, 在當前界面中找到所有的該元素, 然后設置屬性.
  • 因為選中的是所有的該元素双谆,所以會在相同元素不同屬性的時候顯示出弱勢.

Id選擇器
#id名稱{
    屬性:值;
}
------------------------
<p id="id名稱">......</p>
  • 根據(jù)指定的id名稱找到對應的標簽, 然后設置屬性.
  • 在一個HTML文檔中的id是不可以重復的.
  • Id的值只能由字母杠娱、數(shù)字下劃線稽揭,并且不能由數(shù)字開頭.
  • Id的值不能是HTML標簽的名稱.

類選擇器
.類名{
    屬性:值;
}
------------------------
<p class="類名 類名">......</p>
  • 根據(jù)指定的類名稱找到對應的元素, 然后設置屬性.
  • 在一個HTML文檔中的class的值是可以重復的.
  • 在編寫class選擇器時一定要在class名稱前面加上點.
  • Class的值只能由字母數(shù)字党巾、下劃線,并且不能由數(shù)字開頭.
  • Class的值不能是HTML標簽的名稱.

通配符選擇器
*{
    屬性:值;
}
  • 給當前界面上所有的標簽設置屬性.

關(guān)系選擇器

后代選擇器
選擇器1 選擇器2{
  屬性: 值;
}
  • 找到所有選擇器1, 然后在選擇器1下面去查找選擇器2選中的元素霜医, 設置屬性.
  • 放進選擇器1中的所有選擇器2都是后代.
  • 后代選擇器可以通過空格一直延續(xù)下去.

子元素選擇器
選擇器1 > 選擇器2{
    屬性: 值;
}
  • 先找到所有選擇器1齿拂, 然后在選擇器1中查找所有直接關(guān)系的選擇器2,設置屬性.
  • 子元素選擇器選中父子關(guān)系的元素肴敛,不會選中被其他元素嵌套的元素.
  • 子元素選擇器可以通過 > 符號一直延續(xù)下去.

相鄰兄弟選擇器
選擇器1 + 選擇器2{
    屬性:值;
}
  • 選擇器1后面緊跟的那個選擇器2設置屬性.

通用兄弟選擇器
選擇器1 ~ 選擇器2{
    屬性:值;
}
  • 選中選擇器1后面的所有選擇器2選中的所有元素署海,設置屬性.

偽類選擇器

普通偽類選擇器
選擇器:關(guān)鍵字{
  屬性: 值;
}
--------------------------------
<a href="#">內(nèi)容......</a>
常用偽類關(guān)鍵字 作用
link a元素在未被訪問前的CSS樣式
visited a元素在被訪問過后的CSS樣式
hover 鼠標停浮在選擇器上的CSS樣式
active a元素在被激活時的CSS樣式

結(jié)構(gòu)性偽類選擇器

E:first-child和E:last-child
  • first-childlast-child選擇器用來定位第一個和最后一個特定的子元素【每個結(jié)構(gòu)會重新計算】.
  • 例如以下代碼,會選中p1医男,p3砸狞,p4p6.
<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p4</p>
<p>p5</p>
<p>p6</p>
</div>
E:nth-child(n)和E:nth-last-child(n)
    <style>
        p,h1{
            height:30px;
            width:300px;
            border:1px solid #00A2E9;
        }
        p:nth-child(2n){
            background-color: #64b0ff;
        }
    </style>
-------------------------------------------
<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p1</p>
<p>p2</p>
<p>p3</p>
</div>

<div>
<p>p1</p>
<h1>h1</h1>
<p>p2</p>
<p>p3</p>
</div>
運行效果
  • nth-child(n) 選擇器用來定位某個父元素一個或多個特定的子元素【每個父元素下的選擇器會重新計算參數(shù)n】. 其中n是其參數(shù),取值是整數(shù)值镀梭、表達式(2n+1刀森、-n+5)關(guān)鍵詞(odd、even).

  • 但是這種方法有很大的缺陷报账,渲染的原理是選中該父元素下的第n個子元素研底,然后核對選中的是否是特定的子元素,再進行渲染.但如果不是特定的子元素透罢,那么該元素不會被渲染榜晦,并且參數(shù)n會直接跳到下一個取值.【如圖h1沒有被渲染,但是p2也沒有被渲染】

  • nth-last-child(n) 選擇器和前面的nth-child(n)選擇器一樣羽圃,不同點只是從某父元素的最后一個子元素開始計算乾胶,這里的使用就不舉例說明了.

E:nth-of-type(n) 和E:nth-last-of-type(n)
  • E:nth-of-type(n)E:nth-child(n)很相似,參數(shù)n 的取值規(guī)律一樣.

  • 這個方法正好彌補了E:nth-child(n)的缺陷统屈,用E:nth-of-type(n)來定位于父元素中某種類型的子元素是非常好用的.

  • E:nth-last-of-type(n) 選擇器和前面的E:nth-of-type(n)選擇器一樣胚吁,不同點只是從某父元素的最后一個子元素開始計算,這里的使用就不舉例說明了.


偽元素選擇器

<style>
  選擇器::偽元素{
    content:" "
</style>
常用偽元素選擇器 作用
::after 在選中的元素的后面創(chuàng)建一個子元素
::before 在選中的元素的前面創(chuàng)建一個子元素
::first-letter 在選中的元素的第一個字
::first-line 在選中的元素的第一行

屬性選擇器

<style>
  E[attribute]{
    屬性:值
}
</style>
所有元素選擇器 作用 出自
[attribute] 選中有該屬性的該元素 CSS2
[attribute=value] 選中有該屬性且屬性的值等于Value的元素 CSS2
[attribute^=value] 選中有該屬性且屬性的值以Value開頭的元素 CSS3
[attribute|=value] 選中有該屬性且屬性的值以Value開頭的元素愁憔,但值必須是整個單詞 CSS2
[attribute$=value] 選中有該屬性且屬性的值以Value結(jié)尾的元素 CSS3
[attribute*=value] 選中有該屬性且屬性的值包含Value CSS3
[attribute~=value] 選中有該屬性且屬性的值包含Value腕扶,但值必須是獨立的 CSS2
  • [attribute|=value][attribute^=value]的區(qū)別在于[attribute|=value]中的只能找到value開頭,并且value是被-和其它內(nèi)容隔開的.
  • [attribute*=value][attribute~=value]的區(qū)別在于[attribute~=value]中的value必須被空格隔開的.

選擇器優(yōu)化

對于瀏覽器來說,解析每種選擇器所耗費的時間并不是一樣的吨掌。所以當我們使用選擇器的時候也有必要了解如何才能寫出最優(yōu)選擇器.

選擇器效率

根據(jù)網(wǎng)站效率專家 Steve Souders 指出半抱,各種 CSS 選擇器的效率由高至低排序如下

*   id選擇器(#myid)
*   類選擇器(.myclassname)
*   標簽選擇器(div,h1,p)
*   相鄰選擇器(h1 + p)
*   子選擇器(ul > li)
*   后代選擇器(li a)
*   通配符選擇器(*)
*   屬性選擇器(a[rel="external"])
*   偽類選擇器(a:hover,li:nth-child)

在以下代碼中我們可以通過很多種方法去選中它,如p膜宋,.red窿侈,#test[class="red"]等等. 但如按照執(zhí)行效率來秋茫,id選擇器是最佳的史简,其次是類選擇器,然后是元素選擇肛著,最后才是屬性選擇器.

<p id="test" class="red">我用來測試選擇器的優(yōu)化</p>

選擇器解讀順序

瀏覽器解讀選擇器圆兵,遵循的原則是從選擇器的右邊到左邊讀取.
**例如

<style>
  .list .item .item-tt{
    color:"blue";
  }
</style>

這個選擇器中跺讯,瀏覽器先找的是.item-tt,然后繼續(xù)向父級元素尋找.item殉农,再找.list刀脏,這樣才完成了最終的選擇器匹配.
所以如果路徑鏈越短,效率也就相應有所提高.


選擇器參考手冊

首先是W3school的選擇器參考超凳,歸類很詳細愈污,非常適合入門學習:

或者直接參考選擇器手冊:


參考資料

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末暂雹,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子创夜,更是在濱河造成了極大的恐慌擎析,老刑警劉巖,帶你破解...
    沈念sama閱讀 211,376評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件挥下,死亡現(xiàn)場離奇詭異,居然都是意外死亡桨醋,警方通過查閱死者的電腦和手機棚瘟,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,126評論 2 385
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來喜最,“玉大人偎蘸,你說我怎么就攤上這事∷材冢” “怎么了迷雪?”我有些...
    開封第一講書人閱讀 156,966評論 0 347
  • 文/不壞的土叔 我叫張陵撩满,是天一觀的道長剿干。 經(jīng)常有香客問我,道長弯洗,這世上最難降的妖魔是什么能真? 我笑而不...
    開封第一講書人閱讀 56,432評論 1 283
  • 正文 為了忘掉前任赁严,我火速辦了婚禮,結(jié)果婚禮上粉铐,老公的妹妹穿的比我還像新娘疼约。我一直安慰自己,他們只是感情好蝙泼,可當我...
    茶點故事閱讀 65,519評論 6 385
  • 文/花漫 我一把揭開白布程剥。 她就那樣靜靜地躺著,像睡著了一般汤踏。 火紅的嫁衣襯著肌膚如雪织鲸。 梳的紋絲不亂的頭發(fā)上舔腾,一...
    開封第一講書人閱讀 49,792評論 1 290
  • 那天,我揣著相機與錄音昙沦,去河邊找鬼琢唾。 笑死,一個胖子當著我的面吹牛盾饮,可吹牛的內(nèi)容都是我干的采桃。 我是一名探鬼主播,決...
    沈念sama閱讀 38,933評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼丘损,長吁一口氣:“原來是場噩夢啊……” “哼普办!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起徘钥,我...
    開封第一講書人閱讀 37,701評論 0 266
  • 序言:老撾萬榮一對情侶失蹤衔蹲,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后呈础,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體舆驶,經(jīng)...
    沈念sama閱讀 44,143評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,488評論 2 327
  • 正文 我和宋清朗相戀三年而钞,在試婚紗的時候發(fā)現(xiàn)自己被綠了沙廉。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,626評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡臼节,死狀恐怖撬陵,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情网缝,我是刑警寧澤巨税,帶...
    沈念sama閱讀 34,292評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站粉臊,受9級特大地震影響草添,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜维费,卻給世界環(huán)境...
    茶點故事閱讀 39,896評論 3 313
  • 文/蒙蒙 一果元、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧犀盟,春花似錦而晒、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,742評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春监署,著一層夾襖步出監(jiān)牢的瞬間颤专,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工钠乏, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留栖秕,地道東北人。 一個月前我還...
    沈念sama閱讀 46,324評論 2 360
  • 正文 我出身青樓晓避,卻偏偏與公主長得像簇捍,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子俏拱,可洞房花燭夜當晚...
    茶點故事閱讀 43,494評論 2 348

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