透過繼承性重新認識 CSS

更新於 2024/09/26閱讀時間約 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
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在初步閱讀「卡片盒筆記」,這是本顛覆過去做筆記的思維,講述如何由下而上、互相串連的筆記技巧書籍之後,除了內容提到的技巧之外,也發現裡面同時包含過去常提到的建立習慣小技巧。也再一次的表現出當我們練習培養習慣的技巧,絕對可以應用在各個領域當中,無痛養成我們想要的能力。 這裡列出「卡片盒筆記」中,兩個和
Thumbnail
老師要從一個給予者變成引導者,從告知者變成提問者,也只有對世界仍就充滿好奇的老師,才有可能為學生創造學習經驗,感覺自己在過程中的直覺情緒,理性分析自己是如何思考走到這一步,學生也才能從老師的提問引導中開啟真實的探究歷程,最終成為能自主啟動學習的人。
Thumbnail
你有在寫日誌嗎?你知道日誌其實是很好的筆記素材嗎? 寫日誌的過程中,我時常會發現自己最近感興趣想思考的關鍵字和概念。 這些「關鍵字」和「概念」都非常適合做數位筆記來進一步學習! 根據我這3年寫日誌的經驗,掌握以下3個關鍵因素,馬上就能體驗到自己人生的指數性成長! 關鍵1 - 留意日誌中的關鍵字與概念
Thumbnail
文:芳療作家兼獨立講師Gian(許怡蘭) ✧二〇一二年,當我們初次在課堂相遇時,彼此都沒預料到會在芳療這條路上同行這麼遠 ✧理性頭腦和感性靈魂的無間合作 ✧書寫香氣的唐吉軻德 ✧透過書寫,將氣味昇華成不朽回憶 Gian 許怡蘭
Thumbnail
你有想過你心目中的理想生活樣貌嗎?今天邀請到的這位來賓是一位一邊旅行一邊工作的自媒體人,她運用自己多年視覺設計以品牌的資歷,使用「設計思考」的方式來規劃人生藍圖,並且在Podcast頻道上擁有相當出色的成績,歡迎Brand Your Life理想生活設計課程的創辦人,佐編茶水間Zoey! 佐邊茶水
Thumbnail
在昨天的部分,我們進行了個股間的相關性分析,今天我們就來針對技術指標,透過設定指定條件來自動抓出個股的進出場點,以及進出場後的績效回測,這些在金融數據分析上是相當重要的一部分,為了就是確認策略是否為好策略,那我們就開始今天的教學吧!!
Thumbnail
這個應該算是許多人透過粉專私訊小編、或是在個別諮詢中,最常被問的問題了。 其實我並不鼓勵大家購買大量課程、書籍來淹沒自己,因為資訊量很大,而且每位老師的經歷、教法有不同,有些著重於視覺創意、工具深入應用 ; 有些則對於 UX分析研究相當有經驗。 而此時的你並不知道,到底應該投資哪一種類型項目,最能「
Thumbnail
訂閱經濟的拉新留舊一直都是很重要的兩個因素,經濟學人透過經營Linkedin帶來過去三倍的訂閱戶數量,是怎麼做到的呢?
Thumbnail
經濟成長率再進一步成長機率低的重要理由是,資本形成項目是負成長,半導體設備進口值比去年明顯下滑,另外是基期墊高之後,再成長的難度更加高。
Thumbnail
本文探討了複利效應的重要性,並藉由巴菲特的投資理念,說明如何選擇穩定產生正報酬的資產及長期持有的核心理念。透過定期定額的投資方式,不僅能減少情緒影響,還能持續參與全球股市的發展。此外,文中介紹了使用國泰 Cube App 的便利性及低手續費,幫助投資者簡化投資流程,達成長期穩定增長的財務目標。
Thumbnail
在初步閱讀「卡片盒筆記」,這是本顛覆過去做筆記的思維,講述如何由下而上、互相串連的筆記技巧書籍之後,除了內容提到的技巧之外,也發現裡面同時包含過去常提到的建立習慣小技巧。也再一次的表現出當我們練習培養習慣的技巧,絕對可以應用在各個領域當中,無痛養成我們想要的能力。 這裡列出「卡片盒筆記」中,兩個和
Thumbnail
老師要從一個給予者變成引導者,從告知者變成提問者,也只有對世界仍就充滿好奇的老師,才有可能為學生創造學習經驗,感覺自己在過程中的直覺情緒,理性分析自己是如何思考走到這一步,學生也才能從老師的提問引導中開啟真實的探究歷程,最終成為能自主啟動學習的人。
Thumbnail
你有在寫日誌嗎?你知道日誌其實是很好的筆記素材嗎? 寫日誌的過程中,我時常會發現自己最近感興趣想思考的關鍵字和概念。 這些「關鍵字」和「概念」都非常適合做數位筆記來進一步學習! 根據我這3年寫日誌的經驗,掌握以下3個關鍵因素,馬上就能體驗到自己人生的指數性成長! 關鍵1 - 留意日誌中的關鍵字與概念
Thumbnail
文:芳療作家兼獨立講師Gian(許怡蘭) ✧二〇一二年,當我們初次在課堂相遇時,彼此都沒預料到會在芳療這條路上同行這麼遠 ✧理性頭腦和感性靈魂的無間合作 ✧書寫香氣的唐吉軻德 ✧透過書寫,將氣味昇華成不朽回憶 Gian 許怡蘭
Thumbnail
你有想過你心目中的理想生活樣貌嗎?今天邀請到的這位來賓是一位一邊旅行一邊工作的自媒體人,她運用自己多年視覺設計以品牌的資歷,使用「設計思考」的方式來規劃人生藍圖,並且在Podcast頻道上擁有相當出色的成績,歡迎Brand Your Life理想生活設計課程的創辦人,佐編茶水間Zoey! 佐邊茶水
Thumbnail
在昨天的部分,我們進行了個股間的相關性分析,今天我們就來針對技術指標,透過設定指定條件來自動抓出個股的進出場點,以及進出場後的績效回測,這些在金融數據分析上是相當重要的一部分,為了就是確認策略是否為好策略,那我們就開始今天的教學吧!!
Thumbnail
這個應該算是許多人透過粉專私訊小編、或是在個別諮詢中,最常被問的問題了。 其實我並不鼓勵大家購買大量課程、書籍來淹沒自己,因為資訊量很大,而且每位老師的經歷、教法有不同,有些著重於視覺創意、工具深入應用 ; 有些則對於 UX分析研究相當有經驗。 而此時的你並不知道,到底應該投資哪一種類型項目,最能「
Thumbnail
訂閱經濟的拉新留舊一直都是很重要的兩個因素,經濟學人透過經營Linkedin帶來過去三倍的訂閱戶數量,是怎麼做到的呢?
Thumbnail
經濟成長率再進一步成長機率低的重要理由是,資本形成項目是負成長,半導體設備進口值比去年明顯下滑,另外是基期墊高之後,再成長的難度更加高。