一、Normalize.css介绍与使用
(1)什么是Normalize
1️⃣ Normalize.css 只是一个很小的CSS文件,但它在默认的HTML元素样式上提供了跨浏览器的高度一致性。相比于传统的CSS reset,Normalize.css是一种现代的、为HTML5准备的优质替代方案。Normalize.css现在已经被用于 Twitter Bootstrap、 HTML5 Boilerplate、 GOV.UK、 CSS Tricks 以及许许多多其他框架、工具和网站上。 2️⃣ Normalize.css 支持包括手机浏览器在内的超多浏览器,同时对HTML5元素、排版、列表、嵌入的内容、表单和表格都进行了一般化。尽管这个项目基于一般化的原则,但我们还是在合适的地方使用了更实用的默认值。
(2)Normalize vs Reset
1️⃣ Normalize.css 保护了有价值的默认值
Reset通过为几乎所有的元素施加默认样式,强行使得元素有相同的视觉效果。相比之下,Normalize.css保持了许多默认的浏览器样式。这就意味着你不用再为所有公共的排版元素重新设置样式。当一个元素在不同的浏览器中有不同的默认值时,Normalize.css会力求让这些样式保持一致并尽可能与现代标准相符合。
2️⃣ Normalize.css 修复了浏览器的bug
它修复了常见的桌面端和移动端浏览器的bug。这往往超出了Reset所能做到的范畴。关于这一点,Normalize.css修复的问题包含了HTML5元素的显示设置、预格式化文字的font-size问题、在IE9中SVG的溢出、许多出现在各浏览器和操作系统中的与表单相关的bug。
3️⃣ Normalize.css 不会让你的调试工具变的杂乱
使用Reset最让人困扰的地方莫过于在浏览器调试工具中大段大段的继承链,如下图所示。在Normalize.css中就不会有这样的问题,因为在我们的准则中对多选择器的使用时非常谨慎的,我们仅会有目的地对目标元素设置样式。
4️⃣ Normalize.css 是模块化的
这个项目已经被拆分为多个相关却又独立的部分,这使得你能够很容易也很清楚地知道哪些元素被设置了特定的值。因此这能让你自己选择性地移除掉某些永远不会用到部分(比如表单的一般化)。
5️⃣ Normalize.css 拥有详细的文档
Normalize.css的代码基于详细而全面的跨浏览器研究与测试。这个文件中拥有详细的代码说明并在Github Wiki中有进一步的说明。这意味着你可以找到每一行代码具体完成了什么工作、为什么要写这句代码、浏览器之间的差异,并且你可以更容易地进行自己的测试。
(3)如何使用 normalize.css
首先,安装或从Github下载 Normalize.css,接下来有两种主要途径去使用它。
- 策略一:将 normalize.css 作为你自己项目的基础CSS,自定义样式值以满足设计师的需求。
- 策略二:引入 normalize.css 源码并在此基础上构建,在必要的时候用你自己写的CSS覆盖默认值。
(4)normalize.css 中文版(重点)
😆😆 代码如下 😆😆:
/*! normalize.css v8.0.0 | MIT License | github.com/necolas/normalize.css */
/* Document ========================================================================== */
/** * 1. 修正所有浏览器中的行高. * 2. 在iOS的切换横竖屏时,防止字体大小的调整. */
html {
line-height: 1.15; /* 1 */
-webkit-text-size-adjust: 100%; /* 2 */
}
/* Sections ========================================================================== */
/** * 删除所有浏览器的margin值。 */
body {
margin: 0;
}
/** * Correct the font size and margin on `h1` elements within `section` and * `article` contexts in Chrome, Firefox, and Safari. * 修正h1元素的font-size和margin值 */
h1 {
font-size: 2em;
margin: 0.67em 0;
}
/* Grouping content ========================================================================== */
/** * 1. Add the correct box sizing in Firefox. * 2. Show the overflow in Edge and IE. * 1.修正火狐浏览器的box-sizing */
hr {
box-sizing: content-box; /* 1 */
height: 0; /* 1 */
overflow: visible; /* 2 */
}
/** * 1. Correct the inheritance and scaling of font size in all browsers. * 1. 在所有浏览器中纠正字体大小的继承和扩展。 * 2. Correct the odd `em` font sizing in all browsers. * 2. 在所有浏览器中纠正奇数的字体大小。 */
pre {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/* Text-level semantics:文本级别的语义 ========================================================================== */
/** * Remove the gray background on active links in IE 10. * 删除IE 10中活跃链接的灰色背景。 */
a {
background-color: transparent;
}
/** * 1. Remove the bottom border in Chrome 57- * 1. 移除Chrome 57-浏览器的border-bottom * 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari. * 2. 在Chrome、Edge、IE、Opera和Safari中添加正确的text-decoration。 */
abbr[title] {
border-bottom: none; /* 1 */
text-decoration: underline; /* 2 */
text-decoration: underline dotted; /* 2 */
}
/** * Add the correct font weight in Chrome, Edge, and Safari. * 在Chrome、Edge和Safari中添加正确的font-weight */
b, strong {
font-weight: bolder;
}
/** * 1. Correct the inheritance and scaling of font size in all browsers. * 1.在所有浏览器中纠正字体大小的继承和扩展。 * 2. Correct the odd `em` font sizing in all browsers. */
code, kbd, samp {
font-family: monospace, monospace; /* 1 */
font-size: 1em; /* 2 */
}
/** * Add the correct font size in all browsers. */
small {
font-size: 80%;
}
/** * Prevent `sub` and `sup` elements from affecting the line height in * all browsers. * 防止“sub”和“sup”元素影响所有浏览器的线高度。 */
sub, sup {
font-size: 75%;
line-height: 0;
position: relative;
vertical-align: baseline;
}
sub {
bottom: -0.25em;
}
sup {
top: -0.5em;
}
/* Embedded content:嵌入命令 ========================================================================== */
/** * Remove the border on images inside links in IE 10. */
img {
border-style: none;
}
/* Forms ========================================================================== */
/** * 1. Change the font styles in all browsers. * 2. Remove the margin in Firefox and Safari. */
button, input, optgroup, select, textarea {
font-family: inherit; /* 1 */
font-size: 100%; /* 1 */
line-height: 1.15; /* 1 */
margin: 0; /* 2 */
}
/** * Show the overflow in IE. * 1. Show the overflow in Edge. */
button, input { /* 1 */
overflow: visible;
}
/** * Remove the inheritance of text transform in Edge, Firefox, and IE. * 在Edge、Firefox和IE中删除文本转换的继承。 * 1. Remove the inheritance of text transform in Firefox. * 1. 删除Firefox中文本转换的继承。 */
button, select { /* 1 */
text-transform: none;
}
/** * Correct the inability to style clickable types in iOS and Safari. * 纠正在iOS和Safari中无法使用可点击类型的功能。 */
button, [type="button"], [type="reset"], [type="submit"] {
-webkit-appearance: button;
}
/** * Remove the inner border and padding in Firefox. * 移除Firefox中border和padding */
button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {
border-style: none;
padding: 0;
}
/** * Restore the focus styles unset by the previous rule. * 恢复以前规则未设置的焦点样式。 */
button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring {
outline: 1px dotted ButtonText;
}
/** * Correct the padding in Firefox. * 修正火狐的padding值 */
fieldset {
padding: 0.35em 0.75em 0.625em;
}
/** * 1. Correct the text wrapping in Edge and IE. * 1. * 2. Correct the color inheritance from `fieldset` elements in IE. * 2. 从IE的“fieldset”元素中纠正颜色继承。 * 3. Remove the padding so developers are not caught out when they zero out * `fieldset` elements in all browsers. * 3. */
legend {
box-sizing: border-box; /* 1 */
color: inherit; /* 2 */
display: table; /* 1 */
max-width: 100%; /* 1 */
padding: 0; /* 3 */
white-space: normal; /* 1 */
}
/** * Add the correct vertical alignment in Chrome, Firefox, and Opera. * 在Chrome、Firefox和Opera中添加正确的垂直对齐方式。 */
progress {
vertical-align: baseline;
}
/** * Remove the default vertical scrollbar in IE 10+. * 删除IE 10+中的默认垂直滚动条 */
textarea {
overflow: auto;
}
/** * 1. Add the correct box sizing in IE 10. * 1. 修正IE10中的box-sizing * 2. Remove the padding in IE 10. * 2. 移除IE10的padding值 */
[type="checkbox"], [type="radio"] {
box-sizing: border-box; /* 1 */
padding: 0; /* 2 */
}
/** * Correct the cursor style of increment and decrement buttons in Chrome. * 修正Chrome中增加和减量按钮的光标样式。 */
[type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {
height: auto;
}
/** * 1. Correct the odd appearance in Chrome and Safari. * 1. 修正在Chrome和Safari中出现的奇怪现象。 * 2. Correct the outline style in Safari. * 2. 修正Safari中的outline样式 */
[type="search"] {
-webkit-appearance: textfield; /* 1 */
outline-offset: -2px; /* 2 */
}
/** * Remove the inner padding in Chrome and Safari on macOS. * 移除chrome和macos上的Safari的padding值 */
[type="search"]::-webkit-search-decoration {
-webkit-appearance: none;
}
/** * 1. Correct the inability to style clickable types in iOS and Safari. * 1. 纠正在iOS和Safari中无法使用可点击类型的功能。 * 2. Change font properties to `inherit` in Safari. * 2. 在Safari中更改字体属性,以“inherit”。 */
::-webkit-file-upload-button {
-webkit-appearance: button; /* 1 */
font: inherit; /* 2 */
}
/* Interactive:交互式的 ========================================================================== */
/* * Add the correct display in Edge, IE 10+, and Firefox. * 修正Edge, IE 10+,和 Firefox中details标签的display属性 */
details {
display: block;
}
/* * Add the correct display in all browsers. * 修正所有浏览器的display属性 */
summary {
display: list-item;
}
/* Misc ========================================================================== */
/** * Add the correct display in IE 10+. * 修正IE10+的template元素的display */
template {
display: none;
}
/** * Add the correct display in IE 10. * 修正IE 10中的display */
[hidden] {
display: none;
}
二、结语
无论从适用范畴还是实施上,Normalize.css与Reset都有极大的不同。尝试一下这两种方法并看看到底哪种更适合你的开发偏好是非常值得的。这个项目在Github上以开源的形式开发。任何人都能够提交问题报告或者提交补丁。整个项目发展的过程对所有人都是可见的,而每一次改动的原因也都写在 commit 信息中,这些都是有迹可循的。 😝 我会坚持一直更新呢,喜欢的朋友们记得点点赞哦 ❗️ 😝