如何使 div 阴影覆盖其子元素?

3
我想让我的div的内阴影覆盖在它的内容上(请注意,我不仅仅想让图片有内阴影,我有一个更复杂的可滚动div,有很多子元素,这只是一个最简单的例子)。

div {
  white-space: nowrap;
  box-shadow: inset 0 0 10px #000000;
}

img {
  display: block;
}
<div>
  <img src="http://www.claireking.com/wp-content/uploads/2018/01/images.png" />
</div>

4个回答

2
只需为阴影添加填充即可。
div {
  white-space: nowrap;
  box-shadow: inset 0 0 10px #000000;
  padding: 10px;
}

查看工作的 fiddle: https://jsfiddle.net/f0qasdo6/ 更新:另一个有效的示例,而不改变 div 的大小:
div {
  white-space: nowrap;
  position: relative;
}

div:before {
  content: '';
  display: block;
  position: absolute;
  top:0;
  left: 0;
  right: 0;
  bottom: 0;
  box-shadow: inset 0 0 10px #000000;
}

这种方法的缺点是您无法单击 div 内部的内容,因此它可以用于为不可交互的块添加效果。
参见 fiddle: https://jsfiddle.net/r3t2p2cw/

正如我所说,我希望阴影覆盖在孩子们身上,而不想改变容器的大小。 - ladybug
你想要为图像添加阴影吗? - Nihal
@ladybug 我有另一个想法。让我快速检查一下。 - Vitalii Chmovzh
@Nihal 如我在问题中所说:“请注意,我不仅仅希望图像具有内部阴影”。 - ladybug

2
同意Vitalii Chmovzh的答案,但如果你不想通过填充增加任何空间,请使用以下代码来设置您的img标签。
img{
  display: block;
  position:relative;
  z-index:-1;
}

不改变您的盒模型大小。
更新的 fiddle

1
这样做的问题是图像被渲染在阴影之上。
尝试这个,
div {
  white-space: nowrap;
    position: relative;
}

img{
  display: block;
}

div::before {
  box-shadow: inset 0 0 10px #000000;
    position: absolute;
    width: 100%;
    height: 100%;
    content: "";
}

0

不知道为什么你的图片对我无效。这是解决方案:

div {
  width: 70%;
  white-space: nowrap;
  box-shadow: inset 0 0 10px #000000;
}

img{
  width: 100%;
  display: block;
  position: relative;
  z-index: -1;
}

https://jsfiddle.net/tp9pz9w0/7/


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