iT邦幫忙

2023 iThome 鐵人賽

DAY 7
1

如果你是採取 CDN 載入 Master CSS 並開始使用,應該會發現在官方安裝的指引中,index.html 程式碼如下:

<head>
    ...  
    <link rel="stylesheet" href="https://cdn.master.co/normal.css@beta">
    <script src="https://cdn.master.co/css@beta"></script>
</head>

其中 head 中的 link,包含了下載 normal.css 這個 CSS 檔案,正如檔案名稱 normal(標準的、正規的),官方提供了一套預設的樣式,用以設定網頁中的全域樣式,主要目的在於消除與標準化各大瀏覽器 ChromeSafariFirefox 等及其使用的排版引擎(BlinkWebKitGecko 等)預設的樣式,讓大家的起跑點都是統一乾淨的,如同 Tailwind CSS 也有 Preflight 的基礎樣式,目的都是讓後續樣式的編排能更加的整潔一致。

下面將介紹幾個預設樣式,當然你也可以直接使用 normal.css,甚至不需要知道它背後的程式碼與行為,完整的 CSS 內容可以參考這裡

特徵和行為

幾何精度渲染更漂亮的文字

* {
    text-rendering: geometricPrecision;
}

抗鋸齒字體的絲滑感看起來更棒

body {
    -moz-osx-font-smoothing: grayscale;
    -webkit-font-smoothing: antialiased;
}

刪除行動裝置點擊時的背景顏色

body {
    -webkit-tap-highlight-color: transparent;
}

重置所有的邊框樣式

* {
    border: 0 solid;
}

刪除某些元素的邊距和填充

body, blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, button, optgroup, select, textarea, pre {
    margin: 0;
}
 
td, legend, textarea, input, fieldset {
    padding: 0;
}
 
ul, ol {
    margin: 0;
    padding: 0;
}

刪除某些元素的邊距和填充

body, blockquote, dl, dd, h1, h2, h3, h4, h5, h6, hr, figure, p, button, optgroup, select, textarea, pre {
    margin: 0;
}
 
td, legend, textarea, input, fieldset {
    padding: 0;
}
 
ul, ol {
    margin: 0;
    padding: 0;
}

統一盒子尺寸計算

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

中性排版和格式

body {
    line-height: 1.2;
    text-size-adjust: 100%;
    -webkit-text-size-adjust: 100%;
    -moz-text-size-adjust: 100%;
    -ms-text-size-adjust: 100%;
    -moz-tab-size: 4;
    tab-size: 4;
}
 
b, strong {
    font-weight: bolder;
}
 
small {
    font-size: 80%;
}
 
sub, sup {
    font-size: 75%;
    line-height: 0;
    position: relative;
    vertical-align: baseline;
}
 
sub {
    bottom: -0.25em;
}
 
sup {
    top: -0.5em;
}
 
ul {
    list-style: none;
}
 
hr {
    height: 0;
    color: inherit;
}

將預設一些元素預設為區塊

img, svg, video, canvas, audio, iframe, embed, object {
    display: block;
}

自訂全域樣式

你可能會想,那我想設置品牌的主體顏色、前景色,甚至是字體還需要再去編寫 CSS 檔案嗎?答案是不用,你可以在 <body class=""> 添加語法,透過繼承的行為或 CSS 選擇器,來設定全局樣式或旗下所有子元素的基礎樣式。

統一字體

你可以透過 CSS 的繼承行為來統一整個網頁的字體樣式 sans,包括標題、文字。

<body class="font:sans">

甚至結合選擇器,可以將網頁內的所有的 codepre 元素,套用 mono 字體。

<body class="font:sans font:mono_:where(code,pre)">

弱應用樣式(Weakly apply styles)

我們簡述一下前端工程師可能都具備概念,CSS 的特異性(Specificity),講得直接一點就是樣式權重,CSS 樣式有不同的選擇套用方法,也具有前後關係,樣式的權重間接影響了最終呈現的效果,它的規則與排序權重由高至低共有六種等級

  1. !important,至高無上不容侵犯
  2. 行內樣式(inline style
  3. ID 選擇器
  4. 類別選擇器(Class ) / 屬性選擇器(Attributes) / 偽類選擇器(pseudo-class
  5. 元素選擇器(elements)/ 偽元素選擇器(pseudo-class
  6. * 全域通用選擇器

因為樣式權重的關係,Master CSS 建議使用選擇元素和預設樣式,主要是其特異性為零。

舉例來說,你可以為 下所有 元素添加紅色下劃線:

<article class="text-decoration:underline|red|1.5_:where(a)">
    <a>我將擁有下劃線</a>
</article>

從今以後,你也不再需要聲明 !important,就可以輕易地刪除特定元素的下劃線

<article class="text-decoration:underline|red|1.5_:where(a)">
    <a class="text-decoration:none">我失去了下劃線</a>
    <a>我將擁有下劃線</a>
</article>

上一篇
Master CSS 類別語法突顯上色和語法自動完成提示的 VS Code 插件 - Master CSS Language Service
下一篇
Master CSS 樣式宣告的基本語法
系列文
下一代 CSS 解決方案:Master CSS 具增強語法的虛擬 CSS 語言30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言