低版本IE正常运行HTML5+CSS3网站的3种解决方案
程序员文章站
2023-08-24 17:42:33
如果开发时按最低标准,比如ie6不支持的特性,我们统统不用,那就没有必要写这篇文章了;但我想这种情况极少,更多的开发,是在现代浏览器上使用它们支持的特性,而在早期浏览器上做...
如果开发时按最低标准,比如ie6不支持的特性,我们统统不用,那就没有必要写这篇文章了;但我想这种情况极少,更多的开发,是在现代浏览器上使用它们支持的特性,而在早期浏览器上做一定的降级处理,这就是所谓 “渐进增强”,也是本文要说的重点。通过下面的方法,希望可以让网站也能够在低版本ie浏览器上奇迹般地运行得更好!
htmlshiv.js
remy的 html5shiv通过javascript 来创建html5元素(如 main, header, footer等)。在某种程度上通过javascript 创建的元素是 styleable(可样式)的。我们可以花很多时间来思考其运行原理,但谁会在乎呢?这种策略在所有产品网站上仍然是必须使用的。
复制代码 代码如下:
<!--[if lt ie 9]><script src="http://cdn.bootcss.com/html5shiv/3.7/html5shiv.js"></script><![endif]-->
selectivizr.jsselectivizr.js 是一个不可思议的资源,用于填充不支持的css选择器和属性,包括重要的 last-child。在最近的重设计中,我嵌入了 selectivizr,并在更老的 ie 浏览器上也不会错过任何细节。下面是我的实现代码:
复制代码 代码如下:
<!--[if lte ie 8]><script src="http://cdn.bootcss.com/selectivizr/1.0.2/selectivizr.js"></script><![endif]-->
现代项目绝对必须的。只在老版本ie时才加载。
另外,modernizr 脚本中已经添加 html5 浏览器支持脚本 html5shiv,我们只要引用 moernizr.js 文件,ie9 以下的 ie 浏览器就支持 html5 添加的语义标签如 nav、section、article 等,也可以使用 css 对它们进行样式化。
条件注释
下面这样最土的情况你肯定看到过。但无论丑陋与否,事实上这段代码完全按预期的方式运行:
复制代码 代码如下:
<!doctype html>
<!--[if lt ie 7 ]> <html class="ie6" lang="en"> <![endif]-->
<!--[if ie 7 ]> <html class="ie7" lang="en"> <![endif]-->
<!--[if ie 8 ]> <html class="ie8" lang="en"> <![endif]-->
<!--[if ie 9 ]> <html class="ie9" lang="en"> <![endif]-->
<!--[if (gt ie 9)|!(ie)]><!--> <html lang="en"> <!--<![endif]-->
<!--[if lt ie 7 ]> <html class="ie6" lang="en"> <![endif]-->
<!--[if ie 7 ]> <html class="ie7" lang="en"> <![endif]-->
<!--[if ie 8 ]> <html class="ie8" lang="en"> <![endif]-->
<!--[if ie 9 ]> <html class="ie9" lang="en"> <![endif]-->
<!--[if (gt ie 9)|!(ie)]><!--> <html lang="en"> <!--<![endif]-->
上面的方法是作用于css,来写一些针对ie各版本的样式差异。先判断用户用的哪个ie版本,然后在标签上加上该版本的class,这样可以方便hack。
然后我们在css文件中就可以这样写:
复制代码 代码如下:
.ie6 xxx {};
.ie7 xxx {};
这是目前小编认为效率最高的方法,这个方法不需要或等待javascript,而且也不需要重量级的javascript库。你定义的styles类立即生效,还没有闪屏。
尽管ie浏览器正在迎头赶上竞争对手,新版本ie也有非常大的变化,并希望借助全新的ie重塑网络体验。但在国内旧版ie仍然是比较流行。好消息是,这些资源在所有现代浏览器上运行良好,代价也并不高!