【问题标题】:Mask Image, create rectangle from multiple gradients蒙版图像,从多个渐变创建矩形
【发布时间】:2020-03-07 03:36:01
【问题描述】:

我有一个径向渐变,用作mask-image 将图像“淡入”到background-color 在图像后面

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%);

如何在所有四个边上使用均匀的矩形渐变来获得相同的效果?

我知道你可以组合渐变,而我最近的尝试似乎没有任何效果:

img
{
 mask-image: 
  linear-gradient(to top, rgba(255,255,255,1) 1%, rgba(255,255,255,1) 50%),
  linear-gradient(to right, rgba(255,255,255,1) 1%, rgba(255,255,255,1) 50%),
  linear-gradient(to bottom, rgba(255,255,255,1) 1%, rgba(255,255,255,1) 50%),
  linear-gradient(to left, rgba(255,255,255,1) 1%, rgba(255,255,255,1) 50%);
}

【问题讨论】:

    标签: css linear-gradients radial-gradients css-mask


    【解决方案1】:

    使用多个掩码的技巧是控制大小/位置,以便每个掩码都应用于元素的一个区域:

    .box {
      height:300px;
      width:300px;
      background: url(https://picsum.photos/id/1003/300/300);
      -webkit-mask: 
         linear-gradient(to top,    transparent,#fff) top   /100% 20%,
         linear-gradient(to bottom, transparent,#fff) bottom/100% 20%,
         linear-gradient(to left  , transparent,#fff) left  /20% 100%,
         linear-gradient(to right , transparent,#fff) right /20% 100%;
      -webkit-mask-repeat:no-repeat;
      
      mask: 
         linear-gradient(to top,    transparent,#fff) top   /100% 20%,
         linear-gradient(to bottom, transparent,#fff) bottom/100% 20%,
         linear-gradient(to left  , transparent,#fff) left  /20% 100%,
         linear-gradient(to right , transparent,#fff) right /20% 100%;
      mask-repeat:no-repeat;
    }
    
    body {
      background:pink;
    }
    <div class="box"></div>

    或者像这样:

    .box {
      height:300px;
      width:300px;
      background: url(https://picsum.photos/id/1003/300/300);
      -webkit-mask: 
        linear-gradient(to top,  transparent 10%, #fff 15% 90%, transparent 95%),
        linear-gradient(to left, transparent 10%, #fff 15% 90%, transparent 95%);
      -webkit-mask-size:110% 110%;
      -webkit-mask-position:center;
      -webkit-mask-repeat:no-repeat;
      -webkit-mask-composite: source-in;
      
      
      mask: 
        linear-gradient(to top,  transparent 10%, #fff 15% 90%, transparent 95%),
        linear-gradient(to left, transparent 10%, #fff 15% 90%, transparent 95%);
      mask-size: 110% 110%;
      mask-position: center;
      mask-repeat:no-repeat;
      mask-composite: intersect;
    }
    
    body {
      background:pink;
    }
    <div class="box"></div>

    相关:How to make a rectangular transparency gradient CSS3?

    【讨论】:

    • 第一个与我想要完成的相反,所以我将尝试切换定位。我不确定第二组发生了什么。我首先/默认情况下在 Waterfox 中进行测试。
    • @John 我创建了两个变体,第二个与第一个相反。它们在 Chrome 和 Firefox 中应该可以正常工作
    • 太棒了!第二个是我感兴趣的。因为我绝对确定我将来会使用mask a lot,所以我开始记录有效的方法。我什至以某种方式生成了一个十字架,而您的第一个十字架将用于审查,或者可能是某些猜测是关键组成部分的游戏。好东西,谢谢!
    • @John 如果您有兴趣,我已经使用掩码技巧提供了一些答案;)stackoverflow.com/search?tab=newest&q=user%3a8620333%20mask
    • 哈哈太棒了!我将在此处编辑您的答案以反映我正在尝试做的事情(因为我没有提供屏幕截图或任何内容)。再次感谢你! :-)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-01-23
    • 1970-01-01
    • 2013-07-20
    • 1970-01-01
    • 2013-10-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多