【问题标题】:CSS border leaving small 1px gap in IECSS边框在IE中留下1px的小间隙
【发布时间】:2014-06-30 09:11:38
【问题描述】:

我有一个带有纹理边框图像的 div,启用了填充。这在现代浏览器上显示良好。但是,当使用不支持边框图像的旧版浏览器时,我创建了一个回退到圆角边框的方法。在 IE ( 9, 10 ) 上,内容和右边框之间的垂直间隙非常小。有时间隙不存在,但水平缩放我的浏览器窗口会使间隙闪烁。

这是一个突出问题的 JSfiddle:http://jsfiddle.net/67tG6/8/

CSS

.menu_tab {
    width: 90px;
    height:250px;
    background: rgb(230,140,130);
    border: 28px solid rgb(230,140,130);
border-image: url("http://chromafunk.com/images/menu_tab.png") 30 30 40 30 fill round;
    border-radius: 20px;
    border-top: 0px;
    background-clip: padding-box;
 }

HTML

<div class="menu_tab"></div>

间隙的图像:

如果我删除边框半径或背景剪辑,问题就会消失。但是,支持边框图像的浏览器需要存在背景剪辑。所以我想解决半径和剪辑仍然存在的问题。

有人对此有什么想法吗?

【问题讨论】:

    标签: css internet-explorer border


    【解决方案1】:

    对于 IE 10 及更早版本,您可以尝试使用一些 javascript 和一个附加类来替换边框:

    css:

    .menu_tab {
    width: 90px;
    height:250px;
    background: rgb(230,140,130);
    border: 28px solid rgb(230,140,130);
    border-image: url("http://chromafunk.com/images/menu_tab.png") 30 30 40 30 fill round;
    border-radius: 20px;
    border-top: 0px;
    background-clip: padding-box;
    }
    
    .menu_tab_ie{
        padding:28px;
        padding-top:0px;
        border:none;
    }
    

    How can you detect the version of a browser?

    navigator.bwsr= (function(){
    var ua= navigator.userAgent, tem, 
    M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
    if(/trident/i.test(M[1])){
        tem=  /\brv[ :]+(\d+)/g.exec(ua) || [];
        return 'IE '+(tem[1] || '');
    }
    if(M[1]=== 'Chrome'){
        tem= ua.match(/\bOPR\/(\d+)/)
        if(tem!= null) return 'Opera '+tem[1];
    }
    M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
    if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
    return M.join(' ');
    

    })();

    --这将返回一个字符串,例如'Chrome 35'或'IE 11'。


    这将检查 'IE' 和早于 11 的版本,以添加将应用填充和删除边框的类:

    var x = navigator.bwsr;
    
    if(x.indexOf('IE')>-1){
      var xNum = x.split(' ');
      var x2=Number(xNum[1]);
      if(x2<11){
        $('.menu_tab').addClass('menu_tab_ie');
      }
      else {console.log('border-image should display');}
    }
    else {console.log('border-image should display');}
    

    这是您的 jsfiddle 与这些编辑:

    http://jsfiddle.net/67tG6/18/

    【讨论】:

    • 谢谢克里斯。这很有魅力。不确定为什么它起作用了!我不知道定义了边界半径仍然会显示边界,即使边界:无。这是一件好事。不过,我很好奇为什么我首先遇到了这个问题。据我所知,圆角边框是非常标准的东西。我以前用过它们,但没有注意到 IE9/10 上的差距。然而在这个例子中,我得到了差距。如果您对出现差距的原因有任何见解,我将不胜感激。