CSS 習作|初學 CSS 必經的犯錯道路

閱讀時間約 7 分鐘
raw-image

本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。

▍🎥 CSS 選擇器效能優化建議,影音筆記:

洧杰老師分享在 iT 邦幫忙的「CSS 階層效能優化建議」文章,
裡面摘要了影片的重點:

  1. 不同寫法的差異,例:.wrap .header .menu ul li a.menu a
  2. 瀏覽器解析網頁的過程:DOM 與 CSSOM 的效能配對
  3. Google 建議的優化方式
  4. 不同選擇器之間的效能數據

01 - 瀏覽器如何解析網頁?

對瀏覽器而言,第一步會將 DOM 樹狀結構和 CSSOM 樹狀結構合併成「轉譯樹狀結構」,讓這個結構不僅包含網頁上所有可見的 DOM 內容,同時也包含各個節點的 CSSOM 樣式資訊。

文獻閱讀:Render-tree Construction, Layout, and Paint

圖片來源

圖片來源

02 - 瀏覽器解析 HTML、CSS 的過程:

瀏覽器在解析 HTML、CSS 後會產出「DOM」和「CSSOM」,並且將 DOM 和 CSSOM 進行匹配,進而產出 Style,而後將網頁的畫布排版 Layout 架構出來,接著繪製畫面 Painting,將流程繪製如下圖:

瀏覽器解析 HTML、CSS 過程

瀏覽器解析 HTML、CSS 過程

流程順序:

  • 處理 HTML 標記並構建 DOM 樹。
  • 處理 CSS 標記並構建 CSSOM 樹。
  • 將 DOM 和 CSSOM 組合成渲染樹。
  • 在渲染樹上運行佈局以計算每個節點的幾何形狀。
  • 將各個節點繪製到屏幕上。

因此若我們的階層複雜,則會在「DOM、CSSOM 匹配階段」影響效能。

03 -Google 建議的效能優化方式

文獻閱讀:Reduce the scope and complexity of style calculations

  • 減少樣式計算的範圍與複雜性
  • 降低您的選取器複雜性
  • 降低樣式化的元素數目
  • 測量您的樣式重新計算成本
  • 使用區塊、元素、修改器


▍🎥 如何提升 CSS Class 可讀性,影音筆記:

有發現到,從過去到未來,class 有慢慢越變越多的趨勢,class 變多代表他的靈活性變多了,但 class 變多的情況下,也會隨之有一些缺點。

當一個 HTML 標籤上的 class 過多時,且當我們不能減少 class 數量時,可以透過 class 的擺放順序來增加可讀性,以下面程式碼為例,可以看到 <div> 有很多不同的 class 命名,而每個命名都有不同的作用,如用來推擠內外距的「mb3」、「pt-3」,以及語意名稱「header」和格線系統「col-4」。

<!-- 沒有排序的方式 -->
<div class"mb3 header col-4 pt-3">


當 class 繼續累加更多時,會使可讀性越來越不好,因此我們可以從一開始便有意識的排序 class。

依循下列順序來優化:

  1. 先擺放:語意、容器(格線系統)、元件
    ( 注意:元件和容器通常不會放在一起 )
  2. 再擺放:樣式調整(文字顏色)
  3. 最後放:utilities(padding、margin)、微調的東西
<!-- 有排序的方式 -->
<div class"header container bg-dark mb3 pt-3">

或是專放 utilities 的元素:

<div class="px-6 pt-4 pb-2"> 


▍🎥 CSS Class 不要用方向、編號式命名

洧杰老師分享在 iT 邦幫忙的「由淺入深的 CSS 命名規則」文章。

01 - 方向式命名使「響應式狀態下不符語意」

如下圖,初學時會以下列的 .left.right 去為區塊命名:

raw-image

但是這樣的命名方式會使可讀性較差,且當畫面大小為手機或 RWD 伸縮時,版面會變成一欄,也就沒有所謂的「左右,.left.right 之分了」,且也不符合語意了。

raw-image

因此不建議以方向式「左右上下」來命名,例如:.footer-top.bottom

02 - 初學時,以語意式命名取代編號式命名

另一方面,也不適合以編號來命名,例:「.box1.box2.box7....」等,這樣的命名方式在閱讀上較無法一目瞭然知道內容是什麼(且當與他人協作時,也會增加協作負擔),且當專案歷經時間洗滌,再回過頭來看時,也可能對當時的 .box1.box9 分別是什麼內容忘得一乾二凈了。
因此,建議在新手的練習階段,至少要以語意式命名,例如:「.header.menu」,讓人理解該區塊的內容。

03 - 學習過程中,命名時會歷經的幾個學習階段:

  • 第一階段:一開始會以方向性命名,例 .left.right 等。
  • 第二階段:語意命名方式,例 .header.cartList.item.menu
  • 第三階段:元件式命名,以 Bootstrap 為例,卡片命名為 .card,Bootstrap 依照外觀樣子來設計元件名稱,這樣的命名方式使元件套用於任何地方都不會與畫面位置、檔案頁面有衝突,可抽換靈活使用。
    以一顆按鈕來舉例:
    若命名為首頁按鈕 .index-btn,放置於首頁內容時並無怪異之處。
    但若套用於其他頁面,放在會員頁面裡時,則 class 名稱就會產生檔案檔名、畫面的邏輯衝突。


▍🎥 從 CSS 標題設計判斷前端水平

洧杰老師分享在 iT 邦幫忙的「從 CSS 標題設計判斷前端水平」文章。

01 - 避免直接在標籤選取器定義樣式

raw-image

以 h2 為例,初學時會對標籤選取器直接下樣式設計,以下為例:

h2{ font-size: 36px;}

然而這樣的做法會使全部的 h2 都吃到相同的樣式設定
但若 h2 會在許多不同區塊、頁面重複使用,且樣式需求也不一樣的情境下,這樣的作法會使 h2 樣式難以覆蓋。

02 - 避免非必要性的階層依賴關係

接續上面,以 h2{ font-size: 36px;} 為例,當 h2 會在許多不同區塊、頁面上重複使用時,我們可能會使用以下方式:

h2{ font-size: 36px;}

.profile h2{ font-size: 24px; }
.education h2{ font-size: 24px; }
.about h2{ font-size: 24px; }

或是運用以下方式:

h2{ font-size: 36px;}

.profile h2, .education h2, .about h2{ font-size: 24px; }


然而這些作法會出現越來越多一樣的語法,且當頁面有 50 頁、100 頁時,將會使程式碼堆疊肥厚,維護困難。


▍小結

特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。

Practice make perfect, 我是正在自我習作中的 Draw,我們下篇見 🙇🏻

5會員
10內容數
從零開始,記錄網頁設計的學習過程。
留言0
查看全部
發表第一個留言支持創作者!
學習如何學習 的其他內容
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
養成 1px 都不差的切版練習,紀錄我的訓練過程。
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
養成 1px 都不差的切版練習,紀錄我的訓練過程。
本篇習作內容進入到 CSS 排版實作,一起瞭解 Flexbox,開始第一個網頁排版吧 💪🏻!
box-sizing 是 CSS 屬性的一種,它使我們可以改變盒模型的計算方式。
本篇習作加強自我對 CSS Box Model 的觀念,也是在實作練習中發現自己雖然看似理解了盒模型,但其實在應用上尚不熟悉,因此藉由筆記重新梳理和練習,將 CSS Box Model 的基礎觀念整理並釐清,一起來看看吧!
本篇習作內容,除了練習六角預習影音內的常用語法章節外,也額外整理了其它常用於文本的 HTML 元素,希望能透過這樣的整理,在未來設計結構更複雜的網站介面內容時,能扎穩根基。
你可能也想看
Google News 追蹤
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
在這一章中,我們介紹了 CSS 的過渡效果和動畫效果。過渡效果使 CSS 屬性的變化更加平滑,而動畫效果則允許我們更精細地控制元素的多個屬性隨時間變化的過程。我們通過基本語法和示例展示了如何使用這些效果,並提供了一個綜合應用的實踐案例來幫助理解。這些技術可以讓你的網頁更具互動性和動態效果。
Thumbnail
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
本文將介紹如何使用 CSS Media Queries 來創建適應不同裝置的網頁,在現今多裝置的網頁設計中,可以透過 CSS Media Queries 來讓我們根據不同的裝置特性,如螢幕尺寸、解析度等,來應用不同的樣式規則。
Thumbnail
本文將介紹 CSS 的四個基本概念:margin(外邊距)、padding(內邊距)、border(邊框)和 box-sizing(盒模型),接下來將透過實際的程式碼範例來展示這些概念如何運作。
Thumbnail
本文將介紹 CSS 中的position屬性,position是用於控制網頁元素在頁面上的排列,接下來將逐一介紹position屬性的五種不同值:static, relative, absolute, fixed, 和 sticky,以及它們如何影響元素的排列。
Thumbnail
本文將介紹 CSS Flexbox,CSS Flexbox 是網頁設計的佈局工具,Flexbox 能使元素的排列和對齊變得更加靈活和直觀,從而大大簡化了響應式網頁設計的過程,通過了解 Flexbox 的概念和屬性,你將能夠利用 Flexbox 創建靈活且響應性強的網頁佈局。
Thumbnail
在網頁中,每個按鈕、文字或圖片等都是通過 CSS 來設定它們的樣子,要做到這點,我們就需要用到 CSS 選擇器。本文會從最簡單的選擇器開始講起,讓你了解如何使用 CSS 選擇器。
Thumbnail
這個秋,Chill 嗨嗨!穿搭美美去賞楓,裝備款款去露營⋯⋯你的秋天怎麼過?秋日 To Do List 等你分享! 秋季全站徵文,我們準備了五個創作主題,參賽還有機會獲得「火烤兩用鍋」,一起來看看如何參加吧~
Thumbnail
在本章節中,我們介紹了 CSS 偽元素的基本概念和常見用法,通過一些示例,我們展示了如何使用這些偽元素來樣式化文檔中的特定部分。此外,我們還探討了一些高級用法,如創建自定義引號和實現複雜的圖形效果。這些內容應該能夠幫助你更好地理解和應用 CSS 偽元素。
Thumbnail
在這一章中,我們介紹了 CSS 的過渡效果和動畫效果。過渡效果使 CSS 屬性的變化更加平滑,而動畫效果則允許我們更精細地控制元素的多個屬性隨時間變化的過程。我們通過基本語法和示例展示了如何使用這些效果,並提供了一個綜合應用的實踐案例來幫助理解。這些技術可以讓你的網頁更具互動性和動態效果。
Thumbnail
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
本文將介紹如何使用 CSS Media Queries 來創建適應不同裝置的網頁,在現今多裝置的網頁設計中,可以透過 CSS Media Queries 來讓我們根據不同的裝置特性,如螢幕尺寸、解析度等,來應用不同的樣式規則。
Thumbnail
本文將介紹 CSS 的四個基本概念:margin(外邊距)、padding(內邊距)、border(邊框)和 box-sizing(盒模型),接下來將透過實際的程式碼範例來展示這些概念如何運作。
Thumbnail
本文將介紹 CSS 中的position屬性,position是用於控制網頁元素在頁面上的排列,接下來將逐一介紹position屬性的五種不同值:static, relative, absolute, fixed, 和 sticky,以及它們如何影響元素的排列。
Thumbnail
本文將介紹 CSS Flexbox,CSS Flexbox 是網頁設計的佈局工具,Flexbox 能使元素的排列和對齊變得更加靈活和直觀,從而大大簡化了響應式網頁設計的過程,通過了解 Flexbox 的概念和屬性,你將能夠利用 Flexbox 創建靈活且響應性強的網頁佈局。
Thumbnail
在網頁中,每個按鈕、文字或圖片等都是通過 CSS 來設定它們的樣子,要做到這點,我們就需要用到 CSS 選擇器。本文會從最簡單的選擇器開始講起,讓你了解如何使用 CSS 選擇器。