透過繼承性重新認識 CSS

更新於 發佈於 閱讀時間約 6 分鐘


前言

<div class="parent">
我是父層
<p class="child">我是子層</p>
</div>

上面這段程式碼中,當我在父層給予 color: red; 時,你認為子層的字體顏色應該為何?
答案是紅色。

那麼我繼續在父層給予一個 text-align: center;,子層文字會置左,置中還是置右?
答案是置中。

最後我又在父層​設定 z-index: 1;,此時子層的 z-index 值為何?


答案絕對不會是 1,而是 auto
現在就讓我們透過繼承性重新認識一下你既熟悉又陌生的 CSS 吧。


繼承性

什麼是繼承性?

在 CSS 中,繼承性指的是當一個元素沒有指定某個屬性時,它會從其父元素中繼承該屬性計算後的值。換句話說,如果父元素設置了某些樣式,子元素將會繼承這些樣式,除非另有規定

子元素繼承自父元素的樣式。

子元素繼承自父元素的樣式。


我們常見的字型、字體大小、顏色、行高、斷行等文字相關的屬性通常具有繼承性,這意味著子元素會繼承父元素的字體與文本樣式。另外一些列表相關的屬性如 list-style ,或是 cursor 也都具有繼承性。


總有個初始值

假如有一具備繼承性的樣式屬性並沒有設定值,而它的父層們,乃至於它的最大父層 <html> 我們也沒有設定任何值的話,那會發生什麼事呢?
這時它會使用 html 超文本的初始預設樣式。現在打開任一網頁,開啟開發工具後透過計算屬性面板我們可以看到完整的樣式設定來源。如果該屬性都沒有額外介入設定的話,在計算屬性面板中該屬性將呈現其初始值。

透過開發工具查看樣式的初始值。

透過開發工具查看樣式的初始值。


凡事皆有特例

然而,並非所有的 CSS 屬性都具有繼承性,以下列出常見且無繼承性的屬性;

  1. 定位相關屬性: 包括 positiontopbottomleftright,這些屬性控制元素的位置,通常不會被子元素繼承。
  2. 盒模型相關屬性: 例如 widthheightmarginpaddingborder,這些屬性通常不會被子元素繼承,因為它們與元素的大小和佈局有關。
  3. 顯示屬性(display): 控制元素的顯示方式,如 display: blockdisplay: inline,這些屬性通常不會被子元素繼承,因為它們影響元素的排列方式。
  4. 清除浮動(clear): 用於處理浮動元素的佈局問題,通常不會被子元素繼承。
  5. 層級相關屬性: 包括 z-index,用於控制元素的堆疊順序,通常不會被子元素繼承。


我特例你的特例

既然我們已經知道有些 CSS 屬性天生不帶繼承性,但如果我們就是想搞怪,希望它們繼承父元素的值呢?答案是可以的。在撰寫 CSS 時你是否曾在 IDE 為你呈現的可選清單中注意過 inherit 這個選項?

text-aligh 的可選清單包含 inherit。

text-aligh 的可選清單包含 inherit。


如下方範例,假設我們想讓子元素的邊框與父元素中的邊框設定相同。正常來說,邊框屬性不具備繼承性,但我們可以使用 inherit 關鍵字來實現這一目標。

<div class="parent">
我是父層
<div class="child">我是子層</div>
</div>
.parent {
width: 300px;
height: 500px;
border: 1px solid red;
}

.child {
border: inherit; /* 子元素邊框繼承父元素的邊框 */
}


這邊我們統整幾個與繼承性相關的關鍵字。

  1. inherit(繼承): 使用 inherit 關鍵字將屬性的值設置為其父元素的值。這意味著當你將屬性設置為 inherit 時,它將從父元素中繼承其值。這在需要子元素繼承父元素特定屬性值時非常好用。
  2. initial(初始值): 使用 initial 關鍵字將屬性的值設置為其初始值。每個 CSS 屬性都有一個預設的初始值,使用 initial 關鍵字將屬性重置為這個初始值。這在需要將屬性值還原到初始狀態時很有用。
  3. unset(取消設置): 使用 unset 關鍵字將屬性的值設置為其繼承值(父元素有設定的話),如果沒有可供繼承的值,則設置為其初始值。
    換句話說,unset 關鍵字會根據元素的具體情況來設置屬性的值,如果該屬性可以繼承,則繼承父元素的值(效果同 inherit),否則會將其設置為初始值(效果同 initial)。這使得 unset 關鍵字非常靈活,可以根據元素的上下文動態設置屬性值。


為什麼要有繼承性

回過頭來試想一下,如果 CSS 屬性沒有繼承性的概念,那就意味著工程師得為所有的元素個別設定,例如替所有元素設定 color
先不說這樣一來樣式檔會變得無比肥大,光是替每一個元素不斷重新設定樣式(即使設計師根本沒要求),如此反人類的操作想必沒人會想幹這行了吧⋯⋯。身為一名工程師,切記別把時間浪費在瑣碎且無意義的事情上。

我才不想全部一個一個設定。

我才不想全部一個一個設定。


總結

CSS 的繼承性為我們帶來了多方面的好處,最後就讓我們總結一下它的優點及該注意的事項吧。

優點

  1. 程式碼簡潔和可讀性提升: 通過使用繼承性,可以將樣式應用到整個文檔結構中,從而減少重複的程式碼。這樣不僅使得 CSS 更加簡潔,還提高了程式碼的可讀性,使得樣式設計更容易理解和維護。
  2. 一致性和可重用性增強: 繼承性確保了相同類型元素之間的一致性,從而使整個網頁或應用程序的外觀和風格保持一致。這也使得樣式更具可重用性,可以在不同的元素上共用相同的樣式,從而節省開發時間並降低程式碼數量。
  3. 易於維護和修改: 當需要修改樣式時,只需更改相關的父元素的樣式即可,所有繼承該樣式的子元素都會自動更新。這使得程式碼的維護變得更加輕鬆,並且能夠快速地進行樣式調整和更新。
  4. 開發效率提高: 使用繼承性可以提高開發效率,因為你不需要為每個元素都單獨指定樣式,只需在父元素上設置一次即可。這樣可以節省大量的時間和精力,使得開發過程更加高效。



注意事項

  1. 不是所有屬性都可繼承: 需要注意的是,並非所有的 CSS 屬性都具有繼承性,有些屬性是不會被子元素繼承的,因此在使用時要特別留意。
  2. 避免過度依賴繼承: 雖然繼承可以讓程式碼更加簡潔和易於維護,但過度依賴繼承也可能導致樣式的不可控性,因此在設計和組織 CSS 時,需要保持適當的平衡。


總的來說,CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。


Cheng's murmur

高樓層遇到地震很可怕沒錯,
但地震造成的電梯停駛會讓人瞬間崩潰。
留言
avatar-img
留言分享你的想法!
avatar-img
Cheng's
2會員
6內容數
生活就是 早上 8 點的文湖線;晚上 8 點的 New York Sour;帶著一台 GR3X 意興闌珊的漫步;嚮往著午後草皮上陪拉布拉多 🐶 玩耍;拿起似有似無的筆開始敲打創作。
你可能也想看
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
TOMICA第一波推出吉伊卡哇聯名小車車的時候馬上就被搶購一空,一直很扼腕當時沒有趕緊入手。前陣子閒來無事逛蝦皮,突然發現幾家商場都又開始重新上架,價格也都回到正常水準,估計是官方又再補了一批貨,想都沒想就立刻下單! 同文也跟大家分享近期蝦皮購物紀錄、好用推薦、蝦皮分潤計畫的聯盟行銷!
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
每年4月、5月都是最多稅要繳的月份,當然大部份的人都是有機會繳到「綜合所得稅」,只是相當相當多人還不知道,原來繳給政府的稅!可以透過一些有活動的銀行信用卡或電子支付來繳,從繳費中賺一點點小確幸!就是賺個1%~2%大家也是很開心的,因為你們把沒回饋變成有回饋,就是用卡的最高境界 所得稅線上申報
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
這篇文章分享了 CSS Battle 第 38 題的解法,並提供了相關的技術總結。文章內容包括了使用 flex 排版處理、背景漸層的方法處理等相關技術。透過這篇文章可以學習到如何解決 CSS 切版的問題。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
CSS 的繼承性是開發網頁樣式時的一個重要概念,它使得樣式設計更加靈活和高效,有助於提高程式碼的可讀性、一致性和可重用性,並加快開發速度,從而提供更好的開發體驗。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
代理模式通過封裝原始對象來實現對該對象的控制和管理,同時不改變原始對象的行為或客戶端與該對象互動的方式,以此介入或增強對該對象的訪問和操作。
Thumbnail
這是一篇關於CSS Battle系列的文章,介紹瞭如何通過CSS來處理特定圖案的切版與前端工程技術。文章分享了使用grid和radial-gradient()方法來處理特定圖案的解法以及相關技術總結。
Thumbnail
這是一篇關於CSS Battle系列的文章,介紹瞭如何通過CSS來處理特定圖案的切版與前端工程技術。文章分享了使用grid和radial-gradient()方法來處理特定圖案的解法以及相關技術總結。
Thumbnail
CSS 樣式採用規則:先看權重,再看誰後
Thumbnail
CSS 樣式採用規則:先看權重,再看誰後
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News