本篇為隨筆紀錄,將看完的影片疏理為短小筆記 。
洧杰老師分享在 iT 邦幫忙的「CSS 階層效能優化建議」文章,
裡面摘要了影片的重點:
.wrap .header .menu ul li a
與 .menu a
對瀏覽器而言,第一步會將 DOM 樹狀結構和 CSSOM 樹狀結構合併成「轉譯樹狀結構」,讓這個結構不僅包含網頁上所有可見的 DOM 內容,同時也包含各個節點的 CSSOM 樣式資訊。
文獻閱讀:Render-tree Construction, Layout, and Paint
瀏覽器在解析 HTML、CSS 後會產出「DOM」和「CSSOM」,並且將 DOM 和 CSSOM 進行匹配,進而產出 Style,而後將網頁的畫布排版 Layout 架構出來,接著繪製畫面 Painting,將流程繪製如下圖:
因此若我們的階層複雜,則會在「DOM、CSSOM 匹配階段」影響效能。
文獻閱讀:Reduce the scope and complexity of style calculations
有發現到,從過去到未來,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。
<!-- 有排序的方式 -->
<div class"header container bg-dark mb3 pt-3">
或是專放 utilities 的元素:
<div class="px-6 pt-4 pb-2">
洧杰老師分享在 iT 邦幫忙的「由淺入深的 CSS 命名規則」文章。
如下圖,初學時會以下列的 .left
、.right
去為區塊命名:
但是這樣的命名方式會使可讀性較差,且當畫面大小為手機或 RWD 伸縮時,版面會變成一欄,也就沒有所謂的「左右,.left
、.right
之分了」,且也不符合語意了。
因此不建議以方向式「左右上下」來命名,例如:.footer-top
、.bottom
。
另一方面,也不適合以編號來命名,例:「.box1
、.box2
、.box7
....」等,這樣的命名方式在閱讀上較無法一目瞭然知道內容是什麼(且當與他人協作時,也會增加協作負擔),且當專案歷經時間洗滌,再回過頭來看時,也可能對當時的 .box1
、.box9
分別是什麼內容忘得一乾二凈了。
因此,建議在新手的練習階段,至少要以語意式命名,例如:「.header
、.menu
」,讓人理解該區塊的內容。
.left
、.right
等。.header
、.cartList
、.item
、.menu
.card
,Bootstrap 依照外觀樣子來設計元件名稱,這樣的命名方式使元件套用於任何地方都不會與畫面位置、檔案頁面有衝突,可抽換靈活使用。.index-btn
,放置於首頁內容時並無怪異之處。洧杰老師分享在 iT 邦幫忙的「從 CSS 標題設計判斷前端水平」文章。
以 h2 為例,初學時會對標籤選取器直接下樣式設計,以下為例:
h2{ font-size: 36px;}
然而這樣的做法會使全部的 h2 都吃到相同的樣式設定。
但若 h2 會在許多不同區塊、頁面重複使用,且樣式需求也不一樣的情境下,這樣的作法會使 h2 樣式難以覆蓋。
接續上面,以 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,我們下篇見 🙇🏻