綱要
Sass Meister 是個Sass/Scss的線上Playground,你可以將Sass語法寫在左邊,網頁會在你輸入完畢後自動在右邊產生編譯結果,Option中可以選擇編譯器要使用哪個版本,這邊我們演示的是dart-sass來幫助Debug。
課堂上日後會遇到更多一時之間無法釐清的編譯問題,所以老師建議每次上課都打開這個頁面來幫助你整理Code。
自從flexbox
出現後就徹底改變了以往動不動就得使用position
和float
排版的習慣,廣受推崇的理由便是它具有十足的彈性讓排版更容易上手。
此外,我們還可以透過align-items
和justify-content
來指定排列的規則,下方老師做了一個簡易速查表,可以自由替換。
實際上撰寫專案時,我們還會利用justify-content: space-between
等來均分子元素的間隔距離等操作,留待後面的專案練習再來實作一次吧,這次上課我們只稍微帶過就好。
flexbox 速查表:
抽象化的定義
所謂的抽象化就是不在函式中帶值,以純JS為例也就是像這樣:
雖然定義了一個函式,但我僅在執行階段才賦予值給它,取得最後運算的結果。
這個概念在撰寫Sass的時候佔有相當重要的位置,務必牢記。
@mixin
一組@mixin
對應一個@include
,事先將命名好的@mixin
定義屬性後並抽象化,再由@include
調用。
@extend
@extend
可以直接將寫好的CSS樣式直接沿用,省去要另外再寫的麻煩,我們看一下經過@extend
處理後的差別是什麼:
你會看見.new-container
和原先的.container
是一起被定義樣式的,實際上的用途便是減少你寫過多重複樣式。
兩者的整合示例
前面我們用很簡易的方式定義了容器的flex設定,現在來看看怎樣讓程式碼變得更有效率,使你的容器具有更多擴充的彈性:
當你需要的共通屬性越多,你也越能感受的到這樣做帶來的好處,因為只需要寫一次就可以沿用到不同的作用區上幫助你管理共通樣式,現在開始你也可以矯正以往的壞習慣,讓自己避免寫一堆垃圾Code,才不會使得前端工程師同事們對你拉警報。
你一定在某些網頁的原始碼上看過這樣的html寫法:
而且你還試圖去Google了程式碼中的data-panel-count
卻發現根本找不到任何解答對吧?正常,因為「data-」之後那串字都是我們工程師自己命名的你當然找不到!
data-attribute
原意是HTML5中提供給開發人員做選擇器之類的用途,不僅是Javascript可以任意調用,CSS也一樣可以:
因應這個彈性,我們就能建立一個當網頁元素需要微調時,能不修改原本樣式設定就能符合要求的共用模組,並且覆蓋原有的設置,這樣就可以避免為了迎合修改某一兩個參數而必須要犧牲掉你原本計畫好的共用樣式內容,也是我們這套課程比較推崇的方式。
主容器要叫.main-container
,側邊欄要叫.side-bar
,手機隱藏了側邊欄後還要顯示底部預先用media query藏好的.tab-bar
…設計師真的好忙。
我們重新思考一下容器的定義,其實你不用這麼累!
前面flexbox
就有提到排版核心概念的演進,以及類似共用組件的建構,假如你使用過Bootstrap之類的工具來製作網頁版型,那你應該很快就能理解命名太多容器,這麼做帶來的後續維護成本有多高。
前期什麼都是空白的,建立時都能因為設計師腦洞大開很迅速的切完一個網站,可是當你容器越來越多,命名也跟著越來越多,最後你連自己都不知道哪個容器是什麼特性了不是嗎?
所以老師建議大家使用組件化思考去解決這個情形,現在我們試著用最簡單的方式來處理一個橫向排列,且垂直置中的外觀:
以往我們很習慣的想到什麼就寫什麼,但實際上在多人開發環境當中我們並不能總是按自己的想法做事情,如果你想轉職前端,或者想改善設計師與工程師之間的隔閡,那最好從這堂課開始就去Review一下以往的Code,說不定你會有更多想法讓自己免於被Shit Code壓垮。
Scss
flexbox
data-attribute