【问题标题】:box-shadow and border rendering bug盒子阴影和边框渲染错误
【发布时间】:2012-02-15 11:06:37
【问题描述】:

导致“错误”的 Css:

div {
    width: 100px;
    height: 100px;
    background-color: transparent;
    box-shadow: 0 0 15px 20px #000 inset;
    border: 100px solid #000 ;
    border-radius: 150px;
}

看起来在 inset box-shadow 和周围的边框之间有某种 1px 的透明边框。

看看this live example,我可以在 Chrome、Firefox 和 IE 的最新版本中重现这种渲染怪异。 (因此不依赖于渲染引擎)

并且它不会发生在较低的边界半径(换句话说,它不会发生在形状不是圆形时)

编辑:

我没有找到让这个东西消失的方法,但是使用低不透明度使它几乎不可见。在真正的解决方案出现之前,我将使用该技术(并让问题悬而未决)。

【问题讨论】:

    标签: border css


    【解决方案1】:

    绝对看起来像 box-shadow 中的错误(使用扩展 arg 时)。作为一种解决方法,只需使用覆盖 div。代码如下:

    html:

    <div></div>
    <div class="overlay"></div>
    

    css:

    div {
        margin:10px;
        width: 100px;
        height: 100px;
        background-color: transparent;
        box-shadow: 0 0 15px 20px #000 inset;
        border: 100px solid #000 ;
        border-radius: 150px;
    }
    div.overlay {
        margin-top:-310px;
    }
    

    这是小提琴:http://jsfiddle.net/eX3cy/1/

    编辑:

    这里也调整了模糊和散布(以表明可以实现相同的结果,减去不需要的部分):http://jsfiddle.net/wgpzL/

    【讨论】:

    • 是的,这并不是我所说的解决方法,即使错误不太明显。如果有帮助的话,它与传播无关,使用四个阴影可以达到相同的效果,每个角一个:box-shadow: 15px 0 15px #000 inset, -15px 0 15px #000 inset, 0 15px 15px #000 inset, 0 -15px 15px #000 inset(并且错误仍然存​​在,没有使用任何传播)
    • @Pioul 只是想说,在您给出的示例中,将点差设置为 0 会使该行消失。该错误的原因是浏览器开发人员诊断/修复。我们所能做的就是利用我们所拥有的。在这种情况下,上面的代码产生与您的代码相同的结果,没有不需要的线/圆。除非/直到浏览器更新以改变行为,否则它会变得更好。
    • 哦,是的,同意传播的东西。但是您提供的代码不会产生无错误的效果,它只会使其不那么明显(但它仍然在这里,并且仍然困扰着我 - 我知道,我很烦人:D)。另一种使其不那么明显的方法是使用更浅的颜色(如果背景是#fff,则如#eee)。但是,是的,错误仍然存​​在:/
    • 哇没看到你的编辑,不错。但遗憾的是,一旦我们将不透明度添加到等式中,修复就会失去效果:/
    • 有没有人想出更好的解决方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多