成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專(zhuān)欄INFORMATION COLUMN

你不知道的層疊樣式表

Bryan / 979人閱讀

摘要:層疊樣式表層疊規(guī)則你或許知道是層疊樣式表的縮寫(xiě)。但你不一定真正的理解了其中層疊的含義。用戶自定義樣式雖然規(guī)范中有,但從起,開(kāi)始不支持用戶自定義樣式表,而是建議使用擴(kuò)展來(lái)實(shí)現(xiàn)。網(wǎng)站提供的樣式表,則是我們所提供的的樣式。即不為的元素的計(jì)算值為。

層疊樣式表 層疊規(guī)則

你或許知道 CSS 是 Cascading Style Sheets(層疊樣式表)的縮寫(xiě)。但你不一定真正的理解了其中層疊的含義。

你可能會(huì)以為層疊指的是選擇器的優(yōu)先級(jí),但這是不準(zhǔn)確的。

對(duì)于瀏覽器頁(yè)面上某個(gè)元素的某個(gè)屬性值,它可能會(huì)有多個(gè)來(lái)源(Cascading Origins):

用戶代理 (user agent)提供的樣式

用戶自定義的樣式

網(wǎng)站提供的樣式

用戶代理即是指瀏覽器,https://cs.chromium.org/chromium/src/third_party/blink/renderer/core/css/html.css 這里是 chromium 的樣式表?,F(xiàn)在我們常常會(huì)使用 reset.css 或者 normalize.css 使的各個(gè)瀏覽器之間默認(rèn)樣式統(tǒng)一。

用戶自定義樣式雖然規(guī)范中有,但從 chrome 33 起,開(kāi)始不支持用戶自定義樣式表,而是建議使用擴(kuò)展來(lái)實(shí)現(xiàn)。

網(wǎng)站提供的樣式表,則是我們所提供的 css 的樣式。

來(lái)源之間是存在優(yōu)先級(jí)的(和選擇器的優(yōu)先級(jí)是兩回事),優(yōu)先級(jí)高的會(huì)覆蓋優(yōu)先級(jí)低。我們來(lái)驗(yàn)證一下:

https://codepen.io/gygy/pen/m...

可以看到 ruby > rt { font-size: 50% } 是來(lái)自 user agent stylesheet。而 rt { font-size: 24px } 來(lái)自網(wǎng)站作者,如果單論選擇器的權(quán)重,它是低于 ruby > rt 的。
但是它依然覆蓋了 user agent stylesheet 的 font-size 屬性。原因就是 css 會(huì)優(yōu)先根據(jù)屬性的來(lái)源判斷。對(duì)于相同來(lái)源的屬性,再應(yīng)用權(quán)重規(guī)則。

我們也可以通過(guò) !important 聲明某個(gè)屬性的重要性,再結(jié)合它的來(lái)源,于是有如下的優(yōu)先級(jí)規(guī)則(忽略用戶自定義的樣式):

用戶代理

來(lái)源用戶代理的 !important 屬性

網(wǎng)站作者

CSS 動(dòng)畫(huà)(Animation 和 Transition)

網(wǎng)站作者 !important

其中對(duì)于 CSS 動(dòng)畫(huà),在給定時(shí)間中 CSS 只會(huì)從某一個(gè) @keyframes 中獲取值,而不是某幾個(gè) @keyframe 的混合。@keyframes 里定義的值會(huì)覆蓋普通值,但是優(yōu)先級(jí)低于 !important。

權(quán)重規(guī)則

對(duì)于同一來(lái)源的 CSS。我們要確定某個(gè)元素的某個(gè)屬性的值,涉及到該元素的選擇器的權(quán)重問(wèn)題。選擇器大致分為幾類(lèi):

元素選擇器(Elemental selectors):標(biāo)簽名稱(chēng)。

屬性選擇器(Attribute selectors):id class 某個(gè)屬性。

偽類(lèi)(Pseudo-classes):匹配處于確定狀態(tài)的一個(gè)或多個(gè)元素,表現(xiàn)的像一個(gè) class。

偽元素(Pseudo-elements):匹配處于相關(guān)的確定位置的一個(gè)或多個(gè)元素,表現(xiàn)的像一個(gè) element。

組合選擇器(Combinators):div > span 之類(lèi)的復(fù)合選擇器。

多重選擇器(Multiple selectors)多個(gè)選擇器之間用逗號(hào)隔開(kāi)。

它們之間的權(quán)重規(guī)則計(jì)算:

A selector’s specificity is calculated for a given element as follows:

count the number of ID selectors in the selector (= A)

count the number of class selectors, attributes selectors, and pseudo-classes in the selector (= B)

count the number of type selectors and pseudo-elements in the selector (= C)

ignore the universal selector

If the selector is a selector list, this number is calculated for each selector in the list. For a given matching process against the list, the specificity in effect is that of the most specific selector in the list that matches.

簡(jiǎn)單的說(shuō)來(lái) id 優(yōu)先級(jí)最高,其次是類(lèi)和偽類(lèi)再次是元素和偽元素。然后根據(jù)它們各自的數(shù)量判斷。

其實(shí)說(shuō)到底不建議寫(xiě)過(guò)于復(fù)雜的選擇器,會(huì)影響性能和維護(hù)代碼。建議采用 BEM 規(guī)范,書(shū)寫(xiě) CSS 選擇器。

CSS 的值的計(jì)算過(guò)程

為了得到 CSS 的值的生成有很多個(gè)步驟:

收集應(yīng)用到這個(gè)元素上面的所有的聲明值(Declared values),可能有 0 個(gè)或者多個(gè),包括瀏覽器的樣式表和網(wǎng)站作者樣式表中定義的。

根據(jù)聲明值和上述的層疊規(guī)則得到這個(gè)屬性的層疊值(Cascaded Values),層疊值只能有一個(gè)或者為空。

如果層疊值存在,則指定值(Specified Values)等于層疊值。否則,則會(huì)應(yīng)用 CSS 中屬性繼承的規(guī)則,得到一個(gè)繼承值(Inherited value),層疊值等于這個(gè)繼承值。如果該屬性不適用于繼承,指定值會(huì)等于這個(gè)屬性的初始值(Initial value)。每個(gè)元素的每個(gè)屬性都有且只有一個(gè)指定值。

一些屬性值是屬于相對(duì)單位 如 1em 會(huì)被轉(zhuǎn)化為 px,在這個(gè)過(guò)程中相對(duì)值會(huì)被絕對(duì)化,得到計(jì)算值(Computed Values),這個(gè)值可以被用于繼承。

應(yīng)用值(Used Values)是瀏覽器根據(jù)計(jì)算器,然后完成剩余的計(jì)算,得到理論上布局的值。如 width: auto 在此過(guò)程中,會(huì)被計(jì)算得出精確的像素值。

實(shí)際值(Actual Values)是指瀏覽器根據(jù)現(xiàn)實(shí)情況布局所用到值。比如 px 如果是小數(shù),會(huì)被轉(zhuǎn)化為整數(shù)布局,因?yàn)槲锢砩?1px 不可分。

舉幾個(gè)例子說(shuō)明一下上述步驟:

對(duì)于 font-size,由于它是可繼承的值,所以即使你沒(méi)為某個(gè)元素設(shè)置 font-size 大小,它的層疊值為空,它也會(huì)在第三步的時(shí)候,將指定值賦值于獲取他的繼承值。(這個(gè)繼承者來(lái)源于父級(jí)元素的計(jì)算值)。

對(duì)于 float 不為 none 的元素,即使你手動(dòng)聲明了 display: inline,此時(shí) display 在第四步的時(shí)候,會(huì)被賦值為 block。即 float 不為 none 的元素的 display 計(jì)算值為 block。

參考鏈接

W3C 規(guī)范:選擇器

MDN: CSS 層疊

W3C 規(guī)范:層疊

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://systransis.cn/yun/114027.html

相關(guān)文章

  • 重拾css(4)——樣式來(lái)源與層疊規(guī)則

    摘要:摘自設(shè)計(jì)指南樣式來(lái)源上文中提到,之所以有層疊的概念,是因?yàn)橛卸鄠€(gè)樣式來(lái)源。優(yōu)先級(jí)相同條件下例如都來(lái)自引用樣式,覆蓋的默認(rèn)規(guī)則是后者覆蓋前者,但是有一個(gè)特殊情況,其實(shí)優(yōu)先級(jí)最高。 這一節(jié)就開(kāi)始實(shí)踐上一節(jié)的思路! 1.層疊的概念 簡(jiǎn)言之,層疊就是瀏覽器對(duì)多個(gè)樣式來(lái)源進(jìn)行疊加,最終確定結(jié)果的過(guò)程。舉一個(gè)簡(jiǎn)單的例子: showImg(https://segmentfault.com/img/b...

    gityuan 評(píng)論0 收藏0
  • CSS創(chuàng)始人之一Bert Bos:CSS只是進(jìn)化一部分

    摘要:在的發(fā)展過(guò)程中,是最早與之父合作的人之一。問(wèn)您認(rèn)為中國(guó)的開(kāi)發(fā)者雖然起步晚,但是現(xiàn)在已經(jīng)趕上了是的。但是我知道,它們只是進(jìn)化的一部分。第一個(gè)最主要的原因就是要保護(hù)。 非商業(yè)轉(zhuǎn)載請(qǐng)注明作譯者、出處,并保留本文的原始鏈接:http://www.ituring.com.cn/article/194473 Bert Bos是一位計(jì)算機(jī)科學(xué)家,他也是CSS的創(chuàng)始人之一。在CSS的發(fā)展過(guò)程...

    tinyq 評(píng)論0 收藏0
  • 知道層疊,別說(shuō)你懂CSS

    摘要:知道存在是很有用的,這樣當(dāng)你在別人的代碼中遇到它時(shí),你就知道它是什么了。如上面所示的示例所示,元素選擇器具有很低的特殊性。類(lèi)選擇器具有更高特殊性,所以將戰(zhàn)勝元素選擇器。個(gè)位在整個(gè)選擇器中每包含一個(gè)元素選擇器或偽元素就在該列中加分。 在實(shí)際的工作中,我們可能還有些疑惑,當(dāng)有多個(gè)選擇器作用在一個(gè)元素上時(shí),哪個(gè)規(guī)則最終會(huì)應(yīng)用到元素上?其實(shí)這是通過(guò)層疊機(jī)制來(lái)控制的,這也和樣式繼承(元素從其父元...

    izhuhaodev 評(píng)論0 收藏0
  • 【譯】CSS繼承、層疊和全局作用域

    摘要:相反的,提供了全局作用域和局部作用域。組成界面的分子的樣式可以通過(guò)元素選擇器定位。元素選擇器的優(yōu)先級(jí)很低,因此他們不會(huì)覆蓋任何基于類(lèi)選擇器的樣式。使用元素選擇器有以下優(yōu)點(diǎn)避免了的冗長(zhǎng)沒(méi)有冗余的類(lèi)。 最近學(xué)習(xí)到CSS的繼承屬性,正好看到這篇文章,便將它翻譯出來(lái)。作者的思想,在平時(shí)的項(xiàng)目中或多或少都有用過(guò),但是從來(lái)沒(méi)有仔細(xì)去思考如何利用這些特性讓代碼更加優(yōu)雅。 我熱愛(ài)模塊化設(shè)計(jì)。長(zhǎng)期以來(lái),...

    WilsonLiu95 評(píng)論0 收藏0
  • a標(biāo)簽樣式繼承問(wèn)題

    摘要:一標(biāo)簽繼承不了父元素的樣式我們知道,諸如等一些屬性是可以通過(guò)繼承父元素得到的。那么這樣就會(huì)涉及一個(gè)層疊優(yōu)先級(jí)的問(wèn)題。繼承的屬性?xún)?yōu)先級(jí)是最低的解決方法我們通過(guò)一句簡(jiǎn)單的樣式就能解決這個(gè)問(wèn)題 一 a標(biāo)簽繼承不了父元素的樣式? 我們知道,諸如font-size,color等一些屬性是可以通過(guò)繼承父元素得到的。那么,為什么當(dāng)我們想讓a標(biāo)簽去繼承父元素的顏色時(shí),結(jié)果卻常常不能如我們所愿呢?要想...

    keke 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<