摘要:前言上一章節(jié)介紹了的歷史,最后對(duì)做了簡(jiǎn)單的了解,所以從這節(jié)開始對(duì)源碼進(jìn)行注釋翻譯與解讀,盡可能從最根本性的問題了解它在幫我們做什么回顧關(guān)于那些事一之歷史演變與源碼解讀前面講到的分模塊解讀,就是先黏貼一段源碼,然后根據(jù)官方提供的注釋進(jìn)行翻譯整
前言
上一章節(jié)介紹了CSS Reset的歷史,最后對(duì)Normalize.css做了簡(jiǎn)單的了解,所以從這節(jié)開始對(duì)源碼進(jìn)行注釋翻譯與解讀,盡可能從最根本性的問題了解它在幫我們做什么?
回顧:關(guān)于CSS Reset 那些事(一)之 歷史演變與Normalize.css
Normalize 源碼解讀前面講到的分模塊解讀,就是先黏貼一段源碼,然后根據(jù)官方提供的注釋進(jìn)行翻譯整理,盡可能提供案例解析,然后再次進(jìn)行整理總結(jié),如果你有疑問,可以留言一起交流。
源碼地址:https://github.com/necolas/normalize.css/blob/master/normalize.css
源碼版本:v3.0.3
/** * 1. Set default font family to sans-serif. * 2. Prevent iOS and IE text size adjust after device orientation change, * without disabling user zoom. */ html { font-family: sans-serif; /* 1 */ -ms-text-size-adjust: 100%; /* 2 */ -webkit-text-size-adjust: 100%; /* 2 */ }
設(shè)置全局的字體為sans-serif,關(guān)于中文字體的設(shè)置可參考 Amaze UI
防止 iOS 橫屏字號(hào)放大,同時(shí)保證在PC上 zoom 功能正常
第2個(gè)問題場(chǎng)景是這樣,蘋果IOS設(shè)備調(diào)整后會(huì)自動(dòng)調(diào)整文字的大小,按照蘋果的意圖是為了提升用戶體驗(yàn),比如豎屏狀態(tài)下是14px,轉(zhuǎn)換為橫屏?xí)r就變成了20px,把text-size-adjust:100%就不會(huì)調(diào)整字體大小了。
如果把值設(shè)置為"text-size-adjust:none",那么就會(huì)導(dǎo)致用戶無法放大縮小字體了。
/** * Remove default margin. */ body { margin: 0; }
修復(fù)瀏覽器默認(rèn)邊距,統(tǒng)一效果
HTML5 元素 display definitions/** * Correct `block` display not defined for any HTML5 element in IE 8/9. * Correct `block` display not defined for `details` or `summary` in IE 10/11 * and Firefox. * Correct `block` display not defined for `main` in IE 11. */ article, aside, details, figcaption, figure, footer, header, hgroup, main, menu, nav, section, summary { display: block; }
修復(fù) IE 8/9,HTML5新元素不能正確顯示的問題,定義為block的元素
修復(fù) IE 10/11,details 和 summary 定義為 block 的元素
修復(fù) IE 11,main定義為 block 的元素
這個(gè)問題想必大家都已經(jīng)非常清楚,當(dāng)?shù)桶姹緸g覽器遇到不識(shí)別的元素時(shí),會(huì)默認(rèn)把他們當(dāng)成內(nèi)聯(lián)元素(inline),這里重新定義成為block元素。
/** * 1. Correct `inline-block` display not defined in IE 8/9. * 2. Normalize vertical alignment of `progress` in Chrome, Firefox, and Opera. */ audio, canvas, progress, video { display: inline-block; /* 1 */ vertical-align: baseline; /* 2 */ }
修復(fù) IE 8/9,HTML5新元素不能正確顯示的問題,定義為inline-block元素
修復(fù)Chrome, Firefox, 和Opera的progress元素沒有以baseline垂直對(duì)齊
progress是HTML5的新標(biāo)簽,可以定義進(jìn)度條,但是它Chrome, Firefox, 和Opera并沒有已baseline垂直對(duì)齊。
/** * Prevent modern browsers from displaying `audio` without controls. * Remove excess height in iOS 5 devices. */ audio:not([controls]) { display: none; height: 0; }
對(duì)不支持controls屬性的瀏覽器,audio元素給以隱藏
移除iOS5設(shè)備中多余的高度
在IE8之前的瀏覽器是不支持controls屬性,這里的辦法是直接隱藏該元素
/** * Address `[hidden]` styling not present in IE 8/9/10. * Hide the `template` element in IE 8/9/10/11, Safari, and Firefox < 22. */ [hidden], template { display: none; }
修復(fù) IE 7/8/9,F(xiàn)irefox 3 和 Safari 4 中hidden屬性不起作用的問題
在 IE,Safari,F(xiàn)irefox 22- 中隱藏template元素
template標(biāo)簽用于HTML模板,大家應(yīng)該都是用過HTML模版開發(fā)頁面,這個(gè)標(biāo)簽是按照實(shí)際需求添加的,但是模板又不能在界面上顯示,所以這里統(tǒng)一了樣式,兼容舊瀏覽器。
鏈接 Links/** * Remove the gray background color from active links in IE 10. */ a { background-color: transparent; }
去掉 IE 10+ 點(diǎn)擊鏈接時(shí)的灰色背景
/** * Improve readability of focused elements when they are also in an * active/hover state. */ a:active, a:hover { outline: 0; }
去掉點(diǎn)擊時(shí)的outline焦點(diǎn)框,同時(shí)保證使用鍵盤可以顯示焦點(diǎn)框,這個(gè)操作針對(duì)所有瀏覽器
語義化文本標(biāo)簽 Text-level semantics/** * Address styling not present in IE 8/9/10/11, Safari, and Chrome. */ abbr[title] { border-bottom: 1px dotted; }
修正abbr元素在 Firefox 外其他瀏覽器沒有下劃線的問題
語義abbr標(biāo)簽是表示簡(jiǎn)稱或縮寫,自身的title屬性是完整版,但是此標(biāo)簽在Firefox下默認(rèn)有下邊框,而其他瀏覽器中沒有,這里統(tǒng)一了樣式。
/** * Address style set to `bolder` in Firefox 4+, Safari, and Chrome. */ b, strong { font-weight: bold; }
Firefox3+,Safari4/5 和 Chrome 中統(tǒng)一設(shè)置為粗體
Firefox 3+, Safari 和 Chrome 給b和strong設(shè)置的屬性是bolder,而不是bold,這里統(tǒng)一了樣式。
/** * Address styling not present in Safari and Chrome. */ dfn { font-style: italic; }
修正 Safari5 和 Chrome 中沒有樣式的問題
dfn 標(biāo)簽可標(biāo)記那些對(duì)特殊術(shù)語或短語的定義,在Safari 和Chrome 里不是斜體,在這里統(tǒng)一了樣式。
/** * Address variable `h1` font-size and margin within `section` and `article` * contexts in Firefox 4+, Safari, and Chrome. */ h1 { font-size: 2em; margin: 0.67em 0; }
修復(fù) Firefox 4+,Safari 5 和 Chrome 中section和article內(nèi)的h1字體大小
/** * Address styling not present in IE 8/9. */ mark { background: #ff0; color: #000; }
修復(fù) IE 6/9, Safari 5 和 Chrome中樣式不呈現(xiàn)的問題
mark標(biāo)簽用來突出顯示部分文本,設(shè)置后會(huì)有一個(gè)高亮背景,但是此標(biāo)簽是HTML5中的新標(biāo)簽,在低版本瀏覽器并不識(shí)別,所以需要重置樣式。
/** * Address inconsistent and variable font size in all browsers. */ small { font-size: 80%; }
在所有瀏覽器中統(tǒng)一small的字體大小
small標(biāo)簽在 HTML 4.01 就已經(jīng)存在,HTML5 中增強(qiáng)了它的寓意,表示旁注信息,不過此標(biāo)簽在各個(gè)瀏覽器中呈現(xiàn)的字體大小不一樣,在這里做了統(tǒng)一
/** * Prevent `sub` and `sup` affecting `line-height` in all browsers. */ sub, sup { font-size: 75%; line-height: 0; position: relative; vertical-align: baseline; } sup { top: -0.5em; } sub { bottom: -0.25em; }
防止所有瀏覽器中的sub和sup影響行高
sup和sub兩個(gè)標(biāo)簽是用來表示上標(biāo)和下標(biāo),據(jù)HTML標(biāo)準(zhǔn)中對(duì)small,sub和sup的大小要求都是smaller,但是如上所示normalize.css給small設(shè)的是80%,而sub和sup卻是75%,所以為了保持一致,且不影響其他元素的行高,把兩者的line-height設(shè)為0,然后設(shè)置它的垂直以baseline開始,設(shè)置top和bottom手動(dòng)設(shè)置兩者偏移量
內(nèi)嵌元素 Embedded content/** * Remove border when inside `a` element in IE 8/9/10. */ img { border: 0; }
去除 IE6-9 和 Firefox 3 中a內(nèi)部img元素默認(rèn)的邊框
在舊版本的瀏覽器中,圖片默認(rèn)會(huì)有一個(gè)奇丑無比的藍(lán)色邊框,這這里進(jìn)行清除,統(tǒng)一樣式。
/** * Correct overflow not hidden in IE 9/10/11. */ svg:not(:root) { overflow: hidden; }
修復(fù) IE9 中的overflow的怪異表現(xiàn)
群組元素 Grouping content/** * Address margin not present in IE 8/9 and Safari. */ figure { margin: 1em 40px; }
修復(fù) IE 8/9、Safari中margin失效
figure 是HTML5的新標(biāo)簽,用做文檔插圖,但它在 IE 8/9 and Safari 中的默認(rèn)margin失效,這里做了統(tǒng)一設(shè)置。
/** * Address differences between Firefox and other browsers. */ hr { box-sizing: content-box; height: 0; }
修正 Firefox 和其他瀏覽器之間的差異
在 Firefox 中,hr元素的默認(rèn)樣式很多,和其它瀏覽器主要的差異有兩點(diǎn):
1.設(shè)置了height為2px;
2.box-sizing為border-box;
此樣式對(duì)這兩個(gè)問題進(jìn)行重置,進(jìn)行統(tǒng)一
/** * Contain overflow in all browsers. */ pre { overflow: auto; }
標(biāo)簽設(shè)置滾動(dòng)條,內(nèi)容溢出時(shí)出現(xiàn)
大部分瀏覽器的pre在overflow的時(shí)候會(huì)直接溢出去,這里加上overflow:auto讓它出現(xiàn)滾動(dòng)條
/** * Address odd `em`-unit font size rendering in all browsers. */ code, kbd, pre, samp { font-family: monospace, monospace; font-size: 1em; }
用于修復(fù) Safari 5 和 Chrome 中奇怪的字體設(shè)置,統(tǒng)一字體樣式
總結(jié)此章節(jié)我們對(duì)Normalize.css中設(shè)置的 html與body元素,HTML5元素,鏈接,語義化文本,內(nèi)嵌元素,群組元素 的源碼進(jìn)行詳細(xì)的解讀,發(fā)現(xiàn)正如其說的一樣,它不僅僅幫我們修復(fù)了瀏覽器的默認(rèn)bug,還保留了許多標(biāo)簽的默認(rèn)值,尤其是語義化標(biāo)簽,堅(jiān)持他們存在的意義。
由于源碼部分過長(zhǎng),所以對(duì)于源碼的解析會(huì)分為兩節(jié),下一節(jié)我們繼續(xù)來介紹:
表單:表單往往存在很多問題,如常見的各種不繼承問題,這這里都會(huì)得到修復(fù)
表格:表格的默認(rèn)邊距和邊框真的很丑,需要修復(fù)修復(fù)
下一節(jié)會(huì)完成所有模塊對(duì)normalize.css源碼解讀,屆時(shí)會(huì)整理一份normalize-zh.css中文注釋的版本上傳至Github,供大家參考使用,敬請(qǐng)期待...
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://m.specialneedsforspecialkids.com/yun/111079.html
摘要:前言上一章節(jié)介紹了的歷史,最后對(duì)做了簡(jiǎn)單的了解,所以從這節(jié)開始對(duì)源碼進(jìn)行注釋翻譯與解讀,盡可能從最根本性的問題了解它在幫我們做什么回顧關(guān)于那些事一之歷史演變與源碼解讀前面講到的分模塊解讀,就是先黏貼一段源碼,然后根據(jù)官方提供的注釋進(jìn)行翻譯整 前言 上一章節(jié)介紹了CSS Reset的歷史,最后對(duì)Normalize.css做了簡(jiǎn)單的了解,所以從這節(jié)開始對(duì)源碼進(jìn)行注釋翻譯與解讀,盡可能從最...
摘要:本章節(jié)會(huì)完成所有源代碼翻譯整理,最終會(huì)整理出中文版本并開源至供大家交流使用?,F(xiàn)已將源代碼開源至項(xiàng)目地址源碼解讀上章節(jié)對(duì)與元素,元素,鏈接,語義化文本,內(nèi)嵌元素,群組元素等源碼內(nèi)容已經(jīng)做了解析,這章節(jié)繼續(xù)完成表單,表格部分。 前言 上一章節(jié)我們對(duì)Normalize.css源碼進(jìn)行解析,但是由于其代碼過長(zhǎng)導(dǎo)致不宜瀏覽,所以表單Forms,表格Table部分內(nèi)容放在此章節(jié)介紹。本章節(jié)會(huì)完成...
摘要:下面開始對(duì)進(jìn)行簡(jiǎn)單的介紹,關(guān)于兩者的差異區(qū)別可以看問答平臺(tái)使用遇到的問題和有什么本質(zhì)區(qū)別沒簡(jiǎn)單介紹關(guān)于對(duì)的介紹,這里引用咀嚼之味針對(duì)官方介紹翻譯的的中文版本。目前已經(jīng)成為了的替代方案是無可爭(zhēng)議的事情了。 前言 近期在翻閱陳舊的歷史資料,整理之前飽受爭(zhēng)議的CSS Reset問題,不過好像十多年過去,現(xiàn)在大家統(tǒng)一了口徑,紛紛推薦使用Normalize.css,包括Bootstrap都進(jìn)行...
閱讀 2329·2023-04-26 00:28
閱讀 3077·2019-08-30 15:55
閱讀 2749·2019-08-30 12:47
閱讀 1559·2019-08-29 11:04
閱讀 3183·2019-08-28 18:14
閱讀 952·2019-08-28 18:11
閱讀 1679·2019-08-26 18:36
閱讀 3393·2019-08-23 18:21