如何使用 css 为选项元素设置多种背景组合

How to set multiple combinations of backgrounds for option element using css

我有一个 select 有多个选项,我想为 select 列表中的元素设置许多背景图像组合作为 flags,就像是 这个

CSS

option{width:300px;}
option.online{background: url(media/flags/online.png) no-repeat right 0px center;}
option.full{background: url(media/flags/full.png) no-repeat right 20px center;}
option.online.full{background: url(media/flags/online.png) no-repeat right 00px center, url(media/flags/full.png) no-repeat right 20px center;}

HTML

<select multiple>
    <option class="online full">p1-soldiers(R)</option>
    <option>p2-Blackberry(R)</option>
    <option>p3-RICK(R)</option>
    <option>p4-Aj Lifestyle(R)</option>
    <option>p5-abosaleh(R)</option>
<select>

我有很多我想为选项设置的标志,每个标志都是一个 20px*20px 的 png 图片

右起第一个20px我想设置在线标志可以

右边第二个20px我想设置仓库标志可以

在右起第三个 20px 处我想设置另一个有 4 种可能性的标志

在右起第四个 20px 处我想设置另一个有 3 种可能性的标志

我从 this question 使用的当前方法的问题是,我将为 每个可能的标志组合 编写一个规则,这将是 (4 + 3 + 4 + 3 + (4*3*4*3))例子

option.online{}
option.offline{}
option.onlineTooLong{}
option.offlineTooLong{}
option.full{}
option.online.full{}
option.offline.full{}
/* ...... etc */

我将来可能还会添加第 5 个标志,有 6 种可能性:(

有什么CSS方法可以只为每个标志添加一个规则,而不是为每个组合添加?

CSS 变量可以帮助你。

这是一个基本示例,我将使用渐变,您可以将其替换为您的标志

.flags {
   background: 
      var(--f1,linear-gradient(transparent 0 0)) right 0px top 0px,
      var(--f2,linear-gradient(transparent 0 0)) right 20px top 0px,
      var(--f3,linear-gradient(transparent 0 0)) right 40px top 0px;
      /*var(--f4,linear-gradient(transparent 0 0)) right 60px top 0px */
   background-size:20px 20px;
   background-repeat:no-repeat;
}
/* for the first flag*/
.f1-1{--f1:radial-gradient(circle 10px,red 98%,transparent);}
.f1-2{--f1:radial-gradient(circle 10px,blue 98%,transparent);}
.f1-3{--f1:radial-gradient(circle 10px,green 98%,transparent);}
.f1-4{--f1:radial-gradient(circle 10px,yellow 98%,transparent);}
/* for the second flag*/
.f2-1{--f2:linear-gradient(red 0 0);}
.f2-2{--f2:linear-gradient(blue 0 0);}
.f2-3{--f2:linear-gradient(green 0 0);}
/* for the third flag*/
.f3-1{--f3:linear-gradient(pink 0 0);}
.f3-2{--f3:linear-gradient(purple 0 0);}
.f3-3{--f3:linear-gradient(black 0 0);}



[class] {
  width:100px;
  height:100px;
  display:inline-block;
  border:1px solid;
}
<div class="flags"></div>
<div class="flags f1-1"></div>
<div class="flags f2-1 f3-2"></div>
<div class="flags f1-3 f2-2"></div>
<div class="flags f2-1 f3-3 f1-1"></div>
<div class="flags f2-3 f1-4"></div>
<div class="flags f2-1"></div>
<div class="flags f3-3"></div>

每个标志都有一个变量,您需要做的就是通过更改该变量为每种情况定义一个 class,然后您只需应用您需要的 classes 即可获得组合你要。