一、CSS初始化
每个浏览器的css默认样式不尽相同,所以最简单有效的方式就是对其进行初始化(覆盖默认样式)
常见 : *{ margin: 0; padding: 0;}
库:normalize.css
二、浏览器私有属性
常用的前缀有:
firefox浏览器 :-moz-
chrome、safari :-webkit-
opera :-o- / -xv-
IE浏览器 :-ms-(目前只有 IE 8+支持)
插件Autoprefixer:是一款自动管理浏览器前缀的插件,它可以解析CSS文件并且添加浏览器前缀到CSS内容里。把Autoprefixe添加到资源构建工具(如webpack)后,可以完全忘记前面的东西,只需按照最新的W3C规范来正常书写CSS,剩下的工作交给插件来处理。另外,如果项目需要支持旧版浏览器,可修改browsers参数设置。
三、CSS hack(条件hack、属性级hack、选择符级hack)
1. 条件hack
<!--[if <keywords>? IE <version>?]> 代码块,可以是html,css,js<![endif]-->
keywords: if 后面跟的条件共包含6种选择方式:是否、大于、大于或等于、小于、小于或等于、非指定版本
是否:指定是否IE或IE某个版本。关键字:空
大于:选择大于指定版本的IE版本。关键字:gt(greater than)
大于或等于:选择大于或等于指定版本的IE版本。关键字:gte(greater than or equal)
小于:选择小于指定版本的IE版本。关键字:lt(less than)
小于或等于:选择小于或等于指定版本的IE版本。关键字:lte(less than or equal)
非指定版本:选择除指定版本外的所有IE版本。关键字:!
version:IE浏览器版本,如6、7、8IE10及以上版本已将条件注释特性移除,使用时需注意。
<!--[if lt IE 9]> ie9以下代码 <![endif]-->
2. 属性级hack
selector{<hack>?property:value<hack>?;}
_:选择IE6及以下;(-)亦可使用,为了避免与某些带中划线的属性混淆,所以使用下划线(_)更为合适。
*:选择IE7及以下。如:(+)与(#)之类的均可使用,不过业界对(*)的认知度更高
9:选择IE6+
0:选择IE8+和Opera15以下的浏览器
注意顺序:低版本的兼容性写法放到最后
.test {
color: #090\9; /* For IE8+ */
*color: #f00; /* For IE7 and earlier */
_color: #ff0; /* For IE6 and earlier */
}
3.选择符级hack
*html *前缀只对IE6生效
*+html *+前缀只对IE7生效
* html .test { color: #090; } * For IE6 and earlier */
*+ html .test { color: #ff0; } /* For IE7 */
@media screen\9{...} /* 只对IE6/7生效 */
@media \0screen {body { background: red; }} /* 只对IE8有效 */
@media \0screen\,screen\9{body { background: blue; }} /* 只对IE6/7/8有效 */
@media screen\0 {body { background: green; }} /* 只对IE8/9/10有效 */
@media screen and (min-width:0\0) {body { background: gray; }} /* 只对IE9/10有效 */
@media screen and (-ms-high-contrast: active), (-ms-high-contrast: none) {body { background: orange; }} /* 只对IE10有效 */