【问题标题】:How to feather the edges of an image using CSS如何使用 CSS 羽化图像的边缘
【发布时间】:2014-10-29 18:51:30
【问题描述】:

我有一个包含 3 个列表项的无序列表。每个列表项都有一个图像和 3 个包含文本的 div。我希望仅使用 CSS 对图像的边缘进行羽化处理。

我的网站found here 当前通过使用以下 html 的图像具有羽化效果。然而,它似乎使整个图像羽化,相反,我只需要非常边缘是强大的羽化,然后随着它的跨越而变得不那么羽化。 50px 向图像四面的中心。

HTML:

<p class="vignette"><img src="http://upload.wikimedia.org/wikipedia/commons/f/f8/Ellen_H._Swallow_Richards_House_Boston_MA_01.jpg" alt="" /></p>

CSS:

p.vignette {
  position: relative;
}

p.vignette img {
 display: block;
 width:80%;
margin-left:auto;
margin-right:auto;
 margin-top:6%;

}

p.vignette:after {
 -moz-box-shadow: inset 0 0 180px #defeec;
 -webkit-box-shadow: inset 0 0 180px #defeec;
 box-shadow: inset 0 0 180px #defeec;
 position: absolute;
 top: 0;
 left: 0;
 width: 100%;
 height: 100%;
 z-index: 2;
 content: "";
}

您可以看到我使用了 180 像素的嵌入框阴影,但这会使整个图像略微羽化,如果我使用 50 像素,则几乎看不到!如何使边缘变得强烈,然后向中心逐渐变弱?

谢谢!

【问题讨论】:

标签: html css image insets


【解决方案1】:

你需要改变一些东西才能让它工作。首先,从&lt;a class='divLink'&gt; 标签中取出inline-block。然后尝试以下操作:

.vignette {
    width: 80%;
    margin: 1em auto;
    box-shadow: 50px 50px 113px #defeec inset,-50px -50px 110px #defeec inset;
    height: 150px;
    background-size: contain;
    background-repeat: no-repeat;
}

然后使用以下html(并废弃&lt;img&gt;标签)

<p class="vignette" style="background-image: url(http://upload.wikimedia.org/wikipedia/commons/f/f8/Ellen_H._Swallow_Richards_House_Boston_MA_01.jpg);"></p>

当然,您也可以将 background-image 规则放在 css 块中,但有时将背景图片声明为内联会更有意义,尤其是当您希望有许多照片或类似内容时。

【讨论】:

  • 谢谢杰克,我想我已经正确应用了你所说的,但是现在绿色框周围似乎有一个绿色边框。我需要图像边缘渗入周围盒子的颜色。我已经链接到下面的一个完美示例,您可以在其中看到照片的边缘渗入它周围的米色。这就是我需要做的,但边缘需要是绿色的,就像列表项框一样。第二个链接是我的演示站点,其中应用了您的更改。感谢您的任何反馈! testsite24.byethost17.com/temp/screenshot.pngtestsite24.byethost17.com/temp/index.html
  • 小提琴向我展示了整个图像的羽毛效果,而不仅仅是边框?那房子应该是干净的,它的边缘应该渗入绿色......也许我错过了什么?
  • @Nova 对,您需要调整 box-shadow 规则上设置的 50px 值。使它们更小以减少褪色,使它们更大以减少褪色。见:developer.mozilla.org/en-US/docs/Web/CSS/box-shadow
  • @Nova 把margin-right:50%;margin-left:50%; 去掉,换成margin-left:auto;margin-right:auto; 或者margin: 0 auto;
  • @Nova 此外,您可以根据需要添加尽可能多的box-shadows 以在您想要的位置获得淡入淡出。只需用逗号分隔它们:box-shadow:x y blur color, x y blur color, x y blur color 等。
【解决方案2】:

创建一个将进入vignette 的div,并将其命名为fade。但它必须高于img

.fade {
        height: 100%;
        width: 100%;
        position:absolute;
        background: -webkit-linear-gradient(left, 
                    rgba(0,0,0,0.65) 0%, 
                    rgba(0,0,0,0) 20%,
                    rgba(0,0,0,0) 80%,
                    rgba(0,0,0,0.65) 100%
        );
    }
<p class="vignette">
        <div class="fade"></div>
        <img src="http://upload.wikimedia.org/wikipedia/commons/f/f8/Ellen_H._Swallow_Richards_House_Boston_MA_01.jpg" alt="" />
    </p>

【讨论】:

  • 感谢您的快速cmets!埃里克,我究竟如何将一个类应用到另一个类?我只是在css中这样做吗? p.vignette 淡入淡出{背景:-webkit-linear-gradient(left, rgba(0,0,0,0.65) 0%, rgba(0,0,0,0) 20%, rgba(0,0,0, 0) 80%, RGBA(0,0,0,0.65) 100%); }
  • 通过更改您的 HTML:&lt;p class vignette fade&gt;
  • 不,你想要&lt;p class="vignette fade"&gt;
  • 好的,我现在有了 html:

    upload.wikimedia.org/wikipedia/commons/f/f8/…" alt="" />

    并添加了类 p。小插图淡出之前的小插图代码,但它似乎没有改变任何东西。结果可以在我上面的演示链接中看到。
  • 对我的答案进行一些修改,我会尽快发布。
猜你喜欢
  • 2021-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-28
  • 2019-09-21
  • 2014-09-02
相关资源
最近更新 更多