摘要:選擇器匹配流程前進(jìn)一個(gè)選擇器按照來(lái)拆成數(shù)段,每當(dāng)滿足一段條件的時(shí)候,就前進(jìn)一段。后退選擇器的作用范圍,匹配到本標(biāo)簽的結(jié)束標(biāo)簽時(shí)作用范圍邊緣回退。
加載css
加載是異步,不會(huì)影響DOM樹(shù)的構(gòu)建,只是說(shuō)在CSS沒(méi)處理好之前,構(gòu)建好的DOM并不會(huì)顯示出來(lái)
啟發(fā):所以CSS不能太大,頁(yè)面一打開(kāi)將會(huì)停留較長(zhǎng)時(shí)間的白屏,所以把圖片/字體等轉(zhuǎn)成base64放到CSS里面是一種不太推薦的做法
DOM去匹配css rule的時(shí)候必須先等頁(yè)面的css都下載完成
啟發(fā):head中的css是要下載完的,body中放CSS的話,會(huì)重新計(jì)算
css語(yǔ)法:選擇器在9課程中可以了解更多選擇器:compound-selector
特點(diǎn)(css設(shè)計(jì)原則):選擇器的出現(xiàn)順序,必定跟構(gòu)建 DOM 樹(shù)的順序一致,即:保證選擇器在 DOM 樹(shù)構(gòu)建到當(dāng)前節(jié)點(diǎn)時(shí),已經(jīng)可以準(zhǔn)確判斷是否匹配,不需要后續(xù)節(jié)點(diǎn)信息 - 未來(lái)不可能會(huì)出現(xiàn)“父元素選擇器”這種東西
流式渲染,每生成一個(gè)dom節(jié)點(diǎn),便立刻去匹配相應(yīng)的css規(guī)則
空格: 后代,選中它的子節(jié)點(diǎn)和所有子節(jié)點(diǎn)的后代節(jié)點(diǎn)
: 子代,選中它的子節(jié)點(diǎn)
+:直接后繼選擇器,選中它的下一個(gè)相鄰節(jié)點(diǎn)
~:后繼,選中它之后所有的相鄰節(jié)點(diǎn)
||:列,選中表格中的一列
winter不講怎么解析css規(guī)則啦,詞法分析和語(yǔ)法分析不做贅述
cssomCSSOM主要是DOM結(jié)構(gòu)上的盒的描述,它基本上是依附于DOM樹(shù)的,不要和css的語(yǔ)法樹(shù)混淆
cssom是有rule部分和view部分的,rule部分是在dom開(kāi)始之前就構(gòu)件完成的,而view部分是跟著dom同步構(gòu)建的。
css選擇器匹配流程前進(jìn):一個(gè) CSS 選擇器按照 compound-selector來(lái)拆成數(shù)段,每當(dāng)滿足一段條件的時(shí)候,就前進(jìn)一段。
后退:選擇器的作用范圍,匹配到本標(biāo)簽的結(jié)束標(biāo)簽時(shí)(作用范圍邊緣)回退。
后代選擇器 “空格”
規(guī)則:
前進(jìn):找到了匹配 a#b 的元素時(shí),我們才會(huì)開(kāi)始檢查它所有的子代是否匹配 .cls(前進(jìn)到.cls)
后退:當(dāng)遇到 時(shí),必須使得規(guī)則 a#b .cls 回退一步(回退到a#b)這樣第三個(gè) span 才不會(huì)被選中 - 后代選擇器的作用范圍是父節(jié)點(diǎn)的所有子節(jié)點(diǎn),因此規(guī)則是在匹配到本標(biāo)簽的結(jié)束標(biāo)簽時(shí)回退。
a#b .cls {
width: 100px; } 1 2 3
后繼選擇器“ ~ ”
規(guī)則:給選擇器的激活- 帶上一個(gè)條件:父元素
原因:后繼選擇器只作用于一層.按照 DOM 樹(shù)的構(gòu)造順序,4 在 3 和 5 中間,我們就沒(méi)有辦法像前面講的后代選擇器一樣通過(guò)激活或者關(guān)閉規(guī)則來(lái)實(shí)現(xiàn)匹配
過(guò)程:當(dāng)前半段的 .cls 匹配成功時(shí),后續(xù) * 所匹配的所有元素的父元素都已經(jīng)確定了(后繼節(jié)點(diǎn)和當(dāng)前節(jié)點(diǎn)父元素相同是充分必要條件
.cls~* { border:solid 1px green; }1 2 3 4 5
子代選擇器“ >”
規(guī)則:拿當(dāng)前節(jié)點(diǎn)的父元素作為父元素
當(dāng) DOM 樹(shù)構(gòu)造到 div 時(shí),匹配了 CSS 規(guī)則的第一段
激活.cls并且指定父元素必須是當(dāng)前 div
div>.cls { border:solid 1px green; }1 2 3 4 5
直接后繼選擇器“ +”
思路1:只對(duì)唯一一個(gè)元素生效,把 #id+.cls 都當(dāng)做檢查某一個(gè)元素的選擇器
思路2:給后繼選擇器加上一個(gè) flag,使它匹配一次后失效
列選擇器“ || ”
專門針對(duì)表格的選擇器,跟表格的模型建立相關(guān),winter不講這個(gè)啦
其他
CSS 選擇器還支持逗號(hào)分隔
視為兩條規(guī)則的一種簡(jiǎn)易寫(xiě)法 a#b, .cls {} a#b {}
選擇器可能有重合
使用樹(shù)形結(jié)構(gòu)來(lái)進(jìn)行一些合并 #a .cls {} #a span {} #a>span {} #a < 空格 >.cls < 空格 >span
總結(jié):
CSS 計(jì)算:把 CSS 規(guī)則應(yīng)用到 DOM 樹(shù)上,為 DOM 結(jié)構(gòu)添加顯示相關(guān)屬性的過(guò)程,得到了一棵帶有 CSS 屬性的樹(shù)
介紹了選擇器的幾種復(fù)合結(jié)構(gòu)應(yīng)該如何實(shí)現(xiàn)
擴(kuò)展閱讀:從Chrome源碼看瀏覽器如何計(jì)算CSS
https://zhuanlan.zhihu.com/p/...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/114500.html
摘要:選擇器匹配流程前進(jìn)一個(gè)選擇器按照來(lái)拆成數(shù)段,每當(dāng)滿足一段條件的時(shí)候,就前進(jìn)一段。后退選擇器的作用范圍,匹配到本標(biāo)簽的結(jié)束標(biāo)簽時(shí)作用范圍邊緣回退。 加載css 加載是異步,不會(huì)影響DOM樹(shù)的構(gòu)建,只是說(shuō)在CSS沒(méi)處理好之前,構(gòu)建好的DOM并不會(huì)顯示出來(lái) 啟發(fā):所以CSS不能太大,頁(yè)面一打開(kāi)將會(huì)停留較長(zhǎng)時(shí)間的白屏,所以把圖片/字體等轉(zhuǎn)成base64放到CSS里面是一種不太推薦的做法 ...
摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來(lái)說(shuō)系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫(kù)直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要...
摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來(lái)說(shuō)系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫(kù)直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要...
摘要:緊跟在后面的是請(qǐng)求頭,每行用冒號(hào)分隔名稱和值按下兩次回車,收到服務(wù)端回復(fù)響應(yīng)部分第一行被稱作,它也分為三個(gè)部分,協(xié)議和版本狀態(tài)碼和狀態(tài)文本。對(duì)前端來(lái)說(shuō)系列的狀態(tài)碼是非常陌生的,原因是的狀態(tài)被瀏覽器庫(kù)直接處理掉了,不會(huì)讓上層應(yīng)用知曉。 筆記說(shuō)明 重學(xué)前端是程劭非(winter)【前手機(jī)淘寶前端負(fù)責(zé)人】在極客時(shí)間開(kāi)的一個(gè)專欄,每天10分鐘,重構(gòu)你的前端知識(shí)體系,筆者主要整理學(xué)習(xí)過(guò)程的一些要...
閱讀 2994·2021-09-26 10:18
閱讀 5312·2021-09-22 15:02
閱讀 2812·2019-08-30 15:53
閱讀 1862·2019-08-29 18:41
閱讀 2709·2019-08-27 10:58
閱讀 2643·2019-08-26 13:49
閱讀 2767·2019-08-26 12:17
閱讀 915·2019-08-26 11:49