代码之家  ›  专栏  ›  技术社区  ›  The Oddler

CSS:由多个类定义的渐变?

css
  •  0
  • The Oddler  · 技术社区  · 7 年前

    .red {
      background-color: red;
    }
    
    .green {
      background-color: green;
    }
    
    .wantedResult{
      background-image: linear-gradient(to right, red, green);
    }
    <div class="red">Red</div>
    <div class="green">Green</div>
    <div class="red green">Both</div>
    <div class="wantedResult">WantedResult</div>

    有没有办法做到这一点?

    注意:当然这是一个非常简单的例子,只有两种颜色,定义“wantedResult”类也没什么大不了的。但如果有十种使用过的颜色,它会很快变得无法管理。

    3 回复  |  直到 7 年前
        1
  •  2
  •   Temani Afif    7 年前

    很明显,CSS无法直接实现这一点,因为当有2或3种颜色时,浏览器不知道应该如何定义渐变。有很多可能性。

    一种方法是考虑CSS变量,使思维更容易。这个想法是用一些默认的颜色来定义渐变,你可以通过改变你的变量来改变这些颜色。同样,这不会产生您想要的效果,但至少可以避免定义大量渐变。

    .red_1 {
      --color1: red;
    }
    .red_2 {
      --color2: red;
    }
    
    .green_1 {
      --color1: green;
    }
    .green_2 {
      --color2: green;
    }
    
    .coloration{
      background: linear-gradient(var(--color1,pink),var(--color2,pink));
    }
    
    div {
     height:50px;
     margin:5px;
    }
    <div class="coloration">default</div>
    
    <div class="coloration green_1 green_2">green</div>
    
    <div class="coloration red_1 green_2">green red</div>
    
    <div class="coloration red_2 green_1">green red</div>
    
    <div class="coloration red_2 red_1">red</div>
        2
  •  1
  •   beannshie223    7 年前

    “两者”仅显示一种颜色(绿色)的原因是“绿色”类是在“红色”类之后定义的。

    这意味着,如果在一个元素上有两个类,那么该元素将始终具有稍后定义的颜色(例如,如果您首先定义类green,即write“.green{background color:green;}”,然后“两者”将显示为红色,反之亦然)。

    如果你 真正地 要做到这一点,您可以使用javascript检查元素是否同时具有这两个类,如果有,则将背景设置为线性渐变。
    但我并不是真的建议,而是制作另一个具有线性渐变作为背景色的类。

        3
  •  0
  •   ondrejm    7 年前

    不幸的是,仅仅使用两个具有不同背景的类是不可能有渐变背景的 背景色 价值看起来使用线性渐变是你唯一的选择。

    也许你可以根据自己的需要,用不同的颜色组合来制作一组渐变图像,然后将图像设置为背景。这会使你的风格更易于阅读和管理,尽管有些人可能不认为这是“纯粹的CSS”。