我正在尝试模糊图像的边缘,就像 https://stackoverflow.com/a/24953573 显示的图片一样。
我需要在前景图像(不是 css 中设置的图像)上执行此操作,因为 img url 是动态更改的。但框形阴影似乎对前景图像没有影响。 我也在使用 Bootstrap 4.3img-fluid
类。
换句话说,上面引用的SO帖子中的代码有效,但是此图像上的边缘没有模糊(为简单起见,css内联):
<img src="/images/mypic.jpg"
class="img-fluid"
style="box-shadow: 0 0 5px 5px white inset;">
.img-fluid
设置max-width: 100%
和height:auto
。 我尝试用特定值覆盖这些值(我不想这样做来维护响应式图像),但它也没有效果。
你需要用类名.img-blur
div
元素来包装img
标签,所以使用伪元素:after
可以在元素的内容之后插入一些内容。
.img-blur{
position: relative;
display: inline-block;
}
.img-blur:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: inset 0 0 10px 10px #ffffff;
}
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.4.1/css/bootstrap.min.css">
<div class="container">
<div class="row" >
<div class="col-4 my-3">
<div class="img-blur">
<img class="img-fluid" src="https://via.placeholder.com/400x400/22ff22">
</div>
</div>
<div class="col-4 my-3">
<div class="img-blur">
<img class="img-fluid" src="https://via.placeholder.com/400x400/ffff22">
</div>
</div>
<div class="col-4 my-3">
<div class="img-blur">
<img class="img-fluid" src="https://via.placeholder.com/400x400/22ff22">
</div>
</div>
</div>
</div>
带有inset
的样式图像存在问题。
但是您有 2 种选择来执行此操作。您可以添加一个具有相对位置的容器,并在内部将带有类img-fluid
的 img 和带有绝对位置的div 添加到此容器中。
第二种选择是设置一个容器,其中包含相对位置和 img,并使用伪类::after
设置该容器的样式。
如果你这样做,它可以工作,但如果 img 小于容器,右框阴影就会出现问题。如果您将使用一些 JS 代码,则可以修复这些。
我用jQuery做了一个例子(因为你正在使用bootstrap,而bootstrap正在使用jquery)。
https://codesandbox.io/s/flamboyant-wing-z9lhm
不幸的是,CSS 'Inset' Box 阴影不适用于img
标签。要解决此问题,您有几个选项,例如,可以将图像包装在div
标签上,并使用伪元素在其上应用box-shadow
。
这里的问题是,作为标准,div
标签是一个"Block"元素,因此将覆盖整个父宽度。您可以使用display: inline-block
或float: left
属性来解决此问题。也许不是最好的"符合标准",但可以处理这种情况。我在下面附上一个包含此概念的示例:
div {
position: relative;
display: inline-block;
}
div:after {
content: '';
position: absolute;
top: 0;
left: 0;
width: 100%;
height: 100%;
box-shadow: 0 0 5px 5px white inset;
}
<div>
<img src="https://picsum.photos/200/300" class="img-fluid">
</div>