[前端]切版起手式 : 用 SCSS 自訂義全域樣式

更新於 2024/12/02閱讀時間約 8 分鐘

我在準備進入切版的第一步通常會是設定好全域樣式,以及整理出有哪些共用樣式,也就是把設計稿上規範好的設計系統,例如顏色、間距、字體等等先寫好 CSS,而我自從會 SCSS 後就習慣用這個方式去寫 CSS,透過分成不同檔案、依序載入,日後在修改跟維護上會比較好管理跟減少時間。

視專案大小或需求,決定是否要引入 Bootstrap、tailwind 等框架,單純一點的專案可能自己寫就可以滿足需求。這篇紀錄的是不套用框架,我自己在開版時習慣的步驟與內容,這些內容也會隨著我的經驗隨之調整,同時也歡迎留下你的經驗或看法 !!



步驟一 : 引入 reset.scss

每一個 HTML 標籤元素都有 CSS 預設值,例如預設的margin 、padding …等,這些預設的 CSS ,有些會為網頁設計師做 CSS 排版時帶來不便,所以通常第一步是清除這些預設值,這邊筆者常用的是 meyerweb.com,複製程式碼到專案裡就完成了!

想了解更多可以參考 [第七週] CSS — 起手式及常被問到的問題 這篇文章~


步驟二 : base.scss 放入全站設定

新增 _base.scss 檔案,放入一些全站設定,例如字體、1rem 的大小等,這裡其實因人而異,沒有一定,筆者這邊先放上自己常用的給予參考

*,
*::before,
*::after {
box-sizing: border-box;
}

html {
font-size: 16px;
}

body {
//字型名稱之間如果有空格的話需要用引號包起來,若是中文字型建議用英文名子呈現
// ex.微軟正黑體改成 "Microsoft JhengHei"
font-family: 'Noto Sans TC',
sans-serif; font-size: 1rem; // 16px
line-height: 150%;
}

// img RWD
img {
max-width: 100%;
height: auto;
display: block;
}

// a連結
a {
display: block; text-decoration: none;
}

// sub 因為 css reset 會取消 sub 的樣式
sub {
vertical-align: sub;
}

// container
.container {
max-width: 1120px; //可以自訂義寬度,詳請請見*註一
margin: 0 auto;
padding-left: 16px;
padding-right: 16px;
}

@media screen and (max-width: 376px) {
.container {
max-width: 355px;
margin: 0 auto;
padding-left: 10px;
padding-right: 10px;
}
}

註一 : 在寬度的設定上,瀏覽器的總寬度通常為裝置比例高的 1920px 或 1440px,
但內容寬度不要同樣設成 1920px 或 1440px,可以設定為 1220px 或參考 bootstrap 的
container 寬度 (max-width:1220px),讓容器寬度是一個讓眼睛舒服瀏覽的寬度。​

header 或 footer 若希望是滿版的背景,可以直接在 div 設定 background ,
不用寫 width=100%,因為 div 本身會自適應寬度。


步驟三 : variables.scss 放入共通樣式

新增 _base.scss 檔案,放共通樣式,例如主顏色、次顏色、間距等等。

以下為範例,實際數值需要視每個專案的設計喔。


// scss-docs-start theme-color-variables
$primary: #56C4C5;
$secondary: #FF5D50;
$black: #221E1F;
$white: #FFFFFF;
$gray: #F5F5F5;

// scss-docs-end theme-color-variables
// scss-docs-start box-shadow-variables
$box-shadow: 0px 2px 10px #00000014;

// scss-docs-end box-shadow-variables
$component-active-color: $white ;
$component-active-bg: $primary ;

// stylelint-disable value-keyword-case
$font-family-sans-serif: system-ui, -apple-system, "Segoe UI", Roboto, "Helvetica Neue", "Noto Sans", "Liberation Sans", Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"
;
$font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace !default;
$font-weight-regular: 400;
$font-weight-bold: 700;
$font-size-base: 4px;
$font-m: $font-size-base* 4;//預設字型大小
$h1-font-size: $font-size-base * 1 ;
$h2-font-size: $font-size-base * 12; //48px
$h3-font-size: $font-size-base * 8 ; //32px
$h4-font-size: $font-size-base * 6 ; //24px
$h5-font-size: $font-size-base * 5; //20px
$h6-font-size: $font-size-base * 4.5 ; //18px
$line-height-base: 1.5;


步驟四 : layout.scss 布局管理

這邊的樣式專門設定每一個頁面都有的布局 ex. header footer 等

這邊有個建議作法是在命名 class name 時,可以用個前贅詞示意此為 layout 。

ex. .l-list(O) bookList(X)


步驟五 :module 放入模組化內容

也等同 componets,命名方式可以參考 bootstrap

例如一個按鈕可區分為 :

.btn : 容器相關css

.btn-primary : 樣式相關 css

.btn-lg : 尺寸相關 css

這個概念來自於使用 OOCSS 讓容器與內容分離,未來比較好擴充與維護唷!




以上步驟比較偏向於個人實際做法,非絕對~實際狀況會依每個人工作習慣以及專案而有不同。想了解更多可以再參考以下文章~

使用 @import 讓你 Sass 切分檔案、維護管理更方便!

Sass 的 @import 功能,如何讓scss檔分門別類的管理



謝謝收看 🎉

avatar-img
3會員
21內容數
一位會切版的 UI 設計師, 以介面設計為錨,朝向 UX 、產品思維、數據思維前進。 喜歡透過書探索世界、看見自己。 著迷文字與內心產生共鳴的瞬間, 喜愛哲學、小說、心理、創造力, 喜愛將所思所想落地變成文字。
留言0
查看全部
avatar-img
發表第一個留言支持創作者!
YJ 的沙龍 的其他內容
使用 SCSS 來管理 CSS 可以說是每次建置專案的起手式了,加上很常搭配客製化 Bootstrap 來開發,因此決定記錄下引入過程、遇到的錯誤訊息與解決辦法,以節省日後建置時間,如果對你也有幫助,那就太好了。
在專案建置的過程中引入 Bootstrap 並且客製化其樣式已是非常常見的事,並且隨著對 Bootstrap 以及 Sass 了解的加深,發現客製化的幅度可以非常的大跟彈性,因此想記錄這些研究與實作的過程,如果對你也有幫助,那就太好了。
這篇文章更偏向純紀錄性質,方便日後有需要時直接複製相同指令來完成 Bootstrap 與 Sass 的引入,也會做成一個專案起手式的模板放在 Github ,未來在建置新專案時可以透過直接複製專案,來省去前面重複的這過程。
為甚麼寫這邊文章? 這是 2022 年參加六角學院舉辦的公益程式體驗營而生產的系列筆記,整理課程講義、上課筆記與小組討論等文件,內容多為老師與各路大神的精華,只是透過自己的分類方式再次整理,方便日後有需要時快速回顧與應用。
在參加 2022 年六角學院舉辦的公益程式體驗營之後,我認知到一個專業具有就職水準的切版能力不是只是會 html、css 以及一些 css framework 就足夠,魔鬼藏在細節裡,而我想要朝專業級前進。 文章節錄當時的檢核點,作為日後開發的 check list。
使用 SCSS 來管理 CSS 可以說是每次建置專案的起手式了,加上很常搭配客製化 Bootstrap 來開發,因此決定記錄下引入過程、遇到的錯誤訊息與解決辦法,以節省日後建置時間,如果對你也有幫助,那就太好了。
在專案建置的過程中引入 Bootstrap 並且客製化其樣式已是非常常見的事,並且隨著對 Bootstrap 以及 Sass 了解的加深,發現客製化的幅度可以非常的大跟彈性,因此想記錄這些研究與實作的過程,如果對你也有幫助,那就太好了。
這篇文章更偏向純紀錄性質,方便日後有需要時直接複製相同指令來完成 Bootstrap 與 Sass 的引入,也會做成一個專案起手式的模板放在 Github ,未來在建置新專案時可以透過直接複製專案,來省去前面重複的這過程。
為甚麼寫這邊文章? 這是 2022 年參加六角學院舉辦的公益程式體驗營而生產的系列筆記,整理課程講義、上課筆記與小組討論等文件,內容多為老師與各路大神的精華,只是透過自己的分類方式再次整理,方便日後有需要時快速回顧與應用。
在參加 2022 年六角學院舉辦的公益程式體驗營之後,我認知到一個專業具有就職水準的切版能力不是只是會 html、css 以及一些 css framework 就足夠,魔鬼藏在細節裡,而我想要朝專業級前進。 文章節錄當時的檢核點,作為日後開發的 check list。
你可能也想看
Google News 追蹤
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
JavaScript 提供了兩個非常有用的定時器:setTimeout 和 setInterval,這兩個定時器可以幫助我們輕鬆地控制時間和程式的執行。
Thumbnail
在 JavaScript ES6 之前,JavaScript 的函式主要是使用 function 關鍵字來定義的。而箭頭函式是 JavaScript ES6 中新增的功能,它提供了一種更簡潔的方式來定義函式。
Thumbnail
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
自己在剛開始進入前端領域時,很剛好遇上需要使用 TypeScript 的案子,一開始都是跟著前輩怎麼寫就怎麼寫,不太有其他餘力來思考「為什麼」會需要寫這門程式語言,直到自己後來使用了 TypeScript 完整開發了電商的購物流程,才慢慢理解到使用 TypeScript 的好處與優勢。
Thumbnail
*合作聲明與警語: 本文係由國泰世華銀行邀稿。 證券服務係由國泰世華銀行辦理共同行銷證券經紀開戶業務,定期定額(股)服務由國泰綜合證券提供。   剛出社會的時候,很常在各種 Podcast 或 YouTube 甚至是在朋友間聊天,都會聽到各種市場動態、理財話題,像是:聯準會降息或是近期哪些科
Thumbnail
JavaScript 提供了兩個非常有用的定時器:setTimeout 和 setInterval,這兩個定時器可以幫助我們輕鬆地控制時間和程式的執行。
Thumbnail
在 JavaScript ES6 之前,JavaScript 的函式主要是使用 function 關鍵字來定義的。而箭頭函式是 JavaScript ES6 中新增的功能,它提供了一種更簡潔的方式來定義函式。
Thumbnail
說到 HTML 元素的換行效果,在前端有滿多種實作方式的最常見的方式是使用 <br /> 這個 HTML 元素來進行換行 ⋯⋯
Thumbnail
自己在剛開始進入前端領域時,很剛好遇上需要使用 TypeScript 的案子,一開始都是跟著前輩怎麼寫就怎麼寫,不太有其他餘力來思考「為什麼」會需要寫這門程式語言,直到自己後來使用了 TypeScript 完整開發了電商的購物流程,才慢慢理解到使用 TypeScript 的好處與優勢。