透過繼承性重新認識 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
2會員
5內容數
生活就是 早上 8 點的文湖線;晚上 8 點的 New York Sour;帶著一台 GR3X 意興闌珊的漫步;嚮往著午後草皮上陪拉布拉多 🐶 玩耍;拿起似有似無的筆開始敲打創作。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
Cheng's 的其他內容
「在 JavaScript 中 0.1 + 02 等於多少?」 這是我在面試時會問的一題。有經驗的工程師應該知道我在問什麼,但相信仍有不少人可能還不知道 0.1 + 0.2 不等於 0.3。
「在 JavaScript 中 0.1 + 02 等於多少?」 這是我在面試時會問的一題。有經驗的工程師應該知道我在問什麼,但相信仍有不少人可能還不知道 0.1 + 0.2 不等於 0.3。
你可能也想看
Google News 追蹤
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
在當今日新月異的數位時代,網站已經不僅僅是一個給人們提供資訊的平臺,更是一個互動性、視覺吸引力和功能性兼具的數位體驗。而CSS(Cascading Style Sheets)正是網站設計中的一個重要元素,扮演著關鍵的角色。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
前言 終於要到這個振奮人心的章節了,我們終於要來學習,如何讓自己的網頁更加美觀。 但在這之前,我們肯定得先學習,如何將我們的 CSS 檔案,連接到 HTML 當中。 連結分類 首先,我們在連結 CSS 的方法中,有分為三種: 內聯連結 在 .html 當中,任一標籤的裡面,用屬性 s
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
《傳承》 照夜白電腦繪圖作品 使用軟體:Photoshop
Thumbnail
嘿,大家新年快樂~ 新年大家都在做什麼呢? 跨年夜的我趕工製作某個外包設計案,在工作告一段落時趕上倒數。 然後和兩個小孩過了一個忙亂的元旦。在深夜時刻,看到朋友傳來的解籤網站,興致勃勃熬夜體驗了一下,覺得非常好玩,或許有人玩過了,但還是想寫上來分享紀錄一下~
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
在當今日新月異的數位時代,網站已經不僅僅是一個給人們提供資訊的平臺,更是一個互動性、視覺吸引力和功能性兼具的數位體驗。而CSS(Cascading Style Sheets)正是網站設計中的一個重要元素,扮演著關鍵的角色。
Thumbnail
觀察者模式透過主題訂閱/訊息通知的機制,極度增強系統的可擴展性、靈活性以及降低組件間的耦合度。概念直觀簡單,是非常實用的設計模式。
前言 終於要到這個振奮人心的章節了,我們終於要來學習,如何讓自己的網頁更加美觀。 但在這之前,我們肯定得先學習,如何將我們的 CSS 檔案,連接到 HTML 當中。 連結分類 首先,我們在連結 CSS 的方法中,有分為三種: 內聯連結 在 .html 當中,任一標籤的裡面,用屬性 s
Thumbnail
如何透過 CSS 來美化和增強文本的可讀性,對於提升用戶體驗至關重要。本文將介紹如何使用 CSS 來處理網頁上的文本,包括字型設定、文本排列、裝飾等多方面。
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
《傳承》 照夜白電腦繪圖作品 使用軟體:Photoshop