【CSS】層疊,優先級與繼承(三):超詳細繼承知識點

目錄

  • 繼承
    • 一、什么是繼承?
      • 2.1 祖先元素
      • 2.2 默認繼承/默認不繼承
    • 二、可繼承屬性
      • 2.1 字體相關屬性
      • 2.2 文本相關屬性
      • 2.3 列表相關屬性
    • 三、不可繼承屬性
      • 3.1 盒模型相關屬性
      • 3.2 背景相關屬性
    • 四、屬性初始值
      • 4.1 根元素
      • 4.2 屬性的初始值
      • 4.3 得出結論
    • 五、強制繼承
      • 5.1 initial關鍵字
      • 5.2 inherit關鍵字
      • 5.3 unset關鍵字
    • 六、繼承的優先級
    • 七、繼承的性能
      • 7.1 減少渲染計算
      • 7.2 精簡代碼

繼承

一、什么是繼承?

在 CSS 里,繼承是一種機制,借助它元素能夠從其祖先元素那里獲取屬性值這一特性可以讓代碼更簡潔,減少重復的樣式聲明

2.1 祖先元素

<div class="outer"><div class="inner"></div>
</div>
  • outer是innner的祖先元素

2.2 默認繼承/默認不繼承

在CSS中,每個 CSS 屬性定義的概述 都指出了這個屬性是默認繼承還是默認不繼承的 ("Inherited":Yes/No"

  • 對于可繼承屬性,沒有指定值時的子元素會取父元素的同屬性計算值
  • 對于不可繼承屬性,子元素不會自動獲取父元素設置的這些同屬性計算值
/* 對于上面的HTML代碼 */
.outer{color:red;width:100px;
}
.inner{/* 當子元素沒有顯示聲明color與width的值,它們默認取什么呢? */
}

二、可繼承屬性

某些 CSS 屬性具備繼承性,也就是說子元素會自動繼承父元素設置的這些屬性值。常見的可繼承屬性如下:

2.1 字體相關屬性

  • font-family ( 字體族 )
  • font-size ( 字體大小 )
  • font-weight ( 字體粗細 )
  • font-style ( 字體族 )

2.2 文本相關屬性

  • color ( 文本顏色 )
  • text-align ( 文本對齊方式 )
  • line-height ( 行高 )

2.3 列表相關屬性

  • line-style-type ( 列表項標記類型 )
  • line-style-position ( 列表項標記位置 )

三、不可繼承屬性

還有部分 CSS 屬性是不可繼承的,子元素不會自動獲取父元素設置的這些屬性值。常見的不可繼承屬性有:

3.1 盒模型相關屬性

  • width ( 寬度 )
  • height ( 高度 )
  • margin ( 外邊距 )
  • padding ( 內邊距 )
  • border ( 邊框 )

3.2 背景相關屬性

  • background-color ( 背景顏色 )
  • background-image ( 背景圖像 )

四、屬性初始值

上面我們提到了默認繼承和默認不繼承屬性的特點與具體類型
那么現在出現一個問題:
父元素的屬性來自哪里?對于不可繼承屬性,這些屬性默認取值又是什么?

4.1 根元素

  • 首先我們需要知道一個概念“根元素”,它是整個文檔樹的起始點,也是所有其他元素的父元素或者祖先元素
  • 在 HTML 文檔中,<html> 元素是根元素
  • 對于大部分屬性,只有文檔的根元素會使用屬性的初始值,而其他元素會依據繼承規則或者層疊規則來確定屬性值

4.2 屬性的初始值

  • 屬性的初始值是由 CSS 規范定義的,這些初始值的定義是為了保證在不同瀏覽器和設備上有一個統一的基礎樣式表現。
  • 比如color 屬性的初始值是 blackfont-size 的初始值是 medium

4.3 得出結論

  1. 對于具有繼承性的屬性

    • 若子元素沒有為這些屬性顯式聲明值,它們會從父元素那里繼承屬性值。
    • 因為根元素是所有其他元素的祖先,所以在中間元素沒有重新賦值的情況下,子元素最終會繼承根元素上設置的屬性值
      ?
  2. 對于默認不繼承的屬性

    • 當元素沒有被顯式地設置該屬性值時,元素使用的就是該屬性的初始值。

五、強制繼承

在某些情景,可能我們想要指定的元素屬性強制繼承自父元素或重置為初始值
這時就可能使用到三個關鍵字:initial關鍵字,inherit關鍵字,unset關鍵字

5.1 initial關鍵字

initial 關鍵字的作用是把屬性值設置為該屬性在 CSS規范 里定義的初始值

  • 對于可繼承屬性,使用 initial 會讓元素放棄繼承父元素的屬性值,轉而使用屬性的初始值
  • 對于不可繼承屬性initial 同樣會將屬性值設定為初始值。

5.2 inherit關鍵字

inherit 關鍵字的主要作用是讓元素強制繼承其父元素的某個屬性值,不管該屬性在默認情況下是否具備繼承性

  • 對于可繼承屬性inherit 關鍵字會強化這種繼承行為。即便可能存在其他因素干擾繼承,也能確保元素繼承父元素的屬性值。
  • 對于不可繼承屬性inherit 關鍵字可以打破常規,讓元素繼承父元素的該屬性值

5.3 unset關鍵字

unset 關鍵字的行為取決于屬性是否具有繼承性

  • 對于可繼承屬性,它會使用繼承值
  • 對于不可繼承屬性,它的效果等同于 initial,也就是使用屬性的初始值

六、繼承的優先級

繼承的屬性值優先級是最低的。若你給元素直接設置了某個屬性值,這個值會覆蓋繼承來的值。

七、繼承的性能

7.1 減少渲染計算

  • 對于具有繼承性的屬性,只需要計算一次父元素的屬性值,從而節省了渲染時間和計算資源,提高了頁面的渲染性能

7.2 精簡代碼

  • 通過繼承,我們可以在父元素上統一設置一些共有的樣式屬性,這樣不僅使 CSS 代碼更簡潔易讀,也減少了代碼量,從而加快了瀏覽器下載和解析 CSS 文件的速度,間接提高了頁面的加載性能

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

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

相關文章

Android LiveData關鍵代碼

1、observer方法 public void observe(NonNull LifecycleOwner owner, NonNull Observer<? super T> observer) {assertMainThread("observe");if (owner.getLifecycle().getCurrentState() DESTROYED) {// ignorereturn;}LifecycleBoundObserver wrapper …

Docker-高級使用

前言 書接上文Docker-初級安裝及使用_用docker安裝doccano-CSDN博客&#xff0c;我們講解了Docker的基本操作&#xff0c;下面我們講解的是高級使用&#xff0c;請大家做好準備&#xff01; 大家如果是從初級安裝使用過來的話&#xff0c;建議把之前鏡像和搭載的容器數據卷里面…

Spring Boot常用注解詳解:實例與核心概念

Spring Boot常用注解詳解&#xff1a;實例與核心概念 前言 Spring Boot作為Java領域最受歡迎的快速開發框架&#xff0c;其核心特性之一是通過注解&#xff08;Annotation&#xff09;簡化配置&#xff0c;提高開發效率。注解驅動開發模式讓開發者告別繁瑣的XML配置&#xff…

TRO再添新案 TME再拿下一熱門IP,涉及Paddington多個商標

4月2日和4月8日&#xff0c;TME律所代理Paddington & Company Ltd.對熱門IP Paddington Bear帕丁頓熊的多類商標發起維權&#xff0c;覆蓋文具、家居用品、毛絨玩具、紡織用品、游戲、電影、咖啡、填充玩具等領域。跨境賣家需立即排查店鋪內的相關產品&#xff01; 案件基…

經驗分享-上傳ios的ipa文件

.ipa格式的二進制文件&#xff0c;是打包后生成的文件&#xff0c;無論我們是放上去testflight測試還是正式上傳到app store&#xff0c;都需要先上傳到蘋果開發者中心的app store connect上的構建版本上。 在app store connect上&#xff0c;上傳構建版本的功能&#xff0c;它…

docker(3) -- 圖形界面

1. 前言 在wsl(8) – 圖形界面文章中介紹了wsl2默認是支持圖形界面的&#xff0c;現在我們嘗試下在docker中運行gui程序試試看。 2. x11-apps 啟動一個docker&#xff0c;安裝一些gui小程序&#xff0c;然后運行&#xff0c;發現會失敗。ubuntu_base詳見文章wsl(6) – 安裝d…

Docker容器跑定時任務腳本

最近搞了一個Docker容器跑腳本&#xff0c;想設置一個定時任務&#xff0c;每天8點運行一次&#xff0c;結果死活不成功。排查了一天&#xff0c;有一點當局者迷了&#xff0c;明明時間是對的&#xff0c;明明時區是對的&#xff0c;定時任務也是啟動的&#xff0c;它就是不執行…

【Linux】什么是完全限定域名

FQDN 是 “完全限定域名” (Fully Qualified Domain Name) 的縮寫。 FQDN 是一個互聯網上特定計算機或主機的完整且唯一的域名。它詳細說明了該主機在域名系統 (DNS) 層級結構中的確切位置。 一個 FQDN 通常由以下幾個部分組成&#xff0c;從左到右依次是&#xff1a; 主機名…

小結:BFD

*BFD&#xff08;雙向轉發檢測&#xff0c;Bidirectional Forwarding Detection&#xff09;是一種快速、輕量級的故障檢測機制&#xff0c;用于檢測網絡中兩點之間的連通性。它廣泛應用于各種場景 1. 檢測 IP 鏈路 應用場景&#xff1a; BFD 用于檢測兩臺設備之間的 IP 層連…

配置Spark歷史服務器,輕松查看任務記錄

在大數據處理中&#xff0c;Spark是一個強大的分布式計算框架。但當Spark服務重啟后&#xff0c;之前的運行記錄就會消失&#xff0c;給我們排查問題和分析任務執行情況帶來不便。這時&#xff0c;配置Spark歷史服務器就顯得尤為重要&#xff0c;它能幫助我們保存和查看歷史任務…

(六)RestAPI 毛子(外部導入打卡/游標分頁/Refit/Http resilience/批量提交/Quartz后臺任務/Hateoas Driven)

文章目錄 項目地址一、外部導入打卡功能1.1 創建實體1. Entry實體2. EntryImport實體3. 添加數據庫配置4. 創建表 1.2 創建DTOs1.3 創建GetEnties Controller 二、游標分頁2.1 創建所需要的DTOs1. 創建游標分頁的請求參數2. 創建CollectionResponse3. 添加游標編碼和解碼的DTO …

Node.js CSRF 保護指南:示例及啟用方法

解釋 CSRF 跨站請求偽造 (CSRF/XSRF) 是一種利用用戶權限劫持會話的攻擊。這種攻擊策略允許攻擊者通過誘騙用戶以攻擊者的名義提交惡意請求,從而繞過我們的安全措施。 CSRF 攻擊之所以可能發生,是因為兩個原因。首先,CSRF 攻擊利用了用戶無法辨別看似合法的 HTML 元素是否…

Flink介紹——實時計算核心論文之Dataflow論文總結

數據流處理的演變與 Dataflow 模型的革新 在大數據處理領域&#xff0c;流式數據處理系統的發展歷程充滿了創新與變革。從早期的 S4 到 Storm&#xff0c;再到 MillWheel&#xff0c;每一個系統都以其獨特的方式推動了技術的進步。S4 以其無中心架構和 PE&#xff08;Processi…

Arduino 入門學習筆記(五):KEY實驗

Arduino 入門學習筆記&#xff08;五&#xff09;&#xff1a;KEY實驗 開發板&#xff1a;正點原子ESP32S3 例程源碼在文章頂部可免費下載&#xff08;審核中…&#xff09; 1. GPIO 輸入功能使用 1.1 GPIO 輸入模式介紹 在上一文章中提及到 pinMode 函數&#xff0c; 要對…

Centos9安裝docker

1. 卸載docker 查看是否安裝了docker yum list | grep docker卸載老版本docker&#xff0c;拷貝自官網 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine卸載新版本…

Pgvector+R2R搭建RAG知識庫

背景 R2R是一個采用Python編寫的開源AI RAG框架項目&#xff0c;與PostgreSQL技術棧集成度高&#xff0c;運行需求資源少&#xff08;主要是本人的Macbook air m1內存只有8G&#xff09;的特點&#xff0c;對部署本地私有化化AI RAG應用友好。 Resource Recommendations Whe…

go中redis使用的簡單介紹

目錄 一、Redis 簡介 二、Go中Redis的使用 1. 安裝Go Redis包 2. 單機模式 連接示例 3. 哨兵模式 依賴 連接示例 三、Redis集群 1. 集群模式 集群部署 部署結構 使用redis-cli創建集群 連接示例 四、常用數據結構與操作 1. 字符串&#xff08;String&#xff0…

北京工業大學25計專上岸經驗分享

1.個人情況介紹 本科就讀于河北雙非&#xff0c;專業為計算機科學與技術&#xff0c;四級三次498&#xff0c;六級兩次460&#xff0c;拿過幾次校級獎學金&#xff0c;競賽經歷有藍橋杯國三、數學競賽省二。本科成績排名靠前&#xff0c;保研保7排8&#xff0c;遺憾選擇考研繼…

在 Ubuntu 24.04 系統上安裝和管理 Nginx

1、安裝Nginx 在Ubuntu 24.04系統上安裝Nginx&#xff0c;可以按照下面的步驟進行&#xff1a; 1.1、 更新系統軟件包列表 在安裝新軟件之前&#xff0c;需要先更新系統的軟件包列表&#xff0c;確保獲取到最新的軟件包信息。打開終端&#xff0c;執行以下命令&#xff1a; …

HarmonyOS4+NEXT星河版入門與項目實戰(26)-----版本控制與代碼托管

引言 隨著移動應用開發技術的不斷進步,華為推出的鴻蒙操作系統(HarmonyOS)以及其配套的集成開發環境DevEco Studio逐漸成為開發者關注的焦點。對于新手開發者來說,掌握版本控制和代碼托管不僅是提高工作效率的關鍵,也是團隊協作的重要基礎。本文將介紹如何在使用DevEco S…