IE8
本文针对IE8兼容性调整,对于Chorm/FF/opera 均采用增加前缀处理,不详细讨论
- CSS3
- html5
- 文档模式
一、CSS3 兼容性
模块
- 边框
- 背景
- 文本效果
- 2D/3D转换
- 动画
- 布局
边框
- border-radius
- box-shadow
- border-image
背景
- background-size
- background-origin
文本效果
- text-shadow
- word-wrap
字体
- @font-face
2D/3D 转换
- transform 下 2D转换
- translate()
- rotate()
- scale()
- skew()
- matrix()
- transform 下 3D转换
- rotateX()
- rotateY()
动画
- transition 过渡动画
- @keyframes 兼容性 IE10+
- animation
布局
- column-count
- column-gap
- column-rule
<?php header( 'Content-type: text/x-component' ); include( 'pie.htc' ); ?>
如果你是通过nginx来托管此文件,只要在Nginx的配置文件中加入一条MIME规则即可。我建议使用Flask来托管它(放在static文件夹中),这样更方便,然后只需加入下面的代码:
import mimetypes mimetypes.add_type('text/x-component', '.htc')
二、HTML5 兼容性
支持HTML5 浏览器:IE9+(IE9部分支持)/ Chrome / Safari / Firefox / Opera
HTML5 中的一些有趣的新特性:
- 用于绘画的 canvas 元素
- 用于媒介回放的 video 和 audio 元素
- 对本地离线存储的更好的支持
- 新的特殊内容元素,比如 article、footer、header、nav、section
- 新的表单控件,比如 calendar、date、time、email、url、search
详细标签:http://www.w3school.com.cn/tags/index.asp
让低端浏览器兼容HTML5 标签
1.添加JS代码
var e = "abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(', '); var i= e.length; while (i--){ document.createElement(e[i]) }
<style> article, aside, canvas, details, figcaption, figure, footer, header, hgroup, menu, nav, section, summary{ display: block; } </style>
2.添加插件
<!--[if lt IE 9]> <script> src="http://html5shim.googlecode.com/svn/trunk/html5.js"</script> <![endif]-->
3. html5shiv
一些细节:
- 关于max-width
- 嵌套inline-block下padding元素重叠
- placeholder
- last-child
- background-size: cover
- filter blur
三、文档模式
1.IE的兼容性视图
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1"> // 调用IE最新版本文档模式
IE=edge
表示强制使用IE最新内核,chrome=1
表示如果安装了针对IE6/7/8等版本的浏览器插件Google Chrome Frame(可以让用户的浏览器外观依然是IE的菜单和界面,但用户在浏览网页时,实际上使用的是Chrome浏览器内核),那么就用Chrome内核来渲染。
国内的浏览器通常是通过访问 meta标签来确定如何渲染。以下是360浏览器的官网说明:
“由于众所周知的情况,国内的主流浏览器都是双核浏览器:基于Webkit内核用于常用网站的高速浏览。基于IE的内核用于兼容网银、旧版网站。以360的几款浏览器为例,我们优先通过Webkit内核渲染主流的网站,只有小量的网站通过IE内核渲染,以保证页面兼容。在过去很长一段时间里,我们主要的控制手段是一个几百k大小网址库,一个通过长期人工运营收集的网址库。
尽管我们努力通过用户反馈、代码标签智能判断技术提高浏览器的自动切核准确率。但是在很多情况下,我们仍然无法达到百份百正确。因此,我们新增加了一个控制手段:内核控制Meta标签。只要你在自己的网站里增加一个Meta标签,告诉360浏览器这个网址应该用哪个内核渲染,那么360浏览器就会在读取到这个标签后,立即切换对应的内核。并将这个行为应用于这个二级域名下所有网址。”
解决方案
<meta name="renderer" content="webkit">
2.声明DOCTYPE,浏览器会确认是HTML 还是XHTML
会影响:
- 标签、attributes、properties等影响
- 影响各种渲染模式(标准模式、混杂模式)的解释影响
目前最佳
<!DOCTYPE html>
四、其他
IE8
- 不支持 input[type=text] 这种写法
- 媒体查询 media Query (解决方案:使用Respond.js)
- 有一个地方需要注意的是,如果对Bootstrap3 media query声明的属性(比如
.container
)进行覆盖,那在不支持media query的浏览器中Respond.js起作用后,会把你的覆盖样式再次覆盖。我的解决方案是在后面加上!important
。
- 有一个地方需要注意的是,如果对Bootstrap3 media query声明的属性(比如
CSS3兼容
-webkit- chrome 兼容 -moz- 火狐(FF) 兼容 -o- 欧朋(opera) 兼容 -ms- IE9 兼容
其他IE低端浏览器兼容
*display: inline;
background-image:url(about:blank);
- 常规文档流中,当上下两个存在margin时,取最大的;当存在负值时,则用最大的减去负值的绝对值。
- 浮动中,上下两元素margin不重合
- <div style="clear:both;"></div>放到当作最后一个子标签放到父标签那儿
- .fix{overflow:hidden; zoom:1;} ,但是注意,有相关定位如position,margin负值时,会产生影响
- .fix:after{display:block; content:'clear'; clear:both; line-height:0; visibility:hidden;} 推荐使用
只在IE下生效 <!--[if IE]>...<![endif]--> 只在IE9下生效<!-- [if IE 9]>...<![endif]--> 在IE9以下(包括IE9)<!-- [if lt IE 9]> ... <![endif]--> 在IE6以上(包括IE6)<!--[if gte IE 6]>... <![endif]--> 非IE浏览器<!--[if !IE]>... <![endif]-->
* html #1 { color: #666; } /* IE6 */ *+html #1 { color: #999; } /* IE7 */
.a{ color: red; _color: #ccc; // IE6 *color: blue; // IE6 IE7 #color: red; // IE6 IE7 font-weight: bold !important; // 除了IE6 ,优先级最高 }
background: #E4E4E5; /* Old browsers */ background: -ms-linear-gradient(top,#f2f2f2,#d5d6d8); background: -moz-linear-gradient(top,#f2f2f2,#d5d6d8); ;/*FF 3.6+ */ background: -webkit-gradient(linear,0 0,0 100%,from(#f2f2f2),to(#d5d6d8)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top,#f2f2f2,#d5d6d8); background: -o-linear-gradient(top,#f2f2f2,#d5d6d8); -pie-background: linear-gradient(top,#f2f2f2,#d5d6d8);
filter:alpha(opacity=100 finishopacity=100 style=1 startX=startX,startY=startY,finishX=finishX,finishY=finishY)
progid:DXImageTransform.Microsoft.gradient( startColorstr='#F3A8A8', endColorstr='#e23b2e',GradientType=1 ); /* IE6-9 */
background: -ms-linear-gradient(top, #F3A8A8 0%,#e23b2e 100%); /* IE10+ 0%表示从头开始 100% 表示结束*/