Chrome中的Box-shadow和border-radius bug问题

35

我一直在尝试使用CSS3,发现了一些奇怪的问题。这是DIV样式的一部分:

border:#446429 solid 1px;
border-radius:15px;
-moz-border-radius:15px;
-webkit-border-radius:15px;
box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;
-moz-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;
-webkit-box-shadow:3px 0px 15px #000000 inset,0px 3px 15px #000000 inset;

在Opera和Firefox中,渲染效果相同且完美:

alt text

但是Chrome将阴影渲染在边框外:

alt text

这样正常吗?还是我漏掉了重要的东西?


3
我前几天发现了一个bug,让我很难过。更令我难过的是,Safari根本不支持内阴影效果。 - jessegavin
10个回答

28

截至今天,该问题已经得到修复并在开发通道中可用!(当它进入稳定通道时,需要4到10周时间才能到达所有人)更多细节请参见:http://paulirish.com/2011/chrome-inset-box-shadow-bug-fixed/ - Paul Irish
3
即使他们说已经修复,但我仍然遇到了问题:如果我设置了一个带有1像素模糊和仅有底部边界半径的插入式阴影,那么这个元素的两侧会出现两条难看的均匀条纹(不是模糊的)。如果我改变阴影模糊甚至只有一个像素,它们就会消失,而这些条纹的大小与底部阴影的水平值相关,而与垂直值无关。如果这是“fixed”…… - Bakaburg
2
今天是2011年9月12日,这仍然是一个问题...它还没有被解决(即使在最新版本的Chrome(Chrome v13)中也是如此)。 - zakdances
2
现在已经是2013年了,但这个问题还没有被解决!各位,请给这个bug点个赞。对于人类继续正确地使用CSS来说,这非常重要。 - vsync
我仍然看到这个,或者类似的东西。 - ptim
显示剩余2条评论

6

在首先添加与背景颜色相同的内嵌阴影似乎可以很好地工作,而不需要在页面上添加额外的标记。

例如,如果您有一个白色背景的页面:

-webkit-box-shadow:1px 1px 1px #fff inset,0px 0px 5px #333 inset;

3

我刚找到解决方法,但需要添加额外的标记。我们需要将带有圆角和内阴影的元素放置到另一个容器中,该容器具有 相同的 圆角和溢出隐藏。

<div class="foo"><div>Hello!</div></div>
<style type="text/css">
    .foo {-webkit-border-radius: 10px; overflow: hidden;}
    .foo div {-webkit-border-radius: 10px; -webkit-box-shadow: inset 1px 1px rgba(50%, 50%, 50%, .5);}
</style>

以上公布的修复方案会导致边框崩溃,边框半径与元素下面的背景图不兼容(因为边框颜色的原因)。

谢谢。


谢谢您的回答,但我认为添加更多标记只是为了隐藏一个浏览器的错误并不是最好的决定。此外,在Webkit方面已经取得了重大进展,可能会在不久的将来得到修复。 - Klaster_1 Нет войне
一年过去了..但这个漏洞还没有修复。 - Tony

3
我看到的唯一解决办法是在具有阴影的元素上放置一个边框,并使该边框宽度大于阴影扩散。因此,对于像这样的内嵌式阴影:
```CSS box-shadow: inset 0 0 10px rgba(0,0,0,0.5); ```
你需要添加一个较宽的边框来解决问题。
box-shadow:inset 0 0 7px #000;

您需要添加类似以下的边框样式:
border:solid 7px #fff;

在box-shadow声明中,您需要匹配(或超过)第三个数字与边框宽度相同。如果您不想在元素上有一个又粗又老的边框,您显然需要将边框颜色与其背后的背景颜色相同。因此,如果您的元素位于图案图像或渐变之上,则这种解决方法并没有太大帮助。但是,在纯色背景上,它的效果还是不错的。


谢谢你的解决方法,但是这个 bug 正好出现在渐变和图案上 :) - Klaster_1 Нет войне

1

根据Chromium问题评论,这是Chrome特定的错误。不知道WebKit修复是否对Chrome有好处。 - Klaster_1 Нет войне

1

十二年后的2023年,我仍然看到一些网站出现了那个bug。

我注意到通过将模糊半径设置为较高的值并同时将扩散半径设置为负值,可以消除这个讨厌的方形阴影。

-webkit-box-shadow: 0 0 11px -5px #555;
box-shadow: 0 0 28px -16px #1c3d5c;

0
Beth Fauld的解决方案几乎可行,只有一个小错误,它应该看起来像这样:
-webkit-box-shadow:1px 1px 0px 1px #fff inset, 0px 0px 5px #333 inset;

#fff 是背景颜色(盒子外部),而 #333 是阴影颜色。

-webkit-box-shadow 中的第三个值定义了模糊大小,而第四个值定义了阴影(不透明)大小,因此应将后者设置为 1px。


0

使用负值已经解决了我的问题。

-webkit-border-radius:10px;
-webkit-box-shadow: -1px -1px 2px #CCC;

你的解决方案没有使用内嵌盒子阴影。对于非内嵌盒子阴影,该错误不会出现。 - John Kurlak

0

这个 bug 已经在最新的金丝雀版本中修复了。:)


0

试试这个 -webkit-box-shadow: inset 0px 0 7px rgba(255, 242, 94, 0.4); 使用rgba似乎可以解决问题。

祝好运!


不知道你是怎么解决的。我正在使用rgba,但它仍然显示在边框半径之外。只有在Mac上才能正常显示。 - Ragnar
对我来说似乎也不起作用(在Win2k3上的6.0.472.55)。 - Klaster_1 Нет войне

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接