1、 css選擇器nane=,CSS選擇器權重如何計算?
很古老的話題了
id=100
class=10
tag(標簽)=1
按照這個規律去計算,比如
#qietu div{}
100+1 = 101
.qietu .box{}
10+10=20
可以得出第一個的權重要比第二個要高。另外關于權重的擴展知識面,我推薦了解下BEM命名規則,這個觀念很好,可以從側面杜絕權重問題的產生,還有一個就是提高權重的方法 !important;
2、 css后代選擇器可以寫幾個?
css后代選擇器可以寫5個,本來css的后代選擇器可以選擇多個,但是層級越深,效率越低,所以最好寫5個就行
3、 postcss和cssmodule是什么?
postcss是什么?
根據官網的解釋,它是一種javascript編寫的工具,用來轉化css的。可以認為它是處理css的插件集合,需要配合諸如webpack、gulp等編譯工具才能展現它強大的能力。
目前社區提供了非常多的插件,比較有名的如下:
autoprefixer 可以為css的屬性配置兼容性的前綴,不需要手動添加postcss-preset-env 允許你使用更加現代的css特性stylelint 檢查css語法錯誤cssnano css的壓縮器等等postcss的原理如果大家了解babel的原理,那就應該聽說過AST即抽象語法樹。編譯器將字符串進行詞法分析、語法分析,再做轉換,最終達到預期的結果。postcss也是同樣的原理,這個包已經為使用者提供了解析的方法parse,并且也提供了很多轉化的API,利用這些就可以自己開發一款postcss插件了。
css Module是什么?先前呢,我們使用css選擇器,它是對整個頁面是有效的,也就是全局的,當你每次迭代需求的時候,需要考慮每次添加新的css是否會影響到其他地方,所以我們有時選擇為樣式表添加命名空間。css Module為我們提供了另外一種開發方式,它可以使css具有局部作用域。
用法如下:
用法是如此的簡單,基本一看就會,css-loader為我們提供了css Module的開關,只要為css-loader添加參數選項modules就可以開啟。注意:它必須放在less或者sass的loader之前。
那它如何做到局部作用域的呢?
打開element面板可以發現,它把class變成了md5戳,對應每個組件,保持唯一。
vue的scoped由此我們聯想到vue的scoped,它也解決了css局部作用域的問題!
它在dom上生成了一個data屬性,并且給class選擇器添加了屬性選擇器,類似于之前的md5戳。不過由于添加了屬性選擇器,使得選擇器的優先級變高了,想在組件外面覆蓋css屬性就變得不那么容易了!
喜歡我的回答就關注我吧,有問題可以發表評論,我們一起學習,共同成長!
4、 什么是類選擇器的命名字符?
一、關于選擇器的命名 W3C CSS2.1的 4.1.3 節中提到:標識符(包括選擇器中的元素名,類和ID)只能包含字符[a- zA-Z0-9]和ISO 10646字符編碼U+00A1及以上,再加連字號(-)和下劃線(_);它們不能以 數字,或一個連字號后跟數字為開頭。它們還可以包含轉義字符加任何ISO 10646字符作為一個數 字編碼。 由于設計到的字符很多,本文只針對字符[a-zA-Z0-9],再加連字號(-)和下劃線(_)進行討論。 關于CSS中允許使用的字符和大小寫信息 二、差異及可能產生的問題 在W3C CSS2.1說明文檔中,只提到選擇器標識符不能以數字,或一個連字號后跟數字為開頭。除 此之外,沒有相關的說明。那么各瀏覽器下的表現是否遵循這一規則呢?