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