瀏覽器 | 渲染引擎 | JavaScript引擎 |
---|---|---|
IE | Trident | JScript |
Edge | EdgeHTML | Chakra |
Safari | Webkit | Nitro |
Chrome | Blink | V8 |
FireFox | Gecko | SpiderMonkey |
Opera | Prasto -> blink | Carakan -> V8 |
360瀏覽器css
UC瀏覽器html
QQ瀏覽器web
搜狗瀏覽器算法
HyperText Markup Languagecanvas
使用標籤
來描述頁面的內容
和結構
瀏覽器
指定頁面的使用標準和版本ide
決定使用哪一種渲染模式
佈局
Quirks Mode (怪異模式)字體
Almost standard Mode (標準準模式)優化
Standard Mode (標準模式)
注意: 若是當咱們不指定Doctype時,IE六、IE7會採用怪異模式渲染頁面,IE8以標準模式渲染頁面,firefox11也是以標準模式渲染頁面。
兼容已有內容
避免沒必要要的複雜性
解決現實問題
優雅降級
尊重事實標準
Doctype、meta
新增語義化標籤
去除純表示性的標籤
WebStorage、canvas、video、audio、拖拽、離線
標籤不區分大小寫、推薦小寫
空標籤能夠不閉合
屬性沒必要引號。推薦雙引號
某些屬性值能夠省略,如required、readonly
不指定高寬:原圖大小顯示
指定寬度:按比例縮放到指定寬度
指定高度:按比例縮放到指定高度
指定高寬:強制按照指定高寬顯示
jpg:照片
png:色彩較少時使用,png24能夠半透明
gif:沒法半透明,能夠多幀作動畫
WebP
注意: WebP 的優點體如今它具備更優的圖像數據壓縮算法,能帶來更小的圖片體積,並且擁有肉眼識別無差別的圖像質量;同時具有了無損和有損的壓縮模式、Alpha 透明以及動畫的特性,在 JPEG 和 PNG 上的轉化效果都很是優秀、穩定和統一。更多...
提高代碼的可讀性、可維護性
搜索引擎的優化(利於SEO)
提高無障礙性
通配選擇器 *
標籤選擇器 p
id選擇器 #id
類選擇器 .class
[attr]
只使用屬性名,但沒有肯定任何屬性值;
[attr="value"]
指定屬性名,並指定了該屬性的屬性值;
[attr~="value"]
指定屬性名,而且具備屬性值,此屬性值是一個詞列表以空格隔開,其中詞列表中包含了一個value;
[attr^="value"]
指定了屬性名,而且有屬性值,屬性值以value開頭;
[attr$="value"]
指定了屬性名,而且有屬性值,並且屬性值以value結尾;
[attr*="value"]
指定了屬性名,而且有屬性值,並且屬值中包含value;
[attr|="value"]
指定了屬性名,而且屬性值是value或者以「value-」開頭的值;
基於 DOM 以外的信息去(好比根據用戶和網頁的交互狀態)選擇元素。
a:link { ... } /* 未訪問過的連接 */ a:visited { ... } /* 已訪問過的連接 */ a:hover { ... } /* 鼠標移到連接上的樣式 */ a:active { ... } /* 鼠標在鏈接上按下時的樣式 */ a:focus { ... } /* 得到焦點時的樣式 */
直接組合
E[foo="bar"] E.warning E#myid #myid.warning .warning[foo="bar"]
後代組合
/* 後代選擇器 */ article p {...} /* 親子選擇器 */ article > p {...}
相鄰兄弟
input[type="check"] + label {...}
通用兄弟
.active ~ li {...} /* 選擇全部兄弟 */
同時爲一組選擇器定義樣式
body, h1, h2, h3, h4, h5, h6, ul, ol, li { margin: 0; padding: 0; } [type="checkbox"], [type="radio"] { box-sizing: border-box; padding: 0; }
根據特異度判斷(Specificity)
選擇器 | 內聯? | id個數 | (僞)類個數 | 標籤個數 | 特異度 |
---|---|---|---|---|---|
#nav .list li a:link | 0 | 1 | 2 | 2 | 0122 |
.hd ul.links a | 0 | 0 | 2 | 2 | 0022 |
哪條聲明起做用?
找出匹配到的該屬性全部聲明
根據規則來源,優先級從低到高:
瀏覽器預設
用戶設置
網頁樣式
同一來源中,按照特異度排序,越特殊優先級越高
特異度同樣時,按照樣式書寫順序,後面的優先級高
有 !important 時的變化
找出匹配到的該屬性全部聲明
根據規則來源, 優先級從低到高:
瀏覽器預設
用戶設置
網頁樣式
含 !important 的網頁樣式
含 !important 的用戶設置樣式
同一來源中,按照特異度排序,越特殊優先級越高
特異度同樣時,按照樣式書寫順序,後面的優先級高
可繼承
使用逗號分隔的字體族名稱
初始值由瀏覽器設置決定,可繼承
瀏覽器先獲取一個系統字體列表
對於元素中每個字符,使用 font-family 屬性及其它屬性進行匹配,若是能匹配就暫定該字體
若是步驟2沒有匹配上,選擇下一個可選的 font-family 執行步驟2
若是匹配到一個字體,可是字體中沒有該字符,繼續對下一個可選的 font-family 執行步驟2
若是沒有匹配到字體,使用瀏覽器默認字體。
英文字體放在中文字體前面
最後老是添加通用字體族
定義文字的大小,可以使用px、百分比、em等作單位
取值
絕對值 xx-small | x-small | small | medium | large | x-large | xx-large
相對值 larger | smaller
長度
百分數,相對於父元素計算值
初始值爲 medium(由瀏覽器設置決定,通常16px),可繼承
通常是相對於元素 font-size 的計算值的
用在 font-size 屬性上時,是相對於父元素的 font-size 計算值
定義文字以斜體仍是正常方式顯示
取值:normal | italic | oblique
初始值爲 normal,可繼承
定義文字的粗細程度
取值:normal | bold | bolder | lighter | 100 | 200 | ... | 900
初始值爲 normal,可繼承
元素所屬的 line box 所佔高度
初始值爲normal(具體值由瀏覽器決定),可繼承
取值:<長度> | <數字> | <百分比>
段落文字通常取值1.4~1.8
line-height:26px; 表示行高爲26個像素
line-heigth:120%;表示行高爲當前字體大小的120%
line-height:2.6em; 表示行高爲當前字體大小的2.6倍
帶單位的行高都有繼承性,其子元素繼承的是計算值,如父元素的字體大小爲14px,定義行高line-height:2em;則計算值爲 28px,不會因其子元素改變字體尺寸而改變行高。(例如:父元素14px,子元素12px,那麼行高就是28px,子元素雖然字體是12,行高仍是父元素的行高)
line-height:2.6;表示行高爲當前字體大小的2.6倍
不帶單位的行高是直接繼承,而不是計算值,如父元素字體尺寸爲14px,行高line-height:2;他的行高爲28px;子元素尺寸爲12px,不須要再定義行高,他默認的行高爲24px。(例如:子元素12px,他的行高是24,不會繼承父元素的28)
定義文本在容器內的對齊方式
取值:left | right | center | justify
初始值由 HTML 的 dir 屬性決定,可繼承
指定字符之間的間距
取值:normal | <length>
初始值爲 normal,可繼承
指定單詞之間的間距
取值:normal | <length>
初始值爲 normal,可繼承
指定文本縮進
取值:normal | <length> | <percentage>
初始值爲 0,可繼承
定義了文本的一些裝飾效果,好比下劃線、刪除線等
初始值爲none,可繼承
其它值:underline | line-through | overline
指定空白符如何處理
取值:normal | nowrap | pre
指定是否容許在單詞中間換行
取值: normal | break-all | keep-all
width的值爲百分比時,參考的是父元素盒子的width;
height的值爲百分比時,參考的是父元素盒子的height;
padding的值爲百分比時,參考的是父元素的width;
margin的值爲百分比時,參考的是父元素的width;
會被格式化成塊狀的元素
例如 p、div、section 等
將 display 設置爲 block、list-item、table 使元素變爲塊級
不會爲其內容生成塊級框
讓其內容分佈在多行中
display 設置爲 inline、inline-block、inline-table 使元素變爲行級
margin:行級盒的 margin-top 和 margin-bottom 不會產生效果
padding:行級盒的 padding-top 和 padding-top 不影響行佈局
塊級盒子中能夠包含多個子塊級盒子
能夠包含多個行級盒子
不在行級元素裏面的文字,會生成匿名行級盒。好比:
<p>Some<em>Text</em></p>
塊級盒子中不能同時包含塊級和行級盒子。遇到這種狀況時,會生成匿名塊級盒來包含行級盒。好比:
<div><h1>標題</h1><span>2016-12-12</span></div>
行級盒子內能夠包含行級盒子
行級盒子包含一個塊級盒子時,會被塊級盒子拆成兩個行級盒子,這兩個盒子又分別被匿名塊級盒包含
常規流(Normal Flow)
浮動(Float)
絕對定位(Absolute Positioning)
除根元素、浮動元素和絕對定位元素外,其它元素都在常規流以內(in-flow)
而根元素、 浮動和絕對定位的元素會脫離常規流(out of flow)
常規流中的盒子,屬於塊級格式化上下文或行級格式化上下文
盒子在容器(包含塊)內從上到下一個接一個地放置
兩個兄弟盒之間的豎直距離由 margin 屬性決定
同一個 BFC 內垂直 margin 會合並
盒子的左外邊緣挨着容器(包含塊)的左邊
塊級格式化上下文(BFC) 的特性:
BFC 內的浮動不會影響到BFC外部的元素
BFC 的高度會包含其內的浮動元素
BFC 不會和浮動元素重疊
BFC 能夠經過 overflow:hidden 等方法建立
BFC 的建立:
浮動框
絕對定位框
非塊級的塊容器(inline-block)
overflow 屬性非 visible 的塊框
BFC的做用:
清除浮動
防止 margin 摺疊
雙欄佈局
盒子一個接一個水平放置
盒之間的水平 margin,border和padding 都有效
同一行的盒子所在的矩形區域叫行盒(Line box)
當一個行盒放不下上下文內全部盒子時,會被分到多個垂直堆疊的行盒裏
行盒內的水平分佈由'text-align'屬性決定
若是一個行級塊沒法分割(單詞、inline-block),該元素會被做爲一個總體決定分佈在哪個行盒
浮動元素從常規流中脫離,被漂浮在容器(包含塊)左邊或右邊
浮動盒會一直漂到其外邊緣捱到容器邊緣或另外的浮動盒
浮動元素不會影響其後面的流內塊級盒
可是浮動元素後面的行級盒子會變短以避開浮動元素
static,非定位,默認值
relative,相對定位(相對本身)
absolute,絕對定位,相對非 static 祖先元素定位
fixed,相對於視口絕對定位
在常規流裏面佈局
相對於本身本應該在的位置進行偏移
使用 top、left、bottom、right 設置偏移長度
流內其它元素當它沒有偏移同樣佈局
脫離正常流
相對於最近的非 static 祖先的 padding box 定位
不會對流內元素佈局形成影響
能夠有 margin,但不會摺疊
相對於 Viewport 定位
不會隨頁面滾動發生位置變化
爲定位元素指定其在 z 軸的上下等級
用一個整數表示,數值越大,越靠近用戶
初始值爲 auto,能夠爲負數、0、正數
注意: z-index大的不必定在上面,要考慮到
層疊上下文
關於層疊上下文
Root 元素
z-index 值不爲 auto 的定位元素
設置了某些 CSS3 屬性的元素,好比 opacity、transform、animation 等
在每個堆疊上下文中,從下到上:
造成該上下文的元素的 border 和 background
z-index 爲負值的子堆疊上下文
常規流內的塊級元素非浮動子元素
非定位的浮動元素
常規流內非定位行級元素
z-index 爲 0 的子元素或子堆疊上下文
z-index 爲正數的子堆疊上下文