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,我們下篇見 🙇🏻

avatar-img
5會員
10內容數
從零開始,記錄網頁設計的學習過程。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
學習如何學習 的其他內容
本篇將不同 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
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
本文介紹了CSS Battle #172 交叉骷髏題目的解答技巧,包括圖層拆解的熟練程度和對小圓拆開處理等技巧。作者分享了100%的解法,鼓勵讀者分享自己的作法與交流。
Thumbnail
這篇文章將介紹如何透過CSS Battle的題目來練習基礎切版技巧。透過一個眼睛圖案的例子,提供了對於 border、outline、border-radius等屬性的調整方式,並分享了一種 100% 的解法。歡迎大家分享自己的作法與作者交流,一起學習成長。
Thumbnail
這篇文章分享了作者對CSS Battle #151題目的解題方式,並強調了圖形解構的重要性。作者提到了基本的排版能力以及實際應用的弧度計算。透過這篇文章,讀者可以學習到CSS切版的技巧,同時也可以分享自己的作法,進行交流討論。
※ 查找 DOM 元素有兩種途徑: 直接選出一個節點 (select):要在樹狀結構裡查找資料,至少要先選出第一個元素。 從一個特定節點,查找到週邊的節點 :選出一個元素後,就可以順著結構找出父元素、子元素 、甚至同一層的兄弟元素,這種行為稱為「遍歷 (traverse)」。 ※ 選出特定 D
※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
Thumbnail
什麼是 CSS 預處理器 CSS 預處理器是一種工具,使用專門的語法來生成 CSS 樣式表。市面上有許多 CSS 預處理器可供選擇,它們通常會提供一些純 CSS 中沒有的功能,例如變數、混入、巢狀選擇器等。這些功能可以使 CSS 結構更易讀、更易於維護,並提高開發效率。 為什麼使用 CSS 預處
前言 今天課程要來學習,在 .css 設計樣式後,怎麼透過選擇器,讓 .html 可以有所配對,經過這一步後,便可以開始學習,如何正式設計 .css 了。 選擇器 介紹 還記得上次課程,我們在 .css 檔案中,撰寫的程式碼嗎?讓我們來複習看看: .highlight { co
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。
Thumbnail
這節課的學習目標是了解 CSS 的基本語法結構和使用方法。
Thumbnail
CSS 是控制網頁外觀的語言,應用於網頁設計、UI/UX 設計、電子商務和移動應用開發。主要使用者包括前端開發者、UI/UX 設計師和網頁設計師。CSS 的特性有樣式控制、層疊優先級、響應式設計及分離內容與樣式。
Thumbnail
本文介紹了CSS Battle #172 交叉骷髏題目的解答技巧,包括圖層拆解的熟練程度和對小圓拆開處理等技巧。作者分享了100%的解法,鼓勵讀者分享自己的作法與交流。
Thumbnail
這篇文章將介紹如何透過CSS Battle的題目來練習基礎切版技巧。透過一個眼睛圖案的例子,提供了對於 border、outline、border-radius等屬性的調整方式,並分享了一種 100% 的解法。歡迎大家分享自己的作法與作者交流,一起學習成長。
Thumbnail
這篇文章分享了作者對CSS Battle #151題目的解題方式,並強調了圖形解構的重要性。作者提到了基本的排版能力以及實際應用的弧度計算。透過這篇文章,讀者可以學習到CSS切版的技巧,同時也可以分享自己的作法,進行交流討論。
※ 查找 DOM 元素有兩種途徑: 直接選出一個節點 (select):要在樹狀結構裡查找資料,至少要先選出第一個元素。 從一個特定節點,查找到週邊的節點 :選出一個元素後,就可以順著結構找出父元素、子元素 、甚至同一層的兄弟元素,這種行為稱為「遍歷 (traverse)」。 ※ 選出特定 D
※ Javascript和HTML的關係 當我們輸入新的網址或按下重新整理時,從解析檔案到畫面顯示出來,瀏覽器會進行以下流程: 解析 HTML / CSS 檔案,建立物件模型: HTML → DOM (Document Object Model)。 CSS → CSSOM (CSS Obje
Thumbnail
什麼是 CSS 預處理器 CSS 預處理器是一種工具,使用專門的語法來生成 CSS 樣式表。市面上有許多 CSS 預處理器可供選擇,它們通常會提供一些純 CSS 中沒有的功能,例如變數、混入、巢狀選擇器等。這些功能可以使 CSS 結構更易讀、更易於維護,並提高開發效率。 為什麼使用 CSS 預處
前言 今天課程要來學習,在 .css 設計樣式後,怎麼透過選擇器,讓 .html 可以有所配對,經過這一步後,便可以開始學習,如何正式設計 .css 了。 選擇器 介紹 還記得上次課程,我們在 .css 檔案中,撰寫的程式碼嗎?讓我們來複習看看: .highlight { co
Thumbnail
您對前端有興趣,對CSS不陌生。CSS新特性前應瞭解基本內容。CSS屬性制定經歷過程,瀏覽器私有前綴及處理,開發者對新特性漸進增強,優雅降級處理,Web標準定義、作用等。