使用图像渲染CSS3插入阴影

Jos*_*tos 9 css3

我想利用我正在处理的网站的新CSS3框阴影功能.问题是,如果内部有img(边框在图像区域周围隐藏),Chrome 9.0.5和Opera 10无法正确渲染插入边框.

我知道box-shadow仍在进行中,但我希望浏览器能够完全支持它或完全忽略它.

<!doctype html>
<html>
  <head>
    <style>
        div {
            border: 1px solid black;
            width: 300px;
            height: 200px;
            overflow: hidden;

            // CSS3 inset shade
            -moz-box-shadow: inset 0 0 20px red;
            -webkit-box-shadow: inset 0 0 20px red;
            box-shadow: inset 0 0 20px red;
        }
    </style>
  </head>
  <body>
        <div>
            <img src="http://www.google.com/images/logos/ps_logo2.png" width="364" height="126" alt="" />
        </div>
  </body>
</html>
Run Code Online (Sandbox Code Playgroud)

有人知道一些解决方法来正确渲染红色阴影吗?

谢谢!

编辑:我对答案很满意,但只是想添加一个实时链接来帮助其他人.这里是

Sha*_*una 19

使用插入时,框阴影位于堆叠顺序的背景上方.因此,div中的任何图像都将覆盖阴影.

根据W3C规范

在堆叠上下文和绘制顺序方面,元素的外部阴影直接绘制在该元素的背景下方,元素的内部阴影直接绘制在该元素的背景上方(在边框和边框图像下方,如果有的话).

换句话说,Chrome和Opera正确地做到了(FTR,FF 3.6.13和Opera一样).

如果您希望阴影与图像重叠,则根据您的需要,您可以选择几种不同的选项:

  1. 将图像设置background为div 的属性.
  2. 绝对将div放在带有图像的div上,使其大小相同,并将阴影放在那里(不是真的推荐,因为它是复杂的并且添加了非语义标记).
  3. 确保图像的背景是透明的(这将允许阴影显示,但非透明像素仍将覆盖阴影).
  4. 请考虑使用border-image和gradient.(这个也有点复杂,但是将渐变放在边框本身,你可以使用RGBA淡化为透明.)


小智 11

有一个更好的解决方案 - 只需在你的img上设置这个CSS.

img {
  z-index: -1;
  position: relative
}
Run Code Online (Sandbox Code Playgroud)

示例:http: //trentwalton.com/2010/11/22/css-box-shadowinset/