Coder Social home page Coder Social logo

normalize-zh's Introduction

前言

Normalize-zh.css是根据对Normalize.css的源码分析后,经过学习与整理,将源代码中的英文注释文档翻译为中文版本,方便国内的开发者学习和使用,我深知此版本一定有很多不足,希望能得到大家的理解和支持,同样也很愿意和大家一起完善。

关于源码的解读细节,可以查看文档下方,可以阅读我发布在segmentfault上的系列文章

Normalize 源码解读

html与body 元素

/**
 * 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 */
}
  1. 设置全局的字体为sans-serif,关于中文字体的设置可参考 Amaze UI
  2. 防止 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,detailssummary 定义为 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 */
}
  1. 修复 IE 8/9,HTML5新元素不能正确显示的问题,定义为inline-block元素
  2. 修复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 给bstrong设置的属性是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 中sectionarticle内的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;
}
  • 防止所有浏览器中的subsup影响行高

supsub两个标签是用来表示上标和下标,据HTML标准中对smallsubsup的大小要求都是smaller,但是如上所示normalize.csssmall设的是80%,而subsup却是75%,所以为了保持一致,且不影响其他元素的行高,把两者的line-height设为0,然后设置它的垂直以baseline开始,设置topbottom手动设置两者偏移量

内嵌元素 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.设置了height2px; 2.box-sizingborder-box; 此样式对这两个问题进行重置,进行统一

/**
 * Contain overflow in all browsers.
 */

pre {
  overflow: auto;
}
  • 标签设置滚动条,内容溢出时出现

大部分浏览器的preoverflow的时候会直接溢出去,这里加上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 中奇怪的字体设置,统一字体样式

表单 Forms

/**
 * 1. Correct color not being inherited.
 *    Known issue: affects color of disabled elements.
 * 2. Correct font properties not being inherited.
 * 3. Address margins set differently in Firefox 4+, Safari, and Chrome.
 */

button,
input,
optgroup,
select,
textarea {
  color: inherit; /* 1 */
  font: inherit; /* 2 */
  margin: 0; /* 3 */
}
  1. 修正所有浏览器中颜色不继承的问题
  2. 修正所有浏览器中字体不继承的问题
  3. 修正 Firefox 3+, Safari5 和 Chrome 中外边距不同的问题

有一些浏览器会把form表单中的一些元素 textareatextbuttonselect 中的字体和字体颜色默认会设置成用户的字体或者是浏览器的字体,并不会从父元素继承,所以这里重置了这些元素的默认样式。

/**
 * Address `overflow` set to `hidden` in IE 8/9/10/11.
 */

button {
  overflow: visible;
}
  • 统一 IE 8/9/10/11 overflow属性为visible

在 IE 8/9/10/11里的button默认的overflowhidden,这里统一为visible

/**
 * Address inconsistent `text-transform` inheritance for `button` and `select`.
 * All other form control elements do not inherit `text-transform` values.
 * Correct `button` style inheritance in Firefox, IE 8/9/10/11, and Opera.
 * Correct `select` style inheritance in Firefox.
 */

button,
select {
  text-transform: none;
}
  • 统一各浏览器text-transform不会继承的问题
/**
 * 1. Avoid the WebKit bug in Android 4.0.* where (2) destroys native `audio`
 *    and `video` controls.
 * 2. Correct inability to style clickable `input` types in iOS.
 * 3. Improve usability and consistency of cursor style between image-type
 *    `input` and others.
 */

button,
html input[type="button"], /* 1 */
input[type="reset"],
input[type="submit"] {
  -webkit-appearance: button; /* 2 */
  cursor: pointer; /* 3 */
}
  1. 避免 Android 4.0.* 中的 WebKit bug ,该bug会破坏原生的audiovideo的控制器
  2. 更正 iOS 中无法设置可点击的input的问题
  3. 统一其他类型的input的光标样式

这里将可点击的按钮,统一设置鼠标样式为pointer,提高了可用性

/**
 * Re-set default cursor for disabled elements.
 */

button[disabled],
html input[disabled] {
  cursor: default;
}
  • 重置按钮禁用时光标样式
/**
 * Remove inner padding and border in Firefox 4+.
 */

button::-moz-focus-inner,
input::-moz-focus-inner {
  border: 0;
  padding: 0;
}
  • 移除 Firefox 4+ 的内边距
/**
 * Address Firefox 4+ setting `line-height` on `input` using `!important` in
 * the UA stylesheet.
 */

input {
  line-height: normal;
}
  • 统一设置行高为normal

Firefox浏览器会默认设置input[type="button"]的行高为normal !important,这里统一样式

/**
 * It's recommended that you don't attempt to style these elements.
 * Firefox's implementation doesn't respect box-sizing, padding, or width.
 *
 * 1. Address box sizing set to `content-box` in IE 8/9/10.
 * 2. Remove excess padding in IE 8/9/10.
 */

input[type="checkbox"],
input[type="radio"] {
  box-sizing: border-box; /* 1 */
  padding: 0; /* 2 */
}
  1. 修正 IE 8/9 box-sizing 被设置为content-box的问题
  2. 移除 IE 8/9 中多余的内边距
/**
 * Fix the cursor style for Chrome's increment/decrement buttons. For certain
 * `font-size` values of the `input`, it causes the cursor style of the
 * decrement button to change from `default` to `text`.
 */

input[type="number"]::-webkit-inner-spin-button,
input[type="number"]::-webkit-outer-spin-button {
  height: auto;
}
  • 修正 Chrome 中 input [type="number"] 在特定高度和 font-size 时,下面一个箭头光标变成cursor: text 效果
/**
 * 1. Address `appearance` set to `searchfield` in Safari and Chrome.
 * 2. Address `box-sizing` set to `border-box` in Safari and Chrome.
 */

input[type="search"] {
  -webkit-appearance: textfield; /* 1 */
  box-sizing: content-box; /* 2 */
}

  1. 修正 Safari 5 和 Chrome 中appearance被设置为searchfield的问题
  2. 修正 Safari 5 和 Chrome 中box-sizing被设置为border-box的问题

searchfield是CSS3的属性,它可以让一个div元素看上去像任何元素,但是浏览器支持性并不好,

/**
 * Remove inner padding and search cancel button in Safari and Chrome on OS X.
 * Safari (but not Chrome) clips the cancel button when the search input has
 * padding (and `textfield` appearance).
 */

input[type="search"]::-webkit-search-cancel-button,
input[type="search"]::-webkit-search-decoration {
  -webkit-appearance: none;
}
  • 移除原生默认样式,统一search的输入框样式
/**
 * Define consistent border, margin, and padding.
 */

fieldset {
  border: 1px solid #c0c0c0;
  margin: 0 2px;
  padding: 0.35em 0.625em 0.75em;
}
  • 定义一致的边框、外边距和内边距
/**
 * 1. Correct `color` not being inherited in IE 8/9/10/11.
 * 2. Remove padding so people aren't caught out if they zero out fieldsets.
 */

legend {
  border: 0; /* 1 */
  padding: 0; /* 2 */
}
  1. 修正 IE 6-9 中颜色不能继承的问题
  2. 重置内边距
/**
 * Remove default vertical scrollbar in IE 8/9/10/11.
 */

textarea {
  overflow: auto;
}
  • 移除 IE8-11 中默认的垂直滚动条
/**
 * Don't inherit the `font-weight` (applied by a rule above).
 * NOTE: the default cannot safely be changed in Chrome and Safari on OS X.
 */

optgroup {
  font-weight: bold;
}
  • 统一设置optgroup元素font-weight始终为bold

表格 Tables

/**
 * Remove most spacing between table cells.
 */

table {
  border-collapse: collapse;
  border-spacing: 0;
}

td,
th {
  padding: 0;
}

  • 合并单元格边框,重置内边距

normalize-zh's People

Contributors

alsiso avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.