【问题标题】:CSS reveal rest of element outside of maskCSS显示掩码之外的其余元素
【发布时间】:2019-09-18 13:52:00
【问题描述】:

我在background-position: 4px 4px 有一个不重复的background-image 元素。图像是头像,右侧是带有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>

【问题讨论】:

  • 你能分享你的完整代码吗
  • 是的,但是 HTML 也很重要,我们需要一个可运行的代码来更好地查看事物
  • @TemaniAfif 好的,这是独立的。我删除了 DOM 中的所有其他节点,以确保它会使用 just 该 CSS 进行渲染。

标签: css css-mask


【解决方案1】:

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

.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>

渐变的另一种语法。更简单,但not supported on 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 在此处分享您正在尝试的代码:jsfiddle.net。您应该注意顺序和值
  • 砰!有用!我的平台通过样式属性应用了头像background-image,所以有点混乱。我最近确实使用了多背景图像,但我不确定为什么我没有再次考虑它。非常感谢非常
  • 我实际上是在尝试为客户平滑一些图像的边缘,但显然掩码应该适用于大多数图像。我看到您一直在闲逛,并且对主题功能与它一样被破坏(在项目结束时)以及最重要的是我正在过渡到 CSS 变量主题(非复数)感到有点不安片刻)。我很高兴有人知道如何点击链接,所以很多人错过了这些东西。 :-)
猜你喜欢
  • 2016-04-19
  • 1970-01-01
  • 2023-03-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-12
  • 2014-12-16
相关资源
最近更新 更多