我试图创建一个纯的css生成的彩虹渐变覆盖在一个基本的背景之上.目标是使彩虹在中心完全不透明,并逐渐褪色到接近边缘的完全透明,与背景无缝混合.

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Smooth Fading of CSS-Generated Rainbow Gradient</title>
    <style>
        .container {
            position: relative;
            width: 500px;
            height: 300px;
            overflow: hidden;
            background: repeating-linear-gradient(45deg, #f00, #f00 10px, #0f0 10px, #0f0 20px);
        }

        .rainbow-overlay {
            position: absolute;
            top: 25%;
            left: 25%;
            width: 50%;
            height: 50%;
            background: linear-gradient(to right, violet, indigo, blue, green, yellow, orange, red);
            mask: 
                linear-gradient(transparent 10%, black 20%, black 80%, transparent 90%) /* vertical */ ,
                linear-gradient(to right, transparent 10%, black 20%, black 80%, transparent 90%) /* horizontal */;
        }
    </style>
</head>
<body>
    <div class="container">
        <div class="rainbow-overlay"></div>
    </div>
</body>
</html>

不幸的是,当前使用mask属性与linear-gradient的实现导致两个梯度的并集或合并,而不是期望的交集.

有没有办法实现这种平滑淡入淡出的效果? 任何见解或替代方法都将受到极大的赞赏.

推荐答案

考虑mask-composite以避免合并

.container {
  position: relative;
  width: 500px;
  height: 300px;
  overflow: hidden;
  background: repeating-linear-gradient(45deg, #f00, #f00 10px, #0f0 10px, #0f0 20px);
}

.rainbow-overlay {
  position: absolute;
  inset: 25%;
  background: linear-gradient(to right, violet, indigo, blue, green, yellow, orange, red);
  --m:#0000 10%, #000 20% 80%, #0000 90%;
  mask: 
   linear-gradient(       var(--m)),
   linear-gradient(90deg, var(--m));
  -webkit-mask-composite: destination-in;
          mask-composite: intersect;
}
<div class="container">
  <div class="rainbow-overlay"></div>
</div>

Css相关问答推荐

相对于现有的转换3D应用关键帧动画

Angular Material:如何同时使用2个徽章

使用间距时奇怪的MUI网格行为

使用 CSS 定位悬停/弹出 div - 字形浏览器网页

Next.js 条件样式

Bootstrap 和 Sass:将 SCSS 文件转换为 CSS 时出错.错误:$theme-colors-rgb 中未定义变量 @each $color、$value

问题定位位置:Tailwindcss 中的绝对元素

在 React Native 中创建背景

如何在真实文本旁边制作文本阴影,使其看起来像 css 中的重复文本?

在revealjs/Quarto中定义一类反背景的幻灯片

用css画3个三角形

CSS - 等高列?

如何在 Chrome 中模拟偏好 colored颜色 方案媒体查询?

为什么无论我做什么都不能改变复选框的 colored颜色 ?

如何通过 JavaScript 重新触发 WebKit CSS 动画?

悬停效果:展开底部边框

Chrome 呈现 colored颜色 的方式与 Safari 和 Firefox 不同

我应该如何组织我的 CSS 文件的内容?

位置固定宽度 100%

从 textarea 中删除所有样式(边框、发光)