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
留言分享你的想法!
avatar-img
學習如何學習
6會員
10內容數
從零開始,記錄網頁設計的學習過程。
學習如何學習的其他內容
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2024/04/04
CSS 裡的「寬度,最大寬度,最小寬度」分別是什麼呢? ➊ width 用來設定元素的寬度,且 width 作用範圍僅在 content-box 區塊 ➋ max-width → 用來設定元素的最大寬度 ➌ min-width → 用來設定元素的最小寬度
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/09/10
我想分享給那些曾有過相同感受的同學,覺得自己能力不適合、在學習中感到自卑想要放棄的那些時候。而後半篇則想分享自己對於老師、助教的感謝。
Thumbnail
2023/08/27
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
Thumbnail
2023/08/27
本篇將不同 Sass 學習資源彙整在此,作爲學習筆記,大多來自 w3schools 和六角學院,相關連結也一並記錄下來,以便可以隨時查看、更新。
Thumbnail
看更多
你可能也想看
Thumbnail
雙11於許多人而言,不只是單純的折扣狂歡,更是行事曆裡預定的,對美好生活的憧憬。 錢錢沒有不見,它變成了快樂,跟讓臥房、辦公桌、每天早晨的咖啡香升級的樣子! 這次格編突擊辦公室,也邀請 vocus「野格團」創作者分享掀開蝦皮購物車的簾幕,「加入購物車」的瞬間,藏著哪些靈感,或是對美好生活的想像?
Thumbnail
雙11於許多人而言,不只是單純的折扣狂歡,更是行事曆裡預定的,對美好生活的憧憬。 錢錢沒有不見,它變成了快樂,跟讓臥房、辦公桌、每天早晨的咖啡香升級的樣子! 這次格編突擊辦公室,也邀請 vocus「野格團」創作者分享掀開蝦皮購物車的簾幕,「加入購物車」的瞬間,藏著哪些靈感,或是對美好生活的想像?
Thumbnail
SEO(Search Engine Optimization)是網站提升搜尋引擎排名的關鍵,對於想要在網路世界中脫穎而出的企業而言,學習SEO是一條必經之路。本文將從新手到專家,為你提供一個完整的SEO學習進階指南。 初探SEO的基礎知識 對於SEO初學者,首先要理解搜索引擎如何工作,熟悉基本的
Thumbnail
SEO(Search Engine Optimization)是網站提升搜尋引擎排名的關鍵,對於想要在網路世界中脫穎而出的企業而言,學習SEO是一條必經之路。本文將從新手到專家,為你提供一個完整的SEO學習進階指南。 初探SEO的基礎知識 對於SEO初學者,首先要理解搜索引擎如何工作,熟悉基本的
Thumbnail
SEO(搜尋引擎優化)是網站提升在搜尋引擎排名的有效手段,而關鍵字的選擇與優化是SEO的核心。本文將深入介紹如何挑選和優化關鍵字,以提高網站在搜尋引擎上的曝光度。 首先,了解SEO是什麼。SEO是一項通過優化網站結構、內容和連結,提高網站在搜尋引擎排名的技術。在這個過程中,關鍵字的選擇至關重要,因
Thumbnail
SEO(搜尋引擎優化)是網站提升在搜尋引擎排名的有效手段,而關鍵字的選擇與優化是SEO的核心。本文將深入介紹如何挑選和優化關鍵字,以提高網站在搜尋引擎上的曝光度。 首先,了解SEO是什麼。SEO是一項通過優化網站結構、內容和連結,提高網站在搜尋引擎排名的技術。在這個過程中,關鍵字的選擇至關重要,因
Thumbnail
在網路時代,SEO(搜尋引擎優化)已經成為網站提升曝光度和吸引用戶的重要手段。然而,隨著使用者行為的不斷演變,掌握使用者行為學習成為制定SEO策略的關鍵。以下是一些關於SEO最佳實踐的思考和建議。 1. SEO是什麼? SEO即搜尋引擎優化,是通過改進網站內外部結構、內容優化等手段,提升網站在搜
Thumbnail
在網路時代,SEO(搜尋引擎優化)已經成為網站提升曝光度和吸引用戶的重要手段。然而,隨著使用者行為的不斷演變,掌握使用者行為學習成為制定SEO策略的關鍵。以下是一些關於SEO最佳實踐的思考和建議。 1. SEO是什麼? SEO即搜尋引擎優化,是通過改進網站內外部結構、內容優化等手段,提升網站在搜
Thumbnail
SEO,即搜尋引擎優化,是數位媒體行銷中至關重要的一環。對於初學者而言,建立一個全面的學習指南是邊向SEO巔峰的第一步。從基礎到進階,這是一場關於SEO的冒險之旅。 首先,SEO是什麼?SEO即通過優化網站內外部元素,提高其在搜尋引擎中的排名,從而吸引更多有價值的訪客。要深入了解SEO,不妨從Go
Thumbnail
SEO,即搜尋引擎優化,是數位媒體行銷中至關重要的一環。對於初學者而言,建立一個全面的學習指南是邊向SEO巔峰的第一步。從基礎到進階,這是一場關於SEO的冒險之旅。 首先,SEO是什麼?SEO即通過優化網站內外部元素,提高其在搜尋引擎中的排名,從而吸引更多有價值的訪客。要深入了解SEO,不妨從Go
Thumbnail
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。 特別有感的是,現在回頭看,發現影片中每個提及的知識點或是誤區自己都踩過好幾輪了,這是在學習及練習中很常會反覆發生、需要注意的地方,提醒自己在接下來的練習中,能將老師提及的思維及作法吸取並應用。
Thumbnail
當我們初步對搜尋引擎的運作模式有了概念之後,就進入到真正 SEO 實際操作的環節了。很多 SEO 網站都會把最佳化實踐放在SEO 技術,而並沒有花太多時間關注到網站本身的架構。 而從我個人的理念來說,我們應該要先搞懂架構,所以這一期,讓我們來說網站架構吧。
Thumbnail
當我們初步對搜尋引擎的運作模式有了概念之後,就進入到真正 SEO 實際操作的環節了。很多 SEO 網站都會把最佳化實踐放在SEO 技術,而並沒有花太多時間關注到網站本身的架構。 而從我個人的理念來說,我們應該要先搞懂架構,所以這一期,讓我們來說網站架構吧。
Thumbnail
之前我們已經介紹兩個今年Google 新提出的網站性能基準, Largest Contentful Paint 最大內容繪製,和 First Input Delay 首次輸入延遲。這次就看看 Cumulative Layout Shift 累計版面配置轉移。
Thumbnail
之前我們已經介紹兩個今年Google 新提出的網站性能基準, Largest Contentful Paint 最大內容繪製,和 First Input Delay 首次輸入延遲。這次就看看 Cumulative Layout Shift 累計版面配置轉移。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News