搜尋

重置 CSS ( Reset CSS )

重置 CSS ( Reset CSS ) 可以清除 HTML 元素自帶的預設樣式,讓這些元素在不同瀏覽器中會有一致的顯示效果,甚至也可以讓整份 CSS 文件更加精簡,這篇教學會引導大家撰寫重置 CSS 的程式碼,並提供另外兩種常用的重置 CSS 方法。

請先閱讀:使用 Icon Font ( 圖示字體 )

快速導覽:

CSS 教學 - 重置 CSS ( Reset CSS )

認識重置 CSS ( Reset CSS )

HTML 為了讓編輯網頁時可以立刻看到效果,許多 HTML 元素會有「預設樣式」,但這些預設樣式在不同瀏覽器會有些微不同的呈現樣貌,因此往往不受網頁設計師青睞,所以一些 CSS 專家在撰寫正式的 CSS 之前,替元素加入一些樣式覆蓋預設樣式,達到在不同瀏覽器中或在不同排版狀況下,仍然會有一致的呈現結果,這就是「重置 CSS ( Reset CSS )」的由來,除了部分表單元素需要針對特定瀏覽器進行處理處理,大多數預設樣式都可透過標準的 CSS 覆蓋或重設樣式。

需要重置的 CSS 樣式

瀏覽器為了讓「沒有樣式」的網頁能夠正常顯示,各個元素除了預設樣式,瀏覽器還會額外替元素添加例如行高、間距、邊框等樣式,因為是瀏覽器所添加的預設值,所以部分樣式有可能會不同 ( 例如字體、行高等 ),下方會列出通常都需要重置 CSS 的樣式:

樣式 預設值
position 所有元素的預設都是 static
box-sizing 所有元素的預設都是 border-box
padding 採用瀏覽器預設值 ( 通常是 0 ),部分元素有自己的設定值,例如 lidd
margin 採用瀏覽器預設值 ( 通常是 0 ),部分元素有自己的設定值,例如 h1h6pul 等。
font-size 採用瀏覽器預設值 ( 通常是 16px ),部分元素有自己的設定值,並使用 em 為單位。
font-family 採用瀏覽器預設值 ( 系統字體 ),部分元素有自己的設定值,例如 precode 等。
line-height 採用瀏覽器預設值或字體設定值 ( 通常是 1.1~1.2 )。
border 採用瀏覽器預設值 ( 通常沒有邊框 ),部分元素有自己的設定值,例如 tabletdth

除了上述的樣式,HTML 的 inputbutton 等「表單」元素,各家瀏覽器會額外提供背景色、邊框、邊距、內距等獨立樣式,這些樣式有時還必須使用廠商開頭的特殊樣式屬性才能修改 ( 例如 -webkit--moz- ),因此在操作重置 CSS 也必須注意是否有更動到相關樣式,下方使用四種不同的瀏覽器開啟同一個網頁,網頁中從上而下分別是 h1h2h3inputbuttonselecttable,可以發現各家瀏覽器使用預設值看到的結果都不太相同,這也是為什麼需要重置 CSS 的原因。

CSS 教學 - 重置 CSS ( Reset CSS ) - 瀏覽器的預設樣式有所不同

撰寫自己的重置 CSS

理解各種 HTML 元素的預設值後,就可以開始撰寫「自己專屬」的重置 CSS,下方範例因為使用了重置 CSS,使用四種瀏覽器打開後,就會呈現較為一致的樣貌 ( 如果有他樣式就需要自行撰寫測試 ),需要注意不同的瀏覽器對於「表單元素」的樣式都有所不同,如果真的要完全一致,仍然必須多次測試

線上展示:https://codepen.io/oxxo/pen/qEBPQBM

<!-- HTML 程式碼 -->
<h1>Apple</h1>
<h2>Banana</h2>
<h3>OXXO</h3>
<h4>Orange</h4>
<form>
  <input name="user"> <button type="submit">送出</button> <button type="reset">清空</button>
</form>
<form>
  <select>
    <optgroup label="iPhone" multiple>
      <option value="14p">iPhone 14 Pro</option>
      <option value="14" selected>iPhone 14</option>
      <option value="13p" disabled>iPhone 13 Pro</option>
    </optgroup>
  </select>
</form>
<ul><li>apple</li><li>banana</li><li>cat</li></ul>
<table>
  <tr><td>a</td><td>b</td><td>c</td></tr>
  <tr><td>1</td><td>2</td><td>3</td></tr>
</table>

<!-- CSS 程式碼 -->
<style>
  /* font 相關樣式都有繼承特性,加上網頁元素使用 em 尺寸,只要寫在 html 裡就可以套用 */
  /* 因為表單元素本身自帶瀏覽器樣式,必須獨立撰寫覆蓋 */
  html, form, input, button, select, label, textarea {
    font-family: arial, sans-serif;
    font-size: 16px;
    line-height: 1.1;
  }
  /* margin、padding 等樣式沒有繼承特性,因此使用 * 讓網頁中所有元素都套用 */
  * {
    box-sizing: padding-box;
    position: relative;
    padding: 0;
    margin: 0;
  }
  /* 部分表單元素會使用瀏覽器樣式,需要獨立撰寫 */
  input, button, select {
    border: 1px solid #000;
    background: none;
  }
  /* 表格元素有其獨立樣式,需要獨立撰寫 */
  table {
    border-collapse: collapse;
    border-spacing: 0;
  }
  /* 清單元素有其獨立樣式,需要獨立撰寫 */
  ol, ul {
    list-style: none;
  }
</style>

CSS 教學 - 重置 CSS ( Reset CSS ) - 自己撰寫重置 CSS ( Reset CSS )

使用 Eric Meyer 版本重置 CSS

Eric Meyer 是知名「CSS 大全」書籍的作者,許多人也會套用其所撰寫的重置 CSS,下方程式碼為 Eric Meyer 的重置 CSS,但由於強制設定了文字尺寸,導致所有元素文字大小都相同,且並沒有針對表單元素進行設定,因此需要額外處理表單元素,使用時要特別注意。

參考:https://meyerweb.com/eric/tools/css/reset/

/* http://meyerweb.com/eric/tools/css/reset/ v2.0 | 20110126 License: none (public domain) */
html, body, div, span, applet, object, iframe, 
h1, h2, h3, h4, h5, h6, p, blockquote, pre, a, abbr, 
acronym, address, big, cite, code, del, dfn, em, img, 
ins, kbd, q, s, samp, small, strike, strong, sub, sup, 
tt, var, b, u, i, center, dl, dt, dd, ol, ul, li, fieldset, 
form, label, legend, table, caption, tbody, tfoot, thead, 
tr, th, td, article, aside, canvas, details, embed, figure, 
figcaption, footer, header, hgroup, menu, nav, output, 
ruby, section, summary, time, mark, audio, video {
  margin: 0;
  padding: 0;
  border: 0;          /* 需要 border 的元素需要額外設定 */
  font-size: 100%;    /* 標題元素就需要額外設定處理 */
  font: inherit;
  vertical-align: baseline;
}
/* HTML5 display-role reset for older browsers */
article, aside, details, figcaption, figure, footer, header, hgroup, menu, nav, section {
  display: block;
}
body {
  line-height: 1;
}
ol, ul {
  list-style: none;
}
blockquote, q {
    quotes: none;
}
blockquote:before, blockquote:after, q:before, q:after {
  content: '';
  content: none;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}

使用 normalize.css 重置 CSS

normalize.css 是另外頗具盛名的重置 CSS,內容主要是針對表單、特殊文字樣式進行重置,但整體太過針對特定文字樣式,使用時比較沒有「重置」的感受,仍然必須要自己轉寫許多樣式輔助。

參考:https://necolas.github.io/normalize.css/

/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */
html{
  line-height: 1.15;
  -webkit-text-size-adjust: 100%
}
body{ margin: 0;}
main{display: block;}
h1{
  font-size: 2em;
  margin: .67em 0;
}
hr{
  box-sizing: content-box;
  height: 0;
  overflow: visible;
}
pre{
  font-family: monospace,monospace;
  font-size: 1em
}
a{background-color:transparent}
abbr[title]{
  border-bottom: none;
  text-decoration: underline;
  text-decoration: underline dotted;
}
b,strong{font-weight: bolder}
code,kbd,samp{
  font-family: monospace,monospace;
  font-size: 1em;
}
small{font-size: 80%;}
sub,sup{
  font-size: 75%;
  line-height: 0;
  position: relative;
  vertical-align: baseline;
}
sub{bottom: -.25em;}
sup{top: -.5em;}
img{border-style: none;}
button,input,optgroup,select,textarea{
  font-family: inherit;
  font-size: 100%;
  line-height: 1.15;
  margin: 0;
}
button,input{overflow: visible;}
button,select{text-transform: none;}
[type=button],[type=reset],[type=submit],button{
  -webkit-appearance:button
}
[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{
  border-style:none;
  padding:0
}
[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline: 1px dotted ButtonText;}
fieldset{padding: .35em .75em .625em;}
legend{
  box-sizing: border-box;
  color: inherit;
  display: table;
  max-width: 100%;
  padding: 0;
  white-space: normal;
}
progress{vertical-align: baseline;}
textarea{overflow: auto;}
[type=checkbox],[type=radio]{
  box-sizing: border-box;
  padding: 0;
}
[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{
  height: auto;
}
[type=search]{
  -webkit-appearance: textfield;
  outline-offset: -2px
}
[type=search]::-webkit-search-decoration{
  -webkit-appearance: none
}
::-webkit-file-upload-button{
  -webkit-appearance: button;
  font: inherit;
}
details{display: block;}
summary{display: list-item;}
template{display: none;}
[hidden]{display: none;}
/*# sourceMappingURL=normalize.min.css.map */

小結

透過重置 CSS 的方式,可以讓重新設定網頁元素的預設樣式,也能讓後續開發跨瀏覽器的頁面樣式更為一致,不論使用哪種方法,都建議稍微了解元素本身的樣式,如此一來會更容易處理重置 CSS。

意見回饋

如果有任何建議或問題,可傳送「意見表單」給我,謝謝~

CSS 教學

基本介紹

認識 CSS 開始使用 CSS CSS 語法規則 CSS 命名原則 CSS 常用樣式屬性

CSS 選擇器

認識 CSS 選擇器 優先順序 ( 權重 ) 樣式繼承與聯集 使用巢狀結構語法 元素選擇器 ID 和 Class 選擇器 屬性選擇器 文件結構選擇器 虛擬類別選擇器 ( 結構 ) 虛擬類別選擇器 ( 類型 ) 虛擬類別選擇器 ( 輸入 ) 虛擬類別選擇器 ( 行為 ) 虛擬類別選擇器 ( 超連結 ) 虛擬類別選擇器 ( 邏輯 ) 虛擬類別選擇器 ( 其他 ) 虛擬元素選擇器 群組與組合選擇器

數值與單位

全域關鍵字與文字數值 長度與角度單位 位置名稱與時間單位 特殊樣式屬性 ( all、appearance)

規則與定義

變數 ( Variables ) 媒體查詢 ( @media ) 容器查詢 ( @container ) 自訂屬性值 ( @property ) 匯入樣式 ( @import ) 分層優先順序 ( @layer ) 定義字型 ( @font-face ) 計數規則 ( @counter-style ) 列印網頁 ( @page )

函式類型

數學計算 文字與清單計數 形狀與線段 路徑 ( path ) 生成內容與引號

顏色與濾鏡

顏色單位 色彩模型 漸層色 影像濾鏡 ( filter ) 背景濾鏡 ( backdrop-filter ) 混合模式 ( mix-blend-mode )

文字與段落

設定字型 ( font-family ) 使用外部字型 文字尺寸 文字樣式 ( 常用 ) 文字樣式 ( 其他實用 ) 文字樣式 ( 特殊用途 ) 文字換行 文字空白與 Tab 大小 文字行高與縮排 文字水平與垂直對齊 文字書寫方向 文字自動分欄 使用 Icon Font ( 圖示文字 ) 製作自己的 Icon Font

元素容器

容器顯示類型 ( display ) 元素 display 對照表 盒子模型 ( Box Model ) 寬高尺寸 內邊距 ( padding ) 外邊界 ( margin ) 邊框 ( border ) 邊框圓角 ( border-radius ) 影像邊框 ( border-image ) 輪廓 ( outline ) 內容溢出與裁切 ( overflow ) 內容範圍 ( contain ) 可見性與透明度

背景與陰影

背景 ( 背景色、背景裁切 ) 背景圖 ( 定位、尺寸 ) 背景圖 ( 固定、重複 ) 背景圖 ( 多重背景、混合 ) 背景縮寫 ( background ) 容器陰影 ( box-shadow )

清單與表格

清單樣式 清單計數器 表格基本樣式 表格邊框樣式 表格內容寬度與對齊

基本排版與定位

元素排版方式 浮動 ( float ) 浮動形狀 ( shape-* ) 定位 ( position ) 邏輯屬性 ( logical properties ) 重置 CSS ( Reset CSS ) 水平置中技巧 垂直置中技巧

Flex 彈性排版

Flexbox 彈性盒子 Flex 對齊方式 Flex 彈性伸縮

Grid 網格排版

Grid 網格容器與格線 Grid 網格空間與命名 Grid 網格流向與間距 Grid 排列網格項目 Grid 項目對齊與順序

轉場與動畫

轉場 ( transition ) 轉場觸發事件 動畫 ( animation ) 自訂動畫路徑 ( offset ) 動畫觸發事件 多重動畫的權重與順序 動畫進度控制 ( timeline )

變形、裁切與遮罩

裁切路徑 ( clip-path ) 影像遮罩 ( mask ) 物件填滿方式與定位 轉換函式 ( transform ) 平移、旋轉與縮放 3D 轉換與透視

視窗與使用者行為

捲軸樣式 ( scrollbar ) 拉霸、滑桿樣式 ( slider ) 滑鼠游標圖示 ( cursor ) 滑鼠事件 ( pointer-events ) 使用者選取 ( user-select ) 捲動行為 ( scroll、overscroll ) 列印換頁 ( break-* )

CSS 預處理器

認識 CSS 預處理器 Less ( 安裝、開始使用 ) Less ( 巢狀結構、選擇器 ) Less ( 變數、import ) Less ( Extend、Mixin ) Less ( 邏輯、迴圈、函式 )

範例效果

CSS 圓餅圖 CSS 跑馬燈 Google 載入動畫 漸層色的轉場與動畫 電子時鐘數字 不規則形狀動畫 彈跳的正方形動畫 3D 正多面體 超連結底線動畫效果 噁心黏黏球效果 漸層色製作星空背景 CSS 視差滾動效果 捲軸控制放射形選單 捲軸改變文字背景色 CSS 頁面捲動進度條 CSS 水波效果 圓點載入動畫 ( 陰影動畫 ) 字母翻牌效果 探照燈動畫 立體雙色跑馬燈 樓梯文字動態效果 漸層色文字、雙色文字 空心文字、文字水波背景