html - CSS:如何在混合模式下使用透明背景仅影响/被剪切到(文本)内容?

标签 html css background linear-gradients mix-blend-mode

这是我的代码。我认为我想要实现的目标很明显 - 我想删除文本后面的黑色背景,但是,当我简单地删除黑色背景 css 时,渐变层只会显示,因为它没有被剪切到文本中。

body {
    margin: 0;
    height: 100vh;
    display: flex;
    align-items: center;
    justify-content: center;
    background:url('https://wallpapersite.com/images/pages/pic_w/16658.jpg') no-repeat center center fixed;
    background-size: cover;
}

.neon {
    position: relative;
    overflow: hidden;
    filter: brightness(200%);
}

.text {
    background-color: black;
    color: white;
    font-size: 100px;
    font-weight: bold;
    font-family: sans-serif;
    text-transform: uppercase;
    position: relative;
    user-select: none;
}

.text::before {
    content: attr(data-text);
    position: absolute;
    color: white;
    filter: blur(0.02em);
    mix-blend-mode: difference;
}

.gradient {
    position: absolute;
    background: linear-gradient(45deg, #00f7ff, #f545d7, #0085ff, #6945f5, #005aff);
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    mix-blend-mode: multiply;
}

.spotlight {
    position: absolute;
    top: -100%;
    left: -100%;
    right: 0;
    bottom: 0;
    background: 
        radial-gradient(
            circle,
            white,
            transparent 25%
        ) center / 25% 25%,
        radial-gradient(
            circle,
            white,
            black 25%
        ) center / 12.5% 12.5%;
    animation: light 5s linear infinite;
    mix-blend-mode: color-dodge;
}

@keyframes light {
    to {
        transform: translate(50%, 50%);
    }
}
<div class="neon">
  <span class="text" data-text="NIGHT SKY">NIGHT SKY</span>
  <span class="gradient"></span>
  <span class="spotlight"></span>
</div>

无论如何,我已经尝试了一些事情,比如弄乱一些 mix-blend-modes ,添加一些剪切路径等,但无法接近工作。我认为它应该 (?) 是可能的,但如果不是,我明天将尝试其他一些方法(例如将文本转换为 png 并使用 background-clip 属性)

最佳答案

另一个 mix-blend-mode将修复它。使用 lighten在这种情况下,删除您不想要的黑色部分:

html {
  background:#fff; /* this is needed to make sure the blending works fine (any color will do the trick) */
}

body {
  margin: 0;
  height: 100vh;
  display: flex;
  align-items: center;
  justify-content: center;
  background: url('https://wallpapersite.com/images/pages/pic_w/16658.jpg') no-repeat center center fixed;
  background-size: cover;
}

.neon {
  position: relative;
  overflow: hidden;
  filter: brightness(200%);
  mix-blend-mode:lighten; /* here */
}

.text {
  background-color: black;
  color: white;
  font-size: 100px;
  font-weight: bold;
  font-family: sans-serif;
  text-transform: uppercase;
  position: relative;
  user-select: none;
}

.text::before {
  content: attr(data-text);
  position: absolute;
  color: white;
  filter: blur(0.02em);
  mix-blend-mode: difference;
}

.gradient {
  position: absolute;
  background: linear-gradient(45deg, #00f7ff, #f545d7, #0085ff, #6945f5, #005aff);
  top: 0;
  left: 0;
  right: 0;
  bottom: 0;
  mix-blend-mode: multiply;
}

.spotlight {
  position: absolute;
  top: -100%;
  left: -100%;
  right: 0;
  bottom: 0;
  background: radial-gradient( circle, white, transparent 25%) center / 25% 25%, radial-gradient( circle, white, black 25%) center / 12.5% 12.5%;
  animation: light 5s linear infinite;
  mix-blend-mode: color-dodge;
}

@keyframes light {
  to {
    transform: translate(50%, 50%);
  }
}
<div class="neon">
  <span class="text" data-text="NIGHT SKY">NIGHT SKY</span>
  <span class="gradient"></span>
  <span class="spotlight"></span>
</div>

关于html - CSS:如何在混合模式下使用透明背景仅影响/被剪切到(文本)内容?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63857667/

相关文章:

html - 知道用于全屏背景图像的良好 CSS 技术吗?

jquery parseHTML 没有按预期工作

javascript - 在 div 中显示绝对定位的图像

javascript - Bootstrap popover 仅适用于悬停

ios - 应用程序终止时停止位置更新

android - 当用户通过按设备主页按钮将前台应用程序发送到后台时,后台应用程序 UI 必须变得模糊

html - mozilla firefox 不支持输入文本框

html - CSS :hover not working as hoped

javascript - 如何使 HTML5 Canvas 适合动态父/flexbox 容器

background - 使用 AVCONV 或 FFMPEG 在图像文件上覆盖movie.mov