web前端渡一大師課 CSS屬性計算過程

你是否了解CSS 的屬性計算過程呢??

<body>
? <h1>這是一個h1標題</h1>

</body>

?

目前我們沒有設置改h1的任何樣式,但是卻能看到改h1有一定的默認樣式,例如有默認的字體大小,默認的顏色?

那么問題來了,我們這個h1元素上面除了有默認字體大小,默認顏色等屬性以外,酒精還有哪些屬性呢?

答案: 是該元素上面會有CSS所有的屬性,你可以打開瀏覽器的開發者面板,選擇[元素],切換到[計算樣式],之后勾選[全部顯示],此時你就能看到在次h1上面所有css屬性對應的值

換句話說,我們所書寫的任何一個HTML元素,實際上都有完整的一整套CSS樣式,這一點往往是讓初學者比較意外的,因為我們平時在書寫CSS樣式時,往往只會書寫必要的部分,例如前面的:?

p{

? ? color : red

}

這往往會給我們造成一種錯覺,認為該p元素上面就只有color屬性,而真是的情況確實是,任何一個HTML,都有一套完整的CSS樣式,只不過你沒有書寫的樣式,大概率可能會使用其默認值,例如上圖中h1一個樣式都沒有設置,全部都用的默認值.?

但是注意,我這里強調的是"大概率可能",難道還有我們"沒有設置值,但是不使用默認值"的情況么?

嗯,確實有的,所以我才強調你要了解"CSS屬性的計算過程"

總的來講,屬性值的計算過程,分為如下這么4個步驟:?

  • 確定聲明值
  • 層疊沖突
  • 使用繼承
  • 使用默認值

1. 確定聲明值

首先第一步,是確定聲明值,所謂聲明值就是作者自己所書寫的CSS樣式,例如前面的:

p{

? color: red;

}?

這里我們聲明了p元素為紅色,那么就會應用此屬性設置

當然,除了作者樣式表,一般瀏覽器還會存在"用戶代理樣式表",簡單來說就是瀏覽器內置了一套樣式表.?

?

在上面的示例中,作者樣式表中設置了color屬性,而用戶代理樣式表(瀏覽器提供的樣式表)中設置了諸如display,margin-block-start,margin-block-end,margin-inline-start,margin-inline-end 等屬性對應的值.?

這些值目前來講也沒有什么沖突,因此最終就會應用這些屬性值

2.層疊沖突

在確定聲明值時,可能出現一種情況,那就是聲明的樣式規則發生了沖突.?

此時會進入解決層疊沖突的流程,而這一步又可以細分為下面這三個步驟:?

  • 比較源的重要性
  • 比較優先級
  • 比較次序

1.比較源的重要性

當不同的CSS樣式來源有用相同的聲明時,此時就會根據樣式表來源的重要性來確定應用哪一條樣式規則.?

那么問題來了,咱們的樣式表的源究竟有幾種呢?

整體來講有三種來源:?

  • 瀏覽器會有一個基本的樣式表來給任何網頁設置默認樣式,這些樣式統稱為用戶代理樣式.
  • 網頁的作者可以定義文檔的樣式,這是最常見的樣式表,稱之為頁面作者樣式.?
  • 瀏覽器的用戶,可以使用自定義樣式表定制使用體驗,稱之為用戶樣式

對應的重要性順序依次為: 頁面作者樣式>用戶樣式> 用戶代理樣式

我們來看一個示例?

例如現在有頁面作者樣式表和用戶代理樣式表中存在屬性的沖突,那么會以作者樣式表優先?

p{
? color : red;
? display: inline-block;
}

?

可以明顯的看到,作者樣式表和用戶代理樣式表中同時存在的idsplay屬性的設置,最終作者樣式表干掉了用戶代理樣式表中沖突的屬性,這就是第一步,根據不同源的重要性來決定應用哪一個源的樣式.?

3. 比較優先級??

那么接下來,如果是在在同一個源中又樣式聲明沖突怎么辦呢? 此時就會進行樣式聲明的優先級比較.?

例如:?

<div class='test'>

? ?<h1>test</h1>

<div>

.test h1{

? font-size: 50px

}
?

h1 {

?font-size: 20px;

}

在上面的代碼中,同屬于頁面作者樣式,源的重要性是相同的,此時會以選擇器的權重來比較重要性.?

很明顯,上面的選擇器的權重要大于下面的選擇器,因此最終標題呈現50px.?

?

可以看到,落敗的作者樣式在Element Style中會被劃掉

有關選擇器的權重計算方式,不清楚的同學,可以進入此傳送門:??Specificity - CSS | MDN

4.比較次序?

經歷了上面兩個步驟,大多數的樣式聲明能夠被確定下來,但是還剩下最后一種情況,那就是樣式聲明即是同源,權重也相同.?

此時就會進入第三個步驟,比較樣式聲明的次序?

舉個例子:?

h1{

? font-size: 50px;?

}

h1 {

? font-size: 20px;?

}

在上面的代碼中,同樣都是頁面作者樣式,選擇器的權重也想通,此時位于下面的樣式聲明會層疊掉上面的那一條樣式聲明,最終會應用20px這一條屬性值

?

至此,樣式聲明中存在沖突的所有情況,就全部被解決了.?

?5.使用繼承

層疊沖突這一步完成后,解決了相同元素被聲明了多條樣式規則,究竟應用哪一條樣式規則的問題.那么如果沒有聲明的屬性呢?此時就是用默認值嗎?

不是的.此時還有第三個步驟,那就是使用繼承而來的值

例如:?

<div>
? <p>Lorem ipsum dolor sit amet.</p>
</div>

?div {
? color: red;
}

在上面的代碼中,我們針對div 設置color屬性值為紅色,而針對p元素我們沒有聲明任何的屬性,但是由于color是可以繼承的,因此p元素會從父元素的同屬性的計算值繼承到color屬性的值?

?

來看下面的一個例子:?

<div class="test">
? <div>
? ? <p>Lorem ipsum dolor sit amet.</p>
? </div>
</div>

?div {
? color: red;
}
.test{
? color: blue;
}

?

?因為這里并不涉及到選中p元素聲明color值,而是從父元素上面繼承到color對應的值,因此這里是誰近就聽誰的,初學者往往會產生混淆,又去比較權重,但是這里根本不會涉及到權重比較,因為壓根兒就沒有選中到p元素.?

另外哪些屬性能夠繼承?

關于這一點的話,大家可以在MDN上很輕松的查閱到,例如我們以text-align 為例,如下圖所示:?

6.使用默認值

目前走到這一步,如果屬性值都還不能確定下來,那么久只能是使用默認值了.?

如下圖所示:

前面我們也說過,一個HTML元素要在瀏覽器中渲染出來,必須具備所有的CSS屬性值,但是絕大部分我們是不會去設置的,用戶代理樣式表里面也不會去設置,也無法從繼承拿到,因此最終都是用默認值?

好了,這就是關于CSS屬性計算過程的所有知識了.?

7.面試題

下面的代碼,最終渲染出來的效果,a元素是什么顏色?p元素又是什么顏色

<div>
? <a href="">test</a>
? <p>test</p>
</div>

?

為什么會呈現這樣的效果?

實際上原因很簡單,因為a元素在用戶代理樣式表中已經設置了color屬性對應的值也就是默認樣式,因此會應用此聲明值,而在p元素中無論是作者樣式表還是用戶代理樣式表,都沒有對此屬性進行聲明,然而由于color屬性是可以繼承的,因此最終p元素的color屬性值通過持恒來自于父元素.?

?

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/89491.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/89491.shtml
英文地址,請注明出處:http://en.pswp.cn/web/89491.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Redis高頻面試題:利用I/O多路復用實現高并發

Redis 通過 I/O 多路復用&#xff08;I/O Multiplexing&#xff09;技術實現高并發&#xff0c;這是其單線程模型能夠高效處理大量客戶端連接的關鍵。以下是通俗易懂的解釋&#xff0c;結合 Redis 的工作原理&#xff0c;詳細說明其實現過程。 1. 什么是 I/O 多路復用&#xff…

爬蟲小知識(二)網頁進行交互

一、提交信息到網頁 1、模塊核心邏輯 “提交信息到網頁” 是網絡交互關鍵環節&#xff0c;借助 requests 庫的 post() 函數&#xff0c;能模擬瀏覽器向網頁發數據&#xff08;如表單、文件 &#xff09;&#xff0c;實現信息上傳&#xff0c;讓我們能與網頁背后的服務器 “溝通…

WPF學習(五)

文章目錄一、FileStream和StreamWriter理解1.1、具體關系解析1.2、類比理解1.3、總結1.4、示例代碼1.5、 WriteLine()和 Write&#xff08;&#xff09;的區別1.6、 StreamWriter.Close的作用二、一、FileStream和StreamWriter理解 在 C# 中&#xff0c;StreamWriter 和 FileS…

ctf.show-web習題-web2-最簡單的sql注入-flag獲取詳解、總結

解題思路打開靶場既然提示是最簡單的sql注入了&#xff0c;那么直接嘗試永真登錄1 or 11#這里閉合就是簡單的單引號可以看到沒登錄成功&#xff0c;但是有回顯&#xff1a;歡迎你&#xff0c;ctfshowsql注入最喜歡的就是回顯了&#xff01;這題的思路就是靠這個回顯&#xff0c…

upload-labs 靶場通關(1-20)

目錄 Pass-01(JS 繞過) Pass-02(文件類型驗證) Pass-03(黑名單驗證) Pass-04(黑名單驗證.htaccess) Pass-05(大小寫繞過) Pass-06(末尾空格) Pass-07(增加一個.) Pass-08(增加一個::$DATA) Pass-09&#xff08;代碼不嚴謹&#xff09; Pass-10&#xff08;PPHPHP&am…

[附源碼+數據庫+畢業論文]基于Spring+MyBatis+MySQL+Maven+vue實現的酒店預訂管理系統,推薦!

摘 要 使用舊方法對酒店預訂信息進行系統化管理已經不再讓人們信賴了&#xff0c;把現在的網絡信息技術運用在酒店預訂信息的管理上面可以解決許多信息管理上面的難題&#xff0c;比如處理數據時間很長&#xff0c;數據存在錯誤不能及時糾正等問題。 這次開發的酒店預訂管理系…

LSTM入門案例(時間序列預測)| pytorch實現(可復現)

需求 假如我有一個時間序列&#xff0c;例如是前113天的價格數據&#xff08;訓練集&#xff09;&#xff0c;然后我希望借此預測后30天的數據&#xff08;測試集&#xff09;&#xff0c;實際上這143天的價格數據都已經有了。這里為了簡單&#xff0c;每一天的數據只有一個價…

Axure RP 10 預覽顯示“無標題文檔”的空白問題探索【護航版】

1. 安裝情況 官網 Axure RP 10&#xff1a;Download Axure RP 10 - Axure &#xff08;PS&#xff1a;11都出了&#xff09; 版本&#xff1a;10.0.0.3924 激活碼&#xff1a;49bb9513c40444b9bcc3ce49a7a022f9 &#xff08;10/11都可以用&#xff0c;但只嘗試了10&#xff…

基于SpringBoot+Vue的汽車租賃系統(協同過濾算法、騰訊地圖API、支付寶沙盒支付、WebsSocket實時聊天、ECharts圖形化分析)

系統亮點&#xff1a;協同過濾算法、騰訊地圖API、支付寶沙盒支付、WebsSocket實時聊天、ECharts圖形化分析&#xff1b;01系統開發工具與環境搭建—前后端分離架構項目架構&#xff1a;B/S架構運行環境&#xff1a;win10/win11、jdk17前端&#xff1a;技術&#xff1a;框架Vue…

數據結構入門:像整理收納一樣簡單!

在我們生活中&#xff0c;經常會面對這樣的問題&#xff1a; “我要怎么整理我的衣柜&#xff1f;” “電腦里照片太多了&#xff0c;怎么歸類才方便查找&#xff1f;” 其實&#xff0c;程序員也有類似的煩惱。他們不整理衣柜&#xff0c;而是“整理數據”。而這門關于如何“收…

力扣每日一題--2025.7.15

&#x1f4da; 力扣每日一題–2025.7.15 3135. 有效單詞 &#xff08;簡單&#xff09; 大家好&#xff01;今天我們要來聊聊一道有趣的編程題——有效單詞 &#x1f4dd; 題目描述 題目分析 &#x1f4da; 題目要求我們判斷一個字符串是否為有效單詞。有效單詞需要滿足以下…

Mysql數據庫——增刪改查CRUD

文章目錄一、數據庫的基礎命令二、創建表三、增(create)四、查詢&#xff08;retrieve)五、條件查詢&#xff08;where&#xff09;六、修改&#xff08;update&#xff09;七、刪除&#xff08;delete&#xff09;一、數據庫的基礎命令 1.使用客戶端連接服務器 mysql -u root…

關于pytorch虛擬環境及具體bug問題修改

本篇博客包含對于虛擬環境概念的講解和代碼實現過程中相關bug的解決關于虛擬環境我的pytorch虛擬環境在D盤&#xff0c;相應python解釋器也在D盤&#xff08;一起&#xff09;&#xff0c;但是我的pycharm中的項目在C盤&#xff0c;使用的是pytorch的虛擬環境&#xff0c;這是為…

U盤量產工具與性能優化完全指南

本文還有配套的精品資源&#xff0c;點擊獲取 簡介&#xff1a;U盤量產工具是IT行業中的專業軟件&#xff0c;用于批量生產或修復U盤。安國和銀燦是兩個提供U盤量產工具的主控芯片制造商&#xff0c;提供初始化、格式化、分區管理、性能優化、故障修復、個性化定制、固件升級…

Golang http開發實戰:構建RESTful API保姆級教程

目錄 章節1:RESTful API的精髓與Go的Web開發哲學 RESTful API的設計原則 Go的http包核心組件 實戰:第一個RESTful API端點 章節2:設計優雅的RESTful路由 路由設計的注意事項 使用Gorilla Mux實現動態路由 章節3:請求與響應的藝術:解析與格式化 解析請求數據 統一…

UGUI 性能優化系列:第一篇——基礎優化與資源管理

UGUI 性能優化系列&#xff1a;第一篇——基礎優化與資源管理 UGUI 性能優化系列&#xff1a;第二篇——Canvas 與 UI 元素管理 在 Unity 游戲中&#xff0c;用戶界面&#xff08;UI&#xff09;是玩家與游戲交互的核心。然而&#xff0c;不當的 UGUI 使用常常成為游戲性能的…

多端協同的招聘系統源碼開發指南:小程序+APP一體化設計

當下&#xff0c;很多企業選擇搭建屬于自己的多端協同招聘平臺&#xff0c;尤其是中大型人力資源公司、連鎖品牌企業&#xff0c;以及同城服務平臺&#xff0c;更是將“小程序APP”一體化招聘系統視為提升效率、降低用工成本的利器。 今天&#xff0c;筆者將從源碼開發的角度&a…

Maven 配置文件核心配置:本地倉庫、鏡像與 JDK 版本

Maven 配置文件核心配置&#xff1a;本地倉庫、鏡像與 JDK 版本 在 Maven 項目開發中&#xff0c;合理配置 settings.xml 文件能顯著提升依賴管理效率。本文將聚焦本地倉庫、鏡像加速和 JDK 版本這三個核心配置&#xff0c;結合 IDEA 環境詳細講解配置方法與作用。 一、Maven 配…

【時時三省】(C語言基礎)通過指針引用字符串

山不在高&#xff0c;有仙則名。水不在深&#xff0c;有龍則靈。 ----CSDN 時時三省如在printf函數中輸出一個字符串。這些字符串都是以直接形式&#xff08;字面形式&#xff09;給出的&#xff0c;在一對雙撇號中包含若干個合法的字符。使用字符串的更加靈活方便的方法——通…

【Linux驅動-快速回顧】一文快速理解GIC內部寄存器對中斷的控制

第一部分&#xff1a;GIC的功能和組成 1. GIC要解決的根本問題 在一個復雜的片上系統&#xff08;SoC&#xff09;中&#xff0c;有非常多的硬件模塊&#xff08;如定時器、串口、按鍵、DMA等&#xff09;&#xff0c;它們都需要在完成任務或遇到特定事件時通知CPU。同時&#…