IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)

王为仁 2015-06-09

IE兼容CSS3圆角border-radius,box-shadow,text-shadow的方法

1.下载ie-css3.htc

2.CSS

IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
box {
  -moz-border-radius: 15px; /* Firefox */
  -webkit-border-radius: 15px; /* Safari 和 Chrome */
  border-radius: 15px; /* Opera 10.5+, 以及使用了IE-CSS3的IE浏览器 */

  -moz-box-shadow: 10px 10px 20px #000; /* Firefox */
  -webkit-box-shadow: 10px 10px 20px #000; /* Safari 和 Chrome */
  box-shadow: 10px 10px 20px #000; /* Opera 10.5+, 以及使用了IE-CSS3的IE浏览器 */

  behavior: url(ie-css3.htc); /* 通知IE浏览器调用脚本作用于'box'类 */
}
IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)

3.问题:

一、只能同时4角圆角,不能单独设置;

二、div上可以正常使用,测试text文本框,会出现异常;

三、CSS文件要和页面在同一目录下,否则无效

四、当前元素一定要有定位属性,像是position:relative或是position:absolute属性。

五、z-index值一定要比周围元素的要高,否则……只能说抱歉了~~

4.支持的样式及状态说明

参见下表:

border-radius为元素四个角设置圆角属性
元素边框
只设置一个角落的圆角属性
box-shadow模糊大小参数
偏移值
不支持除了黑色(#000)以外的其他颜色
text-shadow模糊大小参数
偏移值
颜色值
IE下的表现与Firefox/Safari/Chrome有一点点的差异,原因不详
 
 
标签: css3

在这时碰到了一个圆角边框的问题,以前的代码是在每个页面写一个固定结构的div,使用背景图片来实现圆角边框。代码结构大致如下:

.top_border{background:url(topborder.png);}
.left_border{background:url(leftborder.png);}
.right_border{background:url(rightborder.png);}
.bottom_border{background:url(bottomborder.png);}
IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
<div>
      <div class="top_border"></div>
      <div class="left_border"></div>

     <div class="content">
    ...
     </div>

      <div class="right_border"></div>
      <div class="bottom_border"></div>
<div>
IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)

在重构时,我直接把这个结构修改为最简化的版本

<div class="content"></div>

这里就有点问题:使用boder-radius可以实现圆角边框,但是不支持IE7 、IE8。

当时我认为,我的这个规范是正确的,所以希望通过不修改HTML的代码结构来完成对IE7/IE8的兼容。

搜索了一下IE7/IE8的解决方案:http://www.cnblogs.com/binyong/archive/2009/11/30/1613376.html

就以此为基础,使用js来对IE7/IE8进行兼容。主要代码逻辑如下: 

IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)
if( typeof (document.documentElement.style["border-radius"]) == "string")//判断是否支持
{
    $.fn.extend({//实现圆角
          borderRadius : function (r)
          {
        var b = this.wrap("<div></div>").parent();
        //以下代码 主要以逻辑为主 并非真实执行代码 ,为四角 border-radius = 5的实现        

             //调整margin 及 宽度 以符合旧div的布局   
             b.css( {margin : this.css("margin") , "width ": this.clientWidth});        
             this.css({margin:"0"});                
             var borderColor = this.css("border-color");
        var background = this.css("background-color");
         var borderStyle = this.css("borer-style");

        //重设边框,只保留两侧边框        
             this.css({"border-top-width":"0","border-bottom-width":"0"});//             
             
        //创建HTML结构,实现上下边框
        var setting = { m: [1,2,3,5],bw : [1,1,2,0] };
        var i = 0;
        for(; i < 3; i++)
        {
          var t = $("<b><b>").css({"height": 1 , "margin" : "0 " + setting.m[i] + "px",
              "border-left-width" : setting.bw[i] +"px","border-right-width" : setting.bw[i] +"px",
              "border-color":borderColor,"background-color":background});
          b.append(t);
          b.prepend(t.clone(true));
        }
        var t = $("<b><b>").css({"height": 1 , "margin" : "0 " + setting.m[i] + "px",
              "border-width" : "0",
              background-color":borderColor});
        b.append(t);
        b.prepend(t.clone(true));
          }
    });
    $(".content").borderRadius(5);//设置圆角
    $(".border1").borderRadius(5);
}
IE兼容CSS3圆角border-radius的方法(同时兼容box-shadow,text-shadow)

虽然运行时的HTML结构变化了,但是编码时的HTML结构没有变化,也算是一种兼容方式吧。

相关推荐