亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

前端 - dom是如何與css規則匹配的?

瀏覽:48日期:2023-08-07 09:38:55

問題描述

比如我有如下CSS代碼:

.red { background-color: red;}table { background-color: yellow;}

<table> <tr> <td>123</td> <td>123</td> </tr> <tr> <td>123</td> <td class='red'>123</td> </tr></table>

解析CSS的時候先找到class='red',把那個td設置成紅色,然后找到table,把table設置成黃色,同時他又能分辨出class='red'那個td,并且不會覆蓋它,這是怎么做到的?是不是每個規則都會去看之前解析的規則是否匹配了。比如有n個dom,m個規則,每個dom都要去從這m個規則中找是否匹配,這個匹配的算法是什么樣的呢?會把所有的css規則生成一棵樹然后每個dom在樹上查找,還是會用其他查找算法呢?這篇文章講了一些,求高人解惑:http://calendar.perfplanet.com/2011/css-selector-performance-has-changed-for-the-better/

問題解答

回答1:

其實,沒你說的那么復雜,這里就是一個優先級和繼承的問題

繼承:如果父元素上設置了能用于繼承的樣式,而子元素上又沒定義相同的樣式,那么就會直接父元素的,比如像 font-size、background等;有些樣式是不能繼承的,比如border、padding等;

優先級:如果針對同一個元素在樣式表中設置了多個選擇器操作它時,那么在優先級相同的情況下,最后設置的會覆蓋掉前面所有的設置,而且元素本身設置的樣式優先級也會高于繼承的樣式;

說一下優先級的規則:

id選擇的優先級為 0 1 0 0class選擇的優先級為 0 0 1 0ele 選擇的優先級為 0 0 0 1繼承的樣式是沒有優先級的

這里我只是說了三個常見的優先級,更多優先級規則LZ可以去看看css權威指南(第二版);

再回到你的問題當中table設置了背景色,那子元素td會直接繼承過來,但是,又針對某一個td設置了一個class='red',跟據上面的優先級規則,其他td是沒有優先級的,只是單純的繼承了table的樣式,而class='red的這個td的優先級為 0010,固優先級最高,所以應用之;

最后補充一句:優先級相加即使大于10也不會向前進一如:0 0 1 0 大于 0 0 0 15

回答2:

最簡單的方法就是找個開源的代碼看一下,比如 webkit。

1、HTML瀏覽器探究——webkit部分——解析(1)HTML起源瀏覽器探究——webkit部分——解析HTML(2)解碼和HTMLTokenizer的處理瀏覽器探究——webkit部分——解析HTML(3)HTMLToken的處理2、CSSWebkit內核探究【2】——Webkit CSS實現

我上面推薦的博客,都是系列。感興趣的話,可以順帶著看看其它的文章。

希望對你有幫助。

回答3:

w3c標準只會告訴要做成這樣,用什么算法實現交給了瀏覽器,比如v8引擎

標簽: CSS
相關文章:
主站蜘蛛池模板: 中国一级全黄的免费观看 | 日韩精品无码一区二区三区 | 一本高清在线视频 | 国产精品亚洲欧美云霸高清 | 国产精品亚洲一区二区三区在线播放 | 亚洲午夜久久影院 | 欧美性生交大片 | 国产成人精品视频免费大全 | 亚洲你懂得 | 毛片免费视频 | 久久五月天婷婷 | 亚洲欧美日本一区 | 在线观看亚洲专3333 | 激情欧美一区二区三区 | 91看片在线观看 | 一道精品视频一区二区三区图片 | 国产欧美精品一区二区三区 | 国产三级视频在线观看视主播 | 国产欧美精品专区一区二区 | 日本特黄特色aaa大片免费欧 | 亚洲欧美国产精品第1页 | 国产精品91在线播放 | 国产欧美日韩精品第三区 | japanese无码中文字幕 | 久久精品国产亚洲麻豆 | 鲁丝片一区二区三区 | 热伊人99re久久精品最新地 | 亚洲午夜免费视频 | 亚洲欧美一区二区三区不卡 | 欧美精品v欧洲高清 | 亚洲精品综合网在线8050影院 | 亚洲综合一区二区 | 草草草草视频 | 成人在线视频免费看 | 国产日韩一区二区 | 一木道一二三区精品 | 婷婷99视频精品全部在线观看 | 久久婷婷色综合老司机 | 中文字幕 日韩有码 | 亚洲一级毛片欧美一级说乱 | 爱爱网站在线观看免费 |