【问题标题】:Combine CSS background lineal gradient结合CSS背景线性渐变
【发布时间】:2018-04-09 08:44:36
【问题描述】:

如何将这条线合并到两个单独的css类中?

background: url('image1.png') center 50% no-repeat, url('image2.png') 100% 100% no-repeat, linear-gradient(#000000, #ffffff);

特别是我需要一个不同的 CSS 类用于 linear-gradient

类似...

.a {
   background-image: url('image1.png');
   background-position: center 50%;
   background-repeat: no-repeat;
   background-image: url('image2.png');
   background-position: 100% 100%;
   background-repeat: no-repeat;
}

.b {
   background-image: linear-gradient(#000000, #ffffff);
}

<div class="a b"></div>

谢谢。

【问题讨论】:

    标签: css background background-image linear-gradients


    【解决方案1】:

    您可以依赖 CSS 变量并执行以下操作:

    :root {
     /* The default gradient is transparent */
     --c:linear-gradient(transparent,transparent)
    }
    
    .a,.c {
      height:150px;
      width:150px;
      display:inline-block;
      background-image:var(--c),url(https://lorempixel.com/400/200/);
      background-size:auto,cover;
    }
    
    .c {
      background-image:
      radial-gradient(circle at center,pink 20%,transparent 30%),
      var(--c),
      url(https://lorempixel.com/400/400/);
    }
    .b {
     --c:linear-gradient(red,transparent)
    }
    .d {
     --c:linear-gradient(to right,blue,transparent)
    }
    <div class="a">
    </div>
    
    <div class="a b">
    </div>
    
    <div class="c d">
    </div>
    
    <div class="a d">
    </div>

    更新

    另一个想法是使用 old 伪元素技巧,但这仅在渐变应位于顶层或底层时才有效:

    .a,.c {
      height:150px;
      width:150px;
      display:inline-block;
      background-image:url(https://lorempixel.com/400/200/);
      background-size:cover;
    }
    
    .c {
      background-image:url(https://lorempixel.com/400/400/);
    }
    .b,.d {
      position:relative;
      z-index:0;
    }
    .b:before,.d:before {
      content:"";
      position:absolute;
      top:0;
      left:0;
      right:0;
      bottom:0;
      z-index:1;
      background:linear-gradient(red,transparent);
    }
    .d:before {
     background:linear-gradient(to right,blue,transparent);
    }
    <div class="a">
    </div>
    
    <div class="a b">
    </div>
    
    <div class="c d">
    </div>
    
    <div class="a d">
    </div>

    【讨论】:

    • 我只需要一个 DIV。我使用 PNG 作为阴影,另一个是图像。
    • @FeKuLa 我只是提供了很多案例来展示我的想法;)然后你可以只保留一个 div .. 同样的逻辑将适用,想法是使用变量和更新让渐变始终存在它与第二类
    • 不支持 IE 使用 CSS 变量 :-(
    • @FeKuLa 啊,如果您正在寻找 IE :) 好的,我添加了另一种方式,然后 ;) ...但您应该尝试忘记 IE:p
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多