問:什么是CSS reset
在不同瀏覽器之間,默認樣式有著諸多差異和問題,而為了在不同瀏覽器之間具備相同的視覺效果阅束,開發(fā)人員往往會在樣式表文件中引入一段CSS代碼,如http://meyerweb.com/eric/tools/css/reset/reset200802.css茄唐,我們把這個過程叫做CSS reset息裸。
當然,好處就和他的作用一樣沪编。但是我們應(yīng)該認識其缺點呼盆,很多如排版標簽,列表標簽等這樣的語義元素就失去了他的意義蚁廓,在沒有為其設(shè)置其他樣式時访圃,視覺上和其他內(nèi)容也沒了區(qū)別;如果頁面內(nèi)有第三方內(nèi)容嵌入相嵌,則會影響第三方內(nèi)容的視覺效果腿时;而很多開發(fā)人員更是直接百度一段代碼,復制到自己的項目中饭宾,我認為這樣的開發(fā)是不負責任的批糟。
個人認為在項目中可根據(jù)需求對一些全局樣式進行設(shè)置,如字體看铆,字號等徽鼎,而對于元素的樣式設(shè)置應(yīng)該通過選擇器精確的設(shè)置。在項目中,本人一般都會建立一個基礎(chǔ)的樣式文件否淤,里面編寫通用的類選擇器满败,在需要的元素上添加類名達到重置的效果。如
.no-padding {padding: 0;}
.only-content {padding: 0;margin: 0;border: 0}
<body class="only-content user-difined-className"></body>
問:CSS性能優(yōu)化
在看到這個問題的時候叹括,捫心自問算墨,還真沒在項目中考慮太多CSS性能優(yōu)化。以下內(nèi)容由網(wǎng)絡(luò)信息總結(jié)汁雷。
作為一名前端净嘀,在開始學習時就會知道一句話——樣式放在文檔頭部,腳本放在文檔底部侠讯。根據(jù)瀏覽器工作過程挖藏,我們知道渲染是在加載完樣式文件后開始的,所以樣式文件放在頭部可減少頁面空白的時間厢漩,而放在底部膜眠,頁面需要等待HTML內(nèi)容加載完成才會加載樣式文件,就會導致頁面有段時間看上去沒有樣式(的確沒有)溜嗜。
在CSS優(yōu)化中宵膨,眾所周知的估計就是加載優(yōu)化吧。在實際項目中炸宵,一般通過減少使用import或者不使用import辟躏,壓縮文件體積等方式來減少網(wǎng)絡(luò)請求,減少傳輸內(nèi)容來提高加載性能土全。
我們可以從以下方面進行調(diào)優(yōu):
盡量避免使用:
expression
表達式[IE]以及filter
屬性[IE]捎琐。expression表達式在文檔的很多交互事件中都會執(zhí)行,如頁面滾動裹匙,鼠標滾動瑞凑,改變窗口大小等;而filter屬性比較消耗內(nèi)存(非常),不僅如此概页,所以用到該filter的元素渲染時都會重新分析該樣式籽御,而且下載filter里的圖片會導致瀏覽器停止渲染。css縮寫:在css中很多屬性可設(shè)置多個值绰沥,如
margin
篱蝇,padding
,border
徽曲,font
零截,background
等,盡量直接對該屬性設(shè)置多個值秃臣,避免多個值分開設(shè)置涧衙,如
no:
padding-left: 0;
padding-right: 1px;
padding-top: 2px;
padding-bottom: 3px;
do:
padding: 2px 1px 3px 0
減少使用不必要的并行規(guī)則哪工,如
button#oneBtn{...},button.btn{...}
。對于瀏覽器來講弧哎,定位一個oneBtn
和.btn
比同時定位button#oneBtn
,button.btn
更快雁比。盡量減少規(guī)則層數(shù),層數(shù)越多撤嫩,定位越慢(非常慢)偎捎,使用一個有語義的選擇器往往能夠取得更好的效率。
利用好繼承機制序攘。
減少重布局以及重繪茴她。改變元素大小,位置的css屬性將會導致相關(guān)圖層重新布局程奠,不改變節(jié)點的大小和位置的屬性改變不會觸發(fā)重布局丈牢,如果改變了渲染效果會觸發(fā)重繪。
問:CSS預(yù)處理
什么是CSS預(yù)處理呢瞄沙?CSS預(yù)處理是一種技術(shù)己沛,可以很好的提升CSS的編程性,開發(fā)效率以及可維護性距境,就是像編寫其他程序一樣申尼,可以通過定義變量,調(diào)用函數(shù)等方式編寫程序肮疗,最后通過特殊的處理器輸出CSS代碼晶姊。
該技術(shù)發(fā)展到今天,已經(jīng)有很多成熟的CSS預(yù)處理器語言伪货,如Sass,LESS等钾怔,并在很多大型項目中使用碱呼。
問:浮動的原理和工作方式,會產(chǎn)生什么影響呢宗侦,要怎么處理愚臀?
工作方式:浮動元素脫離文檔流,不占據(jù)空間矾利。浮動元素碰到包含它的邊框或者浮動元素的邊框停留姑裂。
影響:
浮動會導致父元素無法被撐開,影響與父元素同級的元素男旗。
與該浮動元素同級的非浮動元素舶斧,如果是塊級元素,會移動到該元素下方察皇,而塊級元素內(nèi)部的行內(nèi)元素會環(huán)繞浮動元素茴厉;而如果是內(nèi)聯(lián)元素則會環(huán)繞該浮動元素泽台。
與該元素同級的浮動元素,對于同一方向的浮動元素(同級)矾缓,兩個元素將會跟在碰到的浮動元素后怀酷;而對于不同方向的浮動元素,在寬度足夠時嗜闻,將分別浮動向不同方向蜕依,在寬度不同是將導致一方換行(換行與HTML書寫順序有關(guān),后邊的將會浮動到下一行)
浮動元素將被視作為塊元素
而浮動元素對于其父元素之外的元素琉雳,如果是非浮動元素笔横,則相當于忽視該浮動元素,如果是浮動元素咐吼,則相當于同級的浮動元素吹缔。
而常用的清除浮動的方法,則如使用空標簽锯茄,overflow厢塘,偽元素等。在使用基于浮動設(shè)計的CSS框架時肌幽,自會提供清除的方法晚碾,個人并不習慣使用浮動進行布局。
問:CSS有哪些選擇器喂急?它們的權(quán)重怎么計算的格嘁?
CSS選擇器分基本選擇器(元素選擇器,類選擇器廊移,通配符選擇器糕簿,ID選擇器,關(guān)系選擇器),屬性選擇器狡孔,偽類選擇器懂诗,偽元素選擇器,以及一些特殊選擇器,如has苗膝,not等殃恒。
在CSS中,權(quán)重決定了哪些CSS規(guī)則生效辱揭,瀏覽器按如下規(guī)則進行CSS權(quán)重計算
1000:內(nèi)聯(lián)樣式
0100:ID選擇器
0010:類离唐,偽類,屬性選擇器
0001:元素问窃,偽元素亥鬓,通配符,子選擇器泡躯,相鄰選擇器等
無:繼承樣式
?瀏覽器通過對元素上的CSS規(guī)則進行權(quán)重計算贮竟,權(quán)重高的規(guī)則將生效丽焊,如果權(quán)重相同則最后的規(guī)則生效,而使用的咕别!important的規(guī)則將具備最高權(quán)重技健,如果多條規(guī)則有!important惰拱,同樣是最后的規(guī)則生效雌贱。