IE浏览器的兼容性素来是使人头疼的问题,大名鼎鼎的FUCK-IE不是浪得虚名的。html
这里使用的解决方案是HACK,具体原理就是针对不一样的浏览器写不一样的HTML、CSS样式,从而使各类浏览器达到一致的渲染效果。前端
HTML的兼容写法浏览器
HTML的HACK由注释<!-- -->演变而来,在高级浏览器中注释不会被加载,把IE浏览器的兼容代码写在注释中,IE浏览器会识别。spa
<!--[if IE 6]> <p>只有IE6认识我</p> <![endif]-->
<!--[if gte IE 9]> <h1>大于等于IE9的浏览器能看到</h1> <![endif]-->
<!--[if lte IE 8]> <h1 class="red">您的浏览器版本太低(IE8及如下版本),请更新浏览器!</h1> <![endif]-->
上面三个例子很是简单,聪明的你确定能举三反一。code
实际应用场景的话可能是用于添加一些兼容性的JavaScript片断。htm
CSS的兼容写法blog
CSS的HACK包括属性的HACK和选择器的HACK。ip
要提醒的是,设置CSS的HACK要注意CSS样式的层叠性,给同一个元素设置的兼容写法必须写在后面,不然会被层叠掉。开发
只兼容IE6的HACK(属性)入门
HACK符号是【-】或者【_】,做为前缀在属性前面,中间不加空格。在属性名前加上这个HACK符号,高级浏览器及其余浏览器会认为这是一个未知的属性,不会加载这个属性,也不会报错。
background-color: red; /* 高级浏览器识别 */ _background-color: pink; /* 仅IE6识别 */
兼容IE6/7的HACK(属性)
HACK符号能够是【`】、【~】、【!】、【@】、【#】、【$】、【%】、【^】、【&】、【*】、【(】、【)】、【+】、【=】、【[】、【]】、【|】、【<】、【>】、【,】和【.】中的任一个字符,做为前缀写在属性前面。
background-color: red; /* 高级浏览器识别 */ !background-color: pink; /* 仅IE6/7识别 */
只兼容IE8的HACK(属性)
HACK符号是【\0/】,必须写在属性值与分号之间,中间不加空格。
background-color: red; /* 高级浏览器识别 */ background-color: pink\0/; /* 仅IE8识别 */
兼容IE8/9/10的HACK(属性)
HACK符号是【\0】,必须写在属性值与分号之间,中间不加空格。
background-color: red; /* 高级浏览器识别 */ background-color: pink\0; /* IE8/9/10识别 */
兼容IE6/7/8/9/10(属性)
HACK符号是【\9】,必须写在属性值与分号之间,中间不加空格。
background-color: red; /* 高级浏览器识别 */ background-color: pink\9; /* IE6/7/8/9/10识别 */
兼容IE6及如下版本(选择器)
HACK符号是【* html】,注意*和html之间有空格,再加一个空格,后面写选择器。
/* 常规写法 */ .box { width: 200px; height: 200px; border-radius: 50%; background-color: yellowgreen; } /* 兼容写法 */ * html .box { width: 100px; height: 100px; background-color: skyblue; }
兼容IE7及如下版本(选择器)
HACK符号是【,】,英文的逗号,直接写在选择器的后面,不加空格。
.box, { background-color: #999; }
还有第二种,HACK符号是【*+html】,加一个空格,后面写选择器。
*+html .box { background-color: #999; }
兼容IE6之外的其余版本(选择器)
HACK符号是【html>body】,写在选择器的前面,与选择器之间有一个空格。
html>body .box { background-color: yellow; }
兼容IE6/7之外的版本(选择器)
HACK符号是【html>/**/】或【html~/**/】,写在选择器的前面,与选择器之间有一个空格。
html>/**/body .box { background-color: purple; }
html~/**/body .box { background-color: purple; }
以上就是IE浏览器兼容性的入门解决方案。浏览器的兼容性一直是一个很大难题,对于专业前端开发者来讲是一个必须勇敢直面的挑战。而对于非专业前端开发者(好比说我)来讲,稍微有了解就行了。
"你别皱眉,我走就好。"