使用 Bootstrap 4 时如何模糊前景中的图像边缘

How to blur image edges in foreground when using Bootstrap 4

我正在尝试模糊图像的边缘,例如 中显示的图片。

我需要在前景图像(不是 css 中的一组图像)上执行此操作,因为 img url 是动态更改的。但是 box-shadow 似乎对前景图像没有影响。另外我正在使用 Bootstrap 4.3 img-fluid class.

换句话说,上面引用的 SO post 处的代码有效,但此图像的边缘没有模糊(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。我尝试用特定值覆盖它们(我不想这样做以保持响应图像),但它也没有效果。

不幸的是,CSS 'Inset' 框阴影不适用于 img 标签。要解决此问题,您有几个选项,例如,可以将图像包装在 div 标签上并使用伪元素在其上应用 box-shadow

这里的问题是,作为标准,div 标签是一个 "Block" 元素,因此将覆盖整个父级宽度。您可以应用 display: inline-blockfloat: left 属性 来解决此问题。也许不是最好的 "standard-compliant",但可以处理这种情况。我在下面附上这个概念的例子:

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>

inset 的样式图片有问题。

但是您有两种选择。您可以添加一个具有相对位置的容器,并在该容器中添加具有 class img-fluid 和 div 绝对位置的 img。

第二个选项是设置一个带有相对位置和内部 img 的容器,并使用伪 class ::after.

设置该容器的样式

如果您这样做,它会起作用,但是如果 img 小于容器,则正确的框阴影会出现问题。如果您将使用一些 JS 代码,您可以修复这些问题。

我用 jQuery 做了一个例子(因为你使用的是 bootstrap 而 bootstrap 使用的是 jquery)。

https://codesandbox.io/s/flamboyant-wing-z9lhm

您需要用 div 元素包装 img 标签,class 名称为 .img-blur,因此可以使用 :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>