重構不完全教程集之一
- 2019 年 12 月 4 日
- 筆記
本文作者:IMWeb 結一 原文出處:IMWeb社區 未經同意,禁止轉載
「無上甚深微妙法,百千萬劫難遭遇,我今見聞得受持,願解如來真實義。」 ——《開經偈》
html標籤
ie8- 不支援html5新增標籤,可通過引入js來實現:html5shiv
<!--[if lt IE 9]> <script src="http://cdn.staticfile.org/html5shiv/r29/html5.min.js"></script> <![endif]-->
或按實際使用手寫js兼容,document.createElement
<!--[if lt IE 9]> <script type="text/javascript"> document.createElement('header'); ... </script> <![endif]-->
最後重置下html5標籤的css默認樣式:
article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; }
css入門
盒模型

盒模型可通過box-sizing: border-box | content-box
設置,默認值為content-box
,ie8+支援。
- border-box表示設置的
width/height
包括padding
和border
- content-box表示不包括
padding
和border
- 不論是border-box還是content-box都不包括margin
- outline不影響盒子大小
對應上圖,如果是默認的話,則width為605px,如是border-box的話則為605+24+103+30=673px。
常配合百分比單位使用,尤其應用在移動端。如width:100%;padding:10px;
,如果不設置為border-box,則實際寬度為100%+40px,不符合我們的預期要求。
選擇器
css的選擇器是從後往前查詢,所以層級越深,效率越低,一般建議最多不超過4層。
css選擇器包括:通配符*
選擇器,class選擇器,id選擇器,元素選擇器,屬性選擇器,偽類選擇器,偽元素選擇器,最後
css選擇器權重原則:!important > 行內樣式 > id > 類/屬性/偽類 > 元素/偽元素;權重相同的按照樣式表中出現的順序,後面的覆蓋前面的
重置
瀏覽器都有自己的默認樣式,各個瀏覽器的默認樣式可參考:瀏覽器默認樣式參考指南
所以為了消除瀏覽器的默認樣式,以達到各個瀏覽器一致表現就出現了css重置,總得來說css重置分為歸零重置及糾正重置
- 歸零重置的代表為:Eric Meyer』s 「Reset CSS」 2.0
- 糾正重置代表為:normalize.css
如果你想省事的話直接引入normalize.css,然後再進行部分歸零重置;如果深入研究可以把兩個揉合一起,可參考sandal reset
屬性詳解
屬性大概分為下面幾類:
- 顯示:display,visibility,overflow等
- 位置:position,float,clear,z-index,transform等
- 大小:width,height,margin,padding,border,outline,box-sizing等
- 文字: font系列,color,text系列等
- 背景:background系列,gradient系列等
- 修飾:border-radius,box-shadow,opacity,appearance,filter,clip等
- 布局:flex,grid等
- 動畫:transition,animation等
從使用上大概分為兩類,一類是死板的(如設置文本顏色只能用color),一類是靈活的(如實現一個左邊欄固定的布局,可以使用的技術就多了)。相對來說可靈活使用的則更需要掌握各種實現方案的利弊
單位
- px:絕對單位,
- em:相對單位,相對於最近父級元素的font-size
- %:相對單位(padding/margin的百分比單位以width為基準)
- rem:相對單位,相對於根元素html的font-size,css3新增
- vw、vh、vmin、vmax:相對單位,相對於視窗寬/高,css3新增
- rem詳解
- vw
居中
包括水平及垂直居中,除了常規的水平居中text-algin:center
、margin-left:auto;margin-right:auto
和垂直居中vertical-align:middle
,line-height: height
(單行文字垂直的line-height等於height),還有postition方法,首先設置top:50%;left:50%
,再通過margin-left:-width/2;margin-top:-height/2
,或css3的transform: translate(-50%, -50%)
調整居中,最後還有為布局而生的flex
方法。另:對於img或video還有最新的object-position
來調整
布局
在flex出現之前,布局不外乎float,position,還有少量的inline-block及table;而現在有了flex和grid,更是如虎添翼。
- Learn CSS Layout,中文版學習css布局。一步步學習布局,適合入門
- 960網格布局:網格布局的開創者,知道原理其餘的各種網格布局也就沒問題了
- layout gala:強烈推薦,float布局精髓
- 深入了解flex
- flex完全指南:三大版本對比
- A guide to flexbox
- flexbox playground
z-index
- The stacking context,影響z-index的因素
- 深入理解CSS中的層疊上下文和層疊順序
- The Z-Index CSS Property: A Comprehensive Look,文章比較老,涉及到ie7-的一些z-index bug
line-height
- 深入理解CSS中的行高——簡版
- 深入理解css 行高——ppt詳細版
- css行高line-height的一些深入理解及應用
BFC
- MDN BFC,新建BFC的條件
- Understanding Block Formatting Contexts in CSS,中文版理解CSS中的塊級格式化上下文
- 關於Block Formatting Context--BFC和IE的hasLayout
- css 101: BFC
- 重提CSS中外邊距摺疊問題
CSS3 學習
- CSS3 files
- CSS3 Tutorials(包括gradient,transform,transition,animation,flexbox,mutilple background等)
兼容
瀏覽器兼容分為兩部分:瀏覽器是否支援;如何針對瀏覽器寫hack。支援情況可以通過can i use查詢,而針對各種瀏覽器寫hack可以使用browser hacks
註:該系列將會匯總在github上的重構優秀教程合集