解决浏览器不支持HTML5和CSS3

Modernizr插件可用于解决:《响应式web设计》提及!

其他:

第一种方法:IE9以下版本的IE将创建HTML5标签, 非IE浏览器会忽略这段代码,因此不会发生http请求,也就不影响网页执行效率。

<!--[if lt IE9]>
<script>
(function() {
if (!
/*@[email protected]*/
0) return;
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])
}
})()
</script>
<![endif]-->

第二种方法:在你的网页中引入Google的html5shiv包(推荐)

<!--[if lt IE9]>
<script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->

但是不管使用以上哪种方法,都要初始化新标签的CSS.因为HTML5在默认情况下表现为内联元素,对这些元素进行布局我们需要利用CSS手工把它们转为块状元素方便布局

/*html5*/
article,aside,dialog,footer,header,section,footer,nav,figure,menu{display:block}

但是如果ie6/7/8 禁用脚本的用户,那么就变成了无样式的"白板"网页,我们该怎么解决呢?

我们可以参照facebook的做法,即引导用户进入带有noscript标识的 “/?_fb_noscript=1”页面,用 html4 标签替换 html5 标签,这要比为了保持兼容性而写大量 hack 的做法更轻便一些。

<!--[if lte IE 8]>
<noscript>
<style>.html5-wrappers{display:none!important;}</style>
<div class="ie-noscript-warning">您的浏览器禁用了脚本,请<a href="">查看这里</a>来启用脚本!或者<a href="/?noscript=1">继续访问</a>.
</div>
</noscript>
<![endif]-->

引导用户开启脚本,或者直接跳转到HTML4标签设计的界面。

其他:

1. Dean Edwards的IE7.js (以及 IE8.js, IE9.js)

这个玩意估计是试图让IE支持CSS3属性的鼻祖,还算蛮强大,就是性能开销较大,要解析很多文件脚本,给DOM添加大量的元素以及ClassName。

2. Aaron Gustafson的 eCSStender

此方法支持@font-face, CSS3 选择器, 以及 CSS3 Backgrounds 和 Borders。

3. Drew Diller的 DD_roundies

这是一个基于IE VML实现一些CSS3效果的。

4. Remiz Rahnas的border-radius.htc

此方法使用htc文件,配合VML实现,缺点在于不能自动适应目标元素的位置和大小,所以不能适用于动态脚本环境。

5. Nick Fetchak的 ie-css3.htc

关于此方法,我在前面的"让IE6/IE7/IE8浏览器支持CSS3属性"这篇文章中已经做过介绍。我是建议您看看这篇文章,倒不是ie-css3.htc这个玩意多么好,而是文中对htc文件以及VML预言做了些介绍,对于您了解IE下实现类似CSS3效果原理有所了解。

6. Keith Clark的ie-css3.js

这是个与IE7.js类似的项目,其选择器可借助其他JavaScript库,所以其本身较小。

7. zoltandulac的cssSandpaper

这是一个使用IE滤镜实现一些CSS3属性的方法。

8. css3pie的css3 PIE.htc

支持:border-radius圆角 、 box-shadow 盒阴影 、 gradient渐变 、 multiple background images多背景 。

下面对第8第方法的做一下简单介绍:

官方网站:http://css3pie.com/

使用方法:

第一步:下载css3 PIE.htc 文件

第二步:将PIE.htc文件上传到你的网站目录中,上传到目录哪里都可以,只要你记住这个目录。

第三步:创建html文件,写一段css3代码,并引入PIE.htc,如下面这段:

  1. #id {
  2. border: 1px solid #999;
  3. -webkit-border-radius: 10px;
  4. -moz-border-radius: 10px;
  5. border-radius: 10px;
  6. behavior: url(path/to/PIE.htc);
  7. }

注意:.htc 文件路径是相对于html文件的路径,而不是相对于css文件。

已知的一些问题:

此方法并不是万能的,也有一些局限性和需要注意的地方。

1. z-index相关问题

IE下这些CSS3效果实现是借助于VML,由VML绘制圆角或是投影效果的容器元素,然后这个容器元素作为目标元素的后兄弟节点插入,如果目标元素 position:absolute 或是 position:relative,则这个css3-container元素将会设置与之一样的z-index值,在DOM tree中,同级的元素总是后面的覆盖前面的,所以这样就实现了覆盖,又避免了可能有其他元素正好插入其中。

所以,问题来了,如果目前元素的position属性为static,也就是默认属性,则z-index属性是没有用的,无覆盖可言,所以此时IE浏览器 下CSS3的渲染是不会成功的。要解决也很简单,设置目标元素position:relative或是设置祖先元素position:relative并 赋予一个z-index值(不可为-1)。

2. 相当路径的问题

IE浏览器的behavior 属性是相对于HTML文档而言的,与CSS其他的属性不一样,不是相对于CSS文档而言的。这使得使用pie.htc文件不怎么方便。如果绝对路径于根目 录,则CSS文件不方便移动;如果相对路径与HTML文档,则pie.htc文件在不同HTML页面见的重用性大大降低。同时,诸如border- image后面的URL属性路径也不好处理。

3. 缩写的问题

使用PIE实现IE下的CSS3渲染(其他方法也是一样),只能使用缩写的形式,例如圆角效果,我们可以设置border-top-left-radius表示左上圆角,但是PIE确实不支持这种写法的,只能是老老实实的缩写。

4. 提供正确的Content-Type

要想让IE浏览器支持htc文件,需要一个有着"text/x-component" 字样的content-type 头部,否则,会忽视behavior。绝大数web服务器提供了正确的content-type,但是还有一部分则有问题。

如果您发现在您的机子上PIE方法无效,也就是htc文件这里指pie.htc文件无效,检查您的服务器配置,可能其需要更新到最新的content-type。例如对于Apache,您可以在.htaccess文件中做如下处理:

  1. AddType text/x-component .htc

但是,由于某种原因,您无法修改服务器配置(例如公用主机,或是空间服务商提供的服务器),您可以用一个PHP文件来间接调用htc文件。我只要给你看下这个PHP文件的代码您就知道什么意思了,如下:

  1. <?php
  2. header( ‘Content-type: text/x-component‘ );
  3. include( ‘pie.htc‘ );
  4. ?>

通过PHP文件来增加一个含有"text/x-component"字样的Content-type头,同时调用pie.htc文件。

关于上面所示的php文件,您可以狠狠地点击这里:pie.php(右键 – [目标|链接另存为]),或者您可以直接新建一个php文件,把上面的两行代码复制进去。或者在本文提供的原始打包资源的wrappers文件夹里面也有此php文件,不过名称是大写的。

如果您使用上述php文件,您需要将pie.php和pie.htc放在同一个文件夹目录下,同时CSS中的behavior写法应该是:

  behavior: url(pie.php);

时间: 2024-10-10 20:41:35

解决浏览器不支持HTML5和CSS3的相关文章

js解决IE8不支持html5,css3的问题(respond.js 的使用注意)

IE8.0及以下不支持html5,css3的解析.目前为止IE8以下的版本使用率在10%左右,网站还是有必要兼容的. 1,在你的所有css最后判断引入两个js文件. html5.js  是用来让ie8浏览器能将h5标签转化为块元素 respond.js   是让ie8支持css3的js <!--[if lt IE9]> <script src="html5.js"></script> <script src="Respond.js&q

如何判断当前浏览器是否支持html5的video标签

如何判断当前浏览器是否支持html5的video标签: html5新增了video标签,用于播放视频,功能非常的强大,但是由于当前很多浏览器还不支持,所以在使用的时候需要判断当前浏览器是否支持此标签,下面就提供一段能够实现此功能的代码,希望能够给需要的朋友带来一定的帮助. 代码如下: //检测是否支持HTML5 function checkVideo() { if(!!document.createElement('video').canPlayType){ var vidTest = docu

解决ie不支持HTML5 placeholder的问题

https://github.com/mathiasbynens/jquery-placeholder 解决ie不支持HTML5 placeholder的问题Requires jQuery 1.6+. For an older version of this plugin that works under jQuery 1.4.2+, see v1.8.7.Works in all A-grade browsers, including IE6.

让VS2010也支持html5和css3语法验证

步骤: 首先打开VS2010或者可自行下载均可,我这里是利用VS的扩展器 弹出如下画面,然后选在,联机库,在右上角输入css3,即可看到下面,然后选中你想要安装的扩展,这里我选择要支持html5和css3.0的两个下载 首先下载VS2010sp1-KB983509.exe的VS2010sp1的补丁,然后安装 还需要css3.0包,在下载CSS3 IS 2.1.1.mis,然后安装,此时这两部均已安装,VS2010中已经CSS3.0选项,但是选择不了, 在路径C:\Program Files\Mi

查询浏览器是否支持html5

js判断 插入js代码====================================================== <script> window.onload = function() { if (window.applicationCache) { alert("你的浏览器支持HTML5"); } else { alert("你的浏览器不支持HTML5"); } } </script> ==================

JS判断浏览器是否支持某一个CSS3属性的最佳实践

css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的animation-play-state,就只有部分浏览器支持. 检测方法 下面的方法可以使用脚本判断浏览器是否支持某一个CSS3属性: /**2017-01-05 * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/false

JS判断浏览器是否支持某一个CSS3属性

1.引子 css3的出现让浏览器的表现更加的丰富多彩,表现冲击最大的就是动画了,在日常书写动画的时候,很有必要去事先判断浏览器是否支持,尤其是在写CSS3动画库的时候.比如transition的animation-play-state,就只有部分浏览器支持. 2.检测方法 下面的方法可以使用脚本判断浏览器是否支持某一个CSS3属性: Js代码   /** * 判断浏览器是否支持某一个CSS3属性 * @param {String} 属性名称 * @return {Boolean} true/fa

如何检测您的浏览器是否支持HTML5视频

如何检测您的浏览器是否支持HTML5视频,看下面代码: function checkVideo() { if(!!document.createElement('video').canPlayType){ var vidTest=document.createElement("video"); oggTest=vidTest.canPlayType('video/ogg; codecs="theora, vorbis"'); if (!oggTest){ h264T

ie8以下版本(包括ie8)的浏览器不支持html5标签属性解决方案(Modernizr 2.6.2插件的使用)

今天脑抽想用html5标签设计一个网页,我本人用的是火狐浏览器,都弄好后我发现一个很严重的问题,除了ie9以下的浏览器都不能支持html5标签(article,aside,dialog,footer,header,section,footer,nav,figure,menu). 我上网找了好多中方法,有网友说使用 <!--[if lt IE9]> <script> (function() { if (! /*@[email protected]*/ 0) return; var e