CSS簡單的繼承

2021-02-20 html前端聚集地

在css中,每個CSS 屬性定義的概述都指出了這個屬性是默認繼承的("Inherited: Yes") 還是默認不繼承的("Inherited: No")。這決定了當你沒有為元素的屬性指定值時該如何計算值。—— MDN

也許你瞧不起以前的 css ,但是你不該再輕視眼下的 css 。近年來 css 的變量系統已逐步得到各大瀏覽器廠商支持,自定義選擇器等強勢襲來,嵌套系統/模塊系統也在路上...為了更好的掌握 css 這門語言,很有必要把之前零零散散的 css 知識回爐重造下。

css 作為一門語言而,也有其繼承原理,雖然簡單,你卻未必掌握。

屬性的是否默認繼承

初始值是指當屬性沒有指定值時的默認值,如這些語句的值都是默認值:background-color: transparent、left: auto 、float: none、width: auto 等。

css 的繼承很簡單,分為默認繼承的和默認不繼承的,但所有屬性都可以通過設置 inherit 實現繼承。

當沒有指定值時,默認繼承的屬性取父元素的同屬性的計算值(相當於設置了 inherit ),默認不繼承的屬性取屬性的初始值(時相當於設置了 initial )。

默認繼承的 ("Inherited: Yes") 的屬性:

所有元素默認繼承:visibility、cursor

文本元素默認繼承:letter-spacing、word-spacing、white-space、line-height、color、font、 font-family、font-size、font-style、font-variant、font-weight、text-indent、text-align、text-shadow、text-decoration、text-transform、direction

列表元素默認繼承:list-style、list-style-type、list-style-position、list-style-image

表格元素默認繼承:border-collapse

默認不繼承的("Inherited: No") 的屬性:

所有元素默認不繼承:all、display、overflow

行內元素默認不繼承:vertical-align

盒子屬性默認不繼承:width、height、padding、margin、border、min-width、min-height、max-width、max-height

背景屬性默認不繼承:background、background-color、background-image、background-repeat、background-position、background-attachment

定位屬性默認不繼承:float、clear、position、top、right、bottom、left、z-index

內容屬性默認不繼承:content、counter-reset、counter-increment

輪廓屬性默認不繼承:outline-style、outline-width、outline-color、outline

頁面屬性默認不繼承:size、page-break-before、page-break-after

聲音屬性默認不繼承:pause-before、pause-after、pause、cue-before、cue-after、cue、play-during

可以看到涉及到文本相關的屬性,都是默認繼承的,畢竟 css 設計之初就是為了更好的在網頁上呈現文字。

需要注意的是,部分屬性的默認值是會根據元素的 display 屬性的值而計算的,比如 vertical-align 屬性,如果是 display: inline 元素,則其計算值為基線對齊 vertical-align: baseline ,如果是 display: inline-block 元素,則其計算值為 vertical-align: bottom 。詳情請參考 這篇文章。

四個通用屬性值

css 為控制繼承提供了四個特殊的通用屬性值,每個 css 屬性都能使用這些值。

設置該屬性會使子元素屬性和父元素相同。實際上,就是「開啟繼承」。

將屬性的初始值應用於元素。實際上,就是「重置為默認值」。

將屬性重置為自然值,也就是如果屬性是自然繼承的那麼就是 inherit ,否則和 initial 一樣。

表示使用樣式表中定義的元素屬性的默認值。若用戶定義樣式表中顯式設置,則按此設置;否則,按照瀏覽器定義樣式表中的樣式設置;否則,等價於 unset 。(屬性值 revert 目前只有很少的瀏覽器支持)

css3 增加了 all 屬性,其值可以是上面四個之一,表示重置元素所有屬性的值重置為其初始值,或繼承值。

實例

這些通用屬性值可以有很多妙用,舉個慄子:

利用 inherit 實現如下圖片倒影:地址

div::after {    content: "";    position: absolute;    top: 100%;    left: 0;    right: 0;    bottom: -100%;    background-image: inherit; // 背景圖片繼承,這一般人想不到吧...    transform: rotateX(180deg);}


複製代碼

利用 initial 重置 left 為默認值 auto:地址

div {  position: absolute;  left: 20px;  top: 20px;}div + div {  left: initial;  right: 20px;}


複製代碼

例子中 div 設置過了 left ,div2 的 right 若要生效,須將 left 重置為初始值 initial (或者 unset )。

利用 unset 將屬性重置為未設置之前的值:地址

例子中 p 標籤的 color 是默認繼承屬性,所以此時 color: unset 相當於 color: inherit 。 p 標籤的 border 屬性是默認不繼承屬性,所以此時 border: unset 相當於 border: initial 。

.unset {  border: unset;  color: unset;}

複製代碼

總結css 的繼承真的很簡單,只需要記住那些默認繼承的,剩下的都是默認不繼承的。而默認繼承的元素除了文本相關的哪些,只有 visibility、cursor 比較常用了,也是比較容易記得的。

來源:https://juejin.im/post/5dcb89186fb9a04a752ba034

聲明:著作權歸原作者所有。本文為轉載文,文章及圖片均來自網際網路,如有侵權請聯繫小編刪除!!!

相關焦點

  • 【技能提升】CSS簡單的繼承
    —— MDN也許你瞧不起以前的css,但是你不該再輕視眼下的css。近年來css的變量系統已逐步得到各大瀏覽器廠商支持,自定義選擇器等強勢襲來,嵌套系統/模塊系統也在路上...為了更好的掌握css這門語言,很有必要把之前零零散散的css知識回爐重造下。css作為一門語言而,也有其繼承原理,雖然簡單,你卻未必掌握。
  • CSS樣式-樣式的繼承和層疊
    於是我們得到這樣的結論:有一些屬性,當給自己設置的時候,自己的後代都繼承上了,這個就是繼承性。繼承性是從自己開始,直到最小的元素。但是呢,如果再給上方的代碼加一條屬性:於是我們可以得出結論:以後當我們談到css有哪些特性的時候,我們要首先想到繼承性。而且,要知道哪些屬性具有繼承性、哪些屬性沒有繼承性。CSS的層疊性很多公司如果要筆試,那麼一定會考層疊性。層疊性:計算權重層疊性:就是css處理衝突的能力。 所有的權重計算,沒有任何兼容問題!
  • 【Hello CSS】第七章-CSS的繼承與可變性
    CSS中的 繼承 實際上是父級元素對子元素的影響。接下來我們談談 CSS中的繼承。特殊的通用屬性值CSS為處理繼承提供了四種特殊的通用屬性值,其值如下:值意義initial屬性初始值。inherit繼承的值。
  • CSS NEXT---CSS預處理器簡單寫法的替代者
    本文中即將要介紹的是 css next ,一個 postcss 插件。它對最新的 CSS 語法提供了支持,將業務中 css 轉換成更兼容的 CSS ,讓開發者不用擔心於瀏覽器是否支持這些特性。Use tomorrow's CSS syntax, today.
  • 【工程化】深入淺出 CSS Modules
    CSS Modules 並不是 CSS 官方的標準,也不是瀏覽器的特性,而是使用一些構建工具,比如 webpack,對 CSS 類名和選擇器限定作用域的一種方式(類似命名空間)本文來介紹一下 CSS Modules 的簡單使用,以及 CSS Modules 的實現原理(CSS-loader 中的實現)CSS Modules 的簡單使用
  • 前端JS&CSS
    css水平、垂直居中的寫法,請至少寫出4種?盒模型是css中重要的基礎知識,也是必考的基礎知識盒模型的組成,由裡向外content,padding,border,margin.這屬於簡單的css考查,平時在用組件庫的同時,也別忘了原生的css .a{ width: 0; height: 0; border-width: 100px; border-style: solid; border-color: transparent
  • 有趣的CSS題目(4): 從倒影說起,談談 CSS 繼承 inherit
    4、從倒影說起,談談 CSS 繼承 inherit給定一張有如下背景圖的 div:製作如下的倒影效果:法一:-webkit-box-reflect這是一個十分新的 CSS 屬性,使用起來十分簡單,可以從各個方向反射我們內容。不過兼容性過於慘澹:基本上是只有 -webkit- 內核的瀏覽器才支持。
  • 【有趣的CSS題目四】 從倒影說起,談談 CSS 繼承 inherit
    製作如下的倒影效果:法一:-webkit-box-reflect這是一個十分新的 CSS 屬性,使用起來十分簡單,可以從各個方向反射我們內容。不過兼容性過於慘澹:基本上是只有 -webkit- 內核的瀏覽器才支持。
  • CSS module了解下
    自然CSS 模塊化的解決方案有很多,但主要有三類:1、命名約定規範化CSS的解決方案如:BEM、OOCSS、AMCSS、SMACSS2、CSS in JS徹底拋棄 CSS,用 JavaScript 寫 CSS 規則,styled-components 就是其中代表。
  • CSS尺寸單位介紹
    css中的像素只是一個抽象的單位,在不同的設備或不同的環境中,css中的1px所代表的設備物理像素是不同的。在為桌面瀏覽器設計的網頁中,我們無需對這個津津計較,但在行動裝置上,必須弄明白這點。在早先的行動裝置中,屏幕像素密度都比較低,如iphone3,它的解析度為320x480,在iphone3上,一個css像素確實是等於一個屏幕物理像素的。
  • 是時候開始用 CSS 自定義屬性了
    自定義屬性的 css 也使用同樣的方法: -- 申明變量,當然它有一個好處:學習使用一次後,在各瀏覽器中復用它。你也許會問:『為什麼不用再用的語法?』There is a reason. 簡單來說,就是提供一種自定義屬性的方法,可以在任何預處理語言中使用它。
  • Css基礎回顧(1-2)
    #思維導圖#css語法設置body元素,通過 CSS 繼承,子元素將繼承最高級元素所擁有的屬性#css派生選擇器p strong { font-size:12px;}符合 p strong規則的才會受影響<p><strong>字體</p></strong
  • CSS Modules 用法教程
    四、 Class 的組合在 CSS Modules 中,一個選擇器可以繼承另一個選擇器的規則,這稱為」組合」(「composition」)。在App.css中,讓.title繼承.className 。
  • 認識CSS
    ".css"中,再由網頁文件".html"進行調用。   *儘量使用外部樣式表這種方式,目的是讓我們的html結構與表現形式分開/* "style.css"代碼 */body{    background-color:#cccccc;}<!
  • 來自新時代的 CSS
    詳情請查看 https://moox.io/blog/deprecating-cssnext/其實魚頭的腳手架裡早就把postcss-cssnext換成了postcss-preset-env,不過一直沒刪,但是看到這句話之後,處於好奇,就去翻了翻PostCSS的官網,然後又思考了下這些年CSS的發展歷程,遂有這篇文章的出爐。
  • 【教程】html+css零基礎入門教程之CSS 布局(二十)
    float的作用:通過css定義float(浮動)讓div樣式層塊,向左或向右(靠)浮動。設置模塊向左浮動:.box {float:left;}float語法:float : none | left |right |inherit,分別是對象不浮動、浮在左邊、浮在右邊、從父元素繼承。
  • 【第584期】簡單易懂的CSS Modules
    但回到css裡的樣式規則,情況就完全不是這麼回事了。css不是程序語言,但如果說要給它加一個作用域的概念的話,那就是:只有全局作用域。無論分拆為多少個css文件,無論用怎樣的方式引入,所有的樣式規則都位於同一作用域,只要選擇符近似,就有發生覆蓋的可能。
  • CSS簡介 inHTML&CSS(index: *, #, >, , +, ~, p.note)
    important;}<Body>中的font-family屬性 會被 子元素 繼承將屬性值 設置為 inherit 可強制 大多數元素 從 它的父元素中 繼承 屬性值<link>    // 使用外部CSS,要將 html文件 和 css
  • CSS樣式就應該這麼寫—CSS參考樣式集合
    為了方便大家學習css樣式,下面大家整理css樣式知識點及參考樣式合集。規則一:由於繼承而發生樣式衝突時,最近祖先獲勝。color屬性,但是由於p在繼承樹上離strong更近,因此strong中的文字最終繼承p的藍色。
  • 理解 CSS 模塊化
    舉個具體的例子:如下是一個簡單的CSS文件。其中,.base類名不需要是工程中唯一的,因為它將不會是真正被解析的類名。它可以看成是在JavaScript模塊中使用的類在樣式表中的別名。:global(.clearfix::after) {  content: '';  clear: both;  display: table;}CSS模塊還可以從其他模塊中繼承樣式,這和Sass中的@extend方法其實是一樣的。它不會拷貝樣式,只是將選擇器連接到繼承的樣式中。