CSS揭示掩蔽外的元素

3

我有一个单一元素,它有一个不重复的 background-image ,在 background-position: 4px 4px 的位置。这个图片是一个头像,它右侧有一个单独的段落,margin-left: 120px 以使文本不覆盖在 background-image 上方。我已经在图像元素上实现了这种效果,但为了巩固我对 CSS 掩模的理解,我想确定如何在 background-image 上应用相同的效果。这是我的当前代码(仅用于调试而使用的紫红色现在在这里以帮助可视化问题):

/***
-webkit- prefixes automatically appended by my system software.
Testing with Waterfox first, Chrome second.
***/
background-color: #f0f;
background-image: url(avatar.png);
mask-image: radial-gradient(ellipse at center, rgba(255,255,255,1) 1%,rgba(255,255,255,1) 50%,rgba(255,255,255,0) 70%,rgba(255,255,255,0) 100%);
mask-position: 4px 4px;
mask-size: 100px 100px;

重复遮罩溢出

mask-repeat: no-repeat;可以隐藏其他所有元素(例如子段落元素),而大多数其他mask-repeat值仅以示例图像中演示的圆形效果重复。我已经阅读了Mozilla Developer Network的Mask文档,但似乎没有什么帮助。当然,我可以玩弄CSS生成的内容,但我将无法学到任何东西并限制自己的设计能力。

如何使用CSS仅遮罩元素的一部分而不隐藏其余元素或其子元素?

.preface {
  overflow: auto;
}

.preface .synopsis {
  background-color: #f0f;
  background-image: url(https://picsum.photos/id/1074/110/110);
  background-position: 4px 4px;
  background-repeat: no-repeat;
  float: left;
  height: 108px;
  -webkit-mask-image: radial-gradient(ellipse at center, rgba(255, 255, 255, 1) 1%, rgba(255, 255, 255, 1) 50%, rgba(255, 255, 255, 0) 70%, rgba(255, 255, 255, 0) 100%);
  -webkit-mask-position: 4px 4px;
  -webkit-mask-size: 100px 100px;
  mask-image: radial-gradient(ellipse at center, rgba(255, 255, 255, 1) 1%, rgba(255, 255, 255, 1) 50%, rgba(255, 255, 255, 0) 70%, rgba(255, 255, 255, 0) 100%);
  mask-position: 4px 4px;
  mask-size: 100px 100px;
  min-height: 108px;
  overflow: auto;
  position: relative;
  width: 75%;
}
<section class="preface">
  <div class="synopsis">
    <p>Some text.</p>
  </div>
</section>


你能分享你的完整代码吗? - Temani Afif
是的,但HTML也很重要,我们需要可运行的代码来更好地查看事物。 - Temani Afif
@TemaniAfif 好的,它可以独立存在。我已经从DOM中删除了所有其他节点,以确保它只使用那个CSS进行渲染。 - John
1个回答

2
为什么不使用多个背景来实现相同的效果,而不影响文本节点:

.box {
  background:
    radial-gradient(circle 50px,transparent 70%,#224e7c 100%) right -54px top 0/200% 100%,
    url(https://picsum.photos/id/1074/110/110) 4px 4px no-repeat;
  height:120px;
  font-size:50px;
  padding-left:120px;
}
<div class="box">
  some text
</div>

另一种渐变的语法。更简单,但像上面那个一样不支持Safari

.box {
  background:
    radial-gradient(circle 50px at 54px 50% ,transparent 70%,#224e7c 100%),
    url(https://picsum.photos/id/1074/110/110) 4px 4px no-repeat;
  height:120px;
  font-size:50px;
  padding-left:120px;
}
<div class="box">
  some text
</div>


好的,所以图像被拉伸了(background-size:100px 100px; 应该是用于头像的)。第二个包含遮罩的 background-image 没有出现。不过我正在努力解决! - John
@John 在这里分享你正在尝试的代码: https://jsfiddle.net/。你应该注意顺序和值。 - Temani Afif
哇!它成功了!我的平台通过样式属性应用头像的背景图像,这使得事情有些混乱。我最近确实使用了多重背景图像,但不确定为什么没有再次考虑它。非常感谢你! - John
实际上,我是在为客户平滑一些图像的边缘,虽然显然遮罩可以在大多数图像上使用。我看到您一直在探索,有点不高兴,因为主题功能如此糟糕(在项目结束时) ,而且我正在转换为CSS变量主题(目前非复数)。我很高兴有人知道如何单击链接,很多人都会错过这些东西。 :-) - John

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