【发布时间】:2011-07-20 23:37:51
【问题描述】:
我试图在一个简单的盒子上实现内阴影效果,例如: alt text http://gotinsane.com/test.jpg
绿色框是另一个框内的内容。
我的问题是,如果我给内容框任何背景,外框框阴影效果就会消失!
Here an example of my problem(带有标记和 css),我已将内容高度设置为较小以证明问题 - atm 我真的不关心 IE*,这只是一个测试。
有什么想法吗?
更新
框内的内容有点像幻灯片,here an example (original problem)。 三十点的答案可以解决问题,但它迫使我做一些小技巧,改变内容功能的包装器背景:example here (thirtydot trick)。
这可以是一个解决方案,但是我不太喜欢它并且仍然不明白为什么外框阴影会落后于内框背景(颜色,图像)
更新 2
在另一个论坛上谈论这个问题,我found another way:基本上,我不是在包装器上使用box-shadow,而是作为掩码,我直接在内容上使用box-shadow和border-radius(@ 987654335@元素)
然而,“面具”效果正是我想要实现的,所以这也不是解决方案。
我仍然不明白内部元素背景如何以及为什么会干扰外部元素设计,或者为什么从外部元素中掉落的阴影会落在内部元素的后面。这可能是一个 CSS 错误吗?
UPDATE3
有人打开了bug on mozilla,得到了解决“问题”的答案:
来自http://www.w3.org/TR/css3-background/#the-box-shadow:
就堆叠上下文和绘制顺序而言, 元素被绘制在该元素背景的正下方,并且 元素的内部阴影直接绘制在背景的上方 该元素(在边框和边框图像下方,如果有的话)。
特别是,元素的 children 的背景会在上面绘制 嵌入的阴影(实际上它们画在边框和背景之上 元素本身)。
所以渲染正是规范所要求的。
UPDATE4
Fabio A. 指出了另一个解决方案,with css3 pointer-events。
看起来不错,也适用于 IE8 ;)
【问题讨论】:
-
你只是想要一些看起来像你的形象的东西?
-
是的 - 但内框背景应该与外框无关 - 因为它可以是所有内容、图像、颜色半径等。
-
你必须坚持你所拥有的。我tried this,但它无法使用,因为你不能点击内框阴影内的东西。我确实多次尝试找到一种方法来按照您的意愿进行操作,但我认为它不存在。我让你的修复版本稍微干净了一点:http://jsfiddle.net/sMDsX/11/ - 你不能传递任何东西给
removeClass()来删除所有类。 -
'我仍然不明白内部元素背景如何以及为什么会干扰外部元素设计' - 我想这是因为内部元素有效地绘制在其父元素之上 (先绘制父级,然后在其上绘制子级)。通常这是直观的事情(例如,涂抹背景图像,在大胆的
position:relative诡计上重叠边框角等)。因此,通过代理,您所期望的是边框阴影落在带边框的框上方的项目上。 -
我做了一个速写,一张图片值一千个字:pandora.pinkgothic.com/why-shadow.png - 非常夸张的 HTML 层的“侧面”可视化。 :)
标签: background shadow css