css部分基礎(chǔ)知識(shí)回顧(二)

瀏覽器回流與重繪

之所以能在頁(yè)面上看到內(nèi)容,是因?yàn)闉g覽器拿到服務(wù)器發(fā)送的數(shù)據(jù)后,開(kāi)始做解析標(biāo)簽樣式的操作,然后維護(hù)了一棵Dom樹和Style樹。
回流(重排):是指瀏覽器重新刷新整個(gè)或者部分模塊的Dom或者Style樹,然后在頁(yè)面上進(jìn)行重新渲染。而引起重新渲染的條件可能是改變某個(gè)div的位置、大小或者結(jié)構(gòu)等。
重繪:是指部分樣式的修改,比如color、background-color或者visibility等的改變,不會(huì)改動(dòng)Dom樹原本的樣子或者位置,這樣的改動(dòng)會(huì)造成瀏覽器的重繪。
回流必然引起重繪,但是重繪并不一定會(huì)引起回流。由上介紹也可知道,回流更加消耗資源,盡量減少回流次數(shù),比如修改樣式的時(shí)候使用style.cssText一次性設(shè)置,或者使用.class樣式一次性修改class,或者在樣式修改完成后在將其display設(shè)置為block等。
還有就是:重排也不是立即執(zhí)行的,必須要等到重排隊(duì)列中數(shù)量的操作或者等到一定的時(shí)間間隔才會(huì)執(zhí)行重排操作。還有一種可能是會(huì)立即重排的,不管重排隊(duì)列中操作多少或者間隔時(shí)間是否到了,都會(huì)立即發(fā)生,那就是如下:

div.style.width = "200px";
div.style.height = "300px";
//此時(shí)并不一定會(huì)執(zhí)行2次重排,原因上文已經(jīng)說(shuō)了。

div.style.width = "200px";
console.log(div.offsetWidth);
div.style.height = "300px";
console.log(div.offsetHeight);
//這種情況就會(huì)重繪2次,因?yàn)樵谠O(shè)置完width后,立即取了寬度,瀏覽器知道你需要寬度,所以會(huì)立即重排操作,然后給你最新的寬度。

css權(quán)重

css中存在權(quán)重,權(quán)重大的會(huì)優(yōu)先顯示,所以會(huì)出現(xiàn),都設(shè)置了某一個(gè)div的顏色,但是只會(huì)顯示一種的原因(css中某個(gè)div的顏色顯示什么,并不是由什么外部樣式,內(nèi)部樣式,行內(nèi)樣式?jīng)Q定的,也不是由樣式表加載順序確定的,而是css權(quán)重確定)更詳細(xì)介紹。如何計(jì)算權(quán)重?可以這樣計(jì)算,將其分為#style -> 千位 #id -> 百 .class -> 十 div -> 個(gè)位,標(biāo)記為四位數(shù),看見(jiàn)一個(gè)類型就在對(duì)應(yīng)的位置+1若超過(guò)10不進(jìn)位。

  • !important:只要設(shè)置,則顯示其樣式,權(quán)重最高,可以直接忽略其他權(quán)重。
  • style:看見(jiàn)此行內(nèi)樣式,則在千位+1操作。
  • #id:樣式中看見(jiàn)此選擇器,則在百位+1操作。
  • .calss | :hover | ...:樣式中看見(jiàn)類選擇器 偽類選擇器,則在十位+1操作。
  • span | ::after | ...:樣式中看見(jiàn)標(biāo)簽選擇器 偽元素選擇器,則在個(gè)位+1操作。
    舉個(gè)例子:
<style>
#one {  /*div#one樣式的權(quán)重為0100*/
  color: yellow;
}
#two { /*span#two樣式的權(quán)重為0100*/
  color: blue;
}
#one #two {  /*span#two樣式的權(quán)重為0200,所有顯示紅色*/
  color: red;
}
</style>
<div id="one">
  <span id="two">我是紅色</span>
</div>

<!-- 另一個(gè)例子 -->
<style>
div.one { /*div.one樣式的權(quán)重為0011*/
  color: yellow;
}
.one { /*div.one樣式的權(quán)重為0010*/
  color: red;
}
</style>
<div class="one">我是黃顏色</div>

BFC布局

首先,什么事BFC布局?
BFC布局是一種塊級(jí)格式化布局方式,通過(guò)設(shè)定特定的屬性值,可以讓一個(gè)盒子或模塊變成一個(gè)特殊的區(qū)域。在這個(gè)區(qū)域內(nèi)的樣式不會(huì)影響到外部,外部也不會(huì)影響到內(nèi)部。而且在其內(nèi)部區(qū)域中,浮動(dòng)的元素是會(huì)計(jì)算高度的,所以可以用來(lái)解決浮動(dòng)元素的父元素高度撐不開(kāi)的問(wèn)題,當(dāng)然還可以解決其他問(wèn)題,比如:
1、解決margin重疊問(wèn)題
2、如果出現(xiàn)浮動(dòng)元素遮蓋兄弟元素的情況,可以將兄弟元素設(shè)置為BFC模式規(guī)避遮擋(因?yàn)锽FC的區(qū)域不會(huì)與float的元素區(qū)域重疊)
3、解決浮動(dòng)元素,父級(jí)撐不開(kāi)的問(wèn)題
4、了解更多傳送門

Flex布局

Flex為流式布局,是一種新的布局方式。其分為主軸和交叉軸。其中容器的屬性有:flex-direction flex-wrap flex-flow justify-content aligin-items align-content。元素的屬性有:order flex-grow flex-shrink flex-basis flex align-self。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 概述: CSS 規(guī)則由兩個(gè)主要的部分構(gòu)成:選擇器,以及一條或多條聲明: 一、注釋: CSS注釋以 "/*" 開(kāi)始,...
    進(jìn)入web前端閱讀 2,158評(píng)論 0 8
  • 前端開(kāi)發(fā)面試題 面試題目: 根據(jù)你的等級(jí)和職位的變化,入門級(jí)到專家級(jí),廣度和深度都會(huì)有所增加。 題目類型: 理論知...
    怡寶丶閱讀 2,669評(píng)論 0 7
  • 所有題目答案整理自網(wǎng)絡(luò),如有錯(cuò)誤,接受指正,拒絕批評(píng)! 關(guān)于html5 HTML5的十大新特性 語(yǔ)義化標(biāo)簽使得頁(yè)面...
    黃金原野閱讀 1,560評(píng)論 0 0
  • 前端開(kāi)發(fā)知識(shí)點(diǎn) HTML&CSS對(duì)Web標(biāo)準(zhǔn)的理解、瀏覽器內(nèi)核差異、兼容性、hack、CSS基本功:布局、盒子模型...
    Hebborn_hb閱讀 888評(píng)論 0 1
  • 解析URL 輸入U(xiǎn)RL后,會(huì)進(jìn)行解析(URL的本質(zhì)就是統(tǒng)一資源定位符) URL一般包括幾大部分: protocol...
    小超人的前端之路閱讀 838評(píng)論 0 1

友情鏈接更多精彩內(nèi)容