设计师们都梦想着这样一个完美世界:所有的浏览器都能够理解和适用所有CSS规则,并且呈现相同的视觉效果(没有兼容性问题)。但是,现实却总是恰恰相反,很多CSS样式在不同的浏览器中有着不同的解释和呈现。
当今流行的浏览器,如Firefox、Opera、Internet Explorer、Chrome、Safari等,有一些以自己的方式去理解CSS规范,这就会导致有的浏览器对CSS的解释与设计师的CSS定义初衷相冲突,使得网页的样子在某些浏览器下能正确按照设计师的想法显示,但有些浏览器却并没有按照设计师想要的样子显示出来,这就导致浏览器的兼容性问题。更糟的是,有的浏览器完全无视CSS的一些声明和属性。
正因为上述冲突和问题依然存在,所以一些设计师想到了一种避免浏览器兼容性问题的方法,那就是CSS Reset。什么是CSS Reset呢?我们可以把它叫做“CSS重设”,也有人把它叫做“CSS复位”、“默认CSS”、“CSS重置”等。CSS重设就是由于各种浏览器解释CSS样式的初始值有所不同,导致设计师在没有定义某个CSS属性时,不同的浏览器会按照自己的默认值来为没有定义的样式赋值,所以我们要先定义好一些CSS样式,来让所有浏览器都按照同样的规则解释CSS,这样就能避免发生这种问题。
最简单的CSS重设如下:
* {
padding: 0;
margin: 0;
}
这个CSS重设将所有元素的padding和margin值都设为0,可以避免一些浏览器在理解这两个属性默认值上发生分歧。
* {
padding: 0;
margin: 0;
border: 0;
}
这是在上一个重设的基础上添加了对border属性的重设,初始值为0,的确能避免一些问题。
* {
outline: 0;
padding: 0;
margin: 0;
border: 0;
}
在前两个重设的基础上添加了outline属性的重设,防止一些冲突。甚至还有如下的浓缩实用型CSS重设。
* {
vertical-align: baseline;
font-weight: inherit;
font-family: inherit;
font-style: inherit;
font-size: 100%;
outline: 0;
padding: 0;
margin: 0;
border: 0;
}
该CSS重设方法出自在线资源网站Perishable Press,这是它常用的方法。
因为这种做法具有巨大的潜在破坏性,Bootstrap没有采用上述常规做法,进行CSS样式重置,而是采用针对性重置和增强型修补。
所谓针对性重置,就是设置特定上下文环境来重设样式。例如,针对通用选择器的使用,Bootstrap仅限制在打印媒体类型中使用:
@media print {
* {
text-shadow: none !important;
color: #000 !important; // Black prints faster: h5bp.com/s
background: transparent !important;
box-shadow: none !important;
}
}
有针对性的重置样式:
button,
input,
select,
textarea {
margin: 0;
font-size: 100%;
vertical-align: middle;
}
通过下面方法,增强HTML5新标签的功能,让它们拥有块状显示的布局功能。
article, aside, details, figcaption, figure, footer, header, hgroup, nav, section {
display: block;
}
也许不同CSS框架和网站的重设方法不同,但是它们都有共同点,大部分都是同一个目的,就是为了让更多的浏览器能显示同样的效果。有了这些CSS重设作为资料和参考,也许会对后期开发有所帮助,甚至提高效率。