【问题标题】:background color with increasing opacity using less使用较少的不透明度增加的背景颜色
【发布时间】:2018-11-12 14:37:11
【问题描述】:

我需要改变所有孩子的背景颜色,逐渐增加不透明度。孩子的数量是动态的,将被异步插入或删除。是否有任何解决方案可以使用 css 或更少实现相同的目标。

ul li {
  list-style: none;
  font-size: 16px;
  text-align: center;
  font-weight: bold;
  margin: 3px 0;
}

ul li:nth-child(1){
  background-color: rgba(0,0,255, 0.1);
}

ul li:nth-child(2){
  background-color: rgba(0,0,255, 0.2);
}

ul li:nth-child(3){
  background-color: rgba(0,0,255, 0.3);
}

ul li:nth-child(4){
  background-color: rgba(0,0,255, 0.4);
}

ul li:nth-child(5){
  background-color: rgba(0,0,255, 0.5);
}
<ul>
  <li>A</li>
  <li>B</li>
  <li>C</li>
  <li>D</li>
  <li>E</li>
</ul>

【问题讨论】:

  • 您的示例只能达到:nth-child(5)0.5 的不透明度值。对于第十四个孩子……您希望该值是多少?您是否需要在 1-x 个项目上平均分配不透明度 0-1,或者究竟是什么?这是否需要是动态的,即当有 10 个项目时分为 0.1 步,但当有 20 个时分为 0.05 步……?严重未明确的问题。
  • 这里的不透明度只是实际问题的一个例子。可以有 N 个列表项。如果我们不考虑不透明度,只想改变背景颜色,如 rgb(0,0,0), rgb(1,0,0), rgb(2,0,0)... 那么该怎么做它,而不像 nth-child(1) 那样写
  • 当使用dynamically这个词时,通常意味着你不能只用CSS来做。你需要javascript。

标签: html css sass less


【解决方案1】:

添加了这些样式

ul li {
 box-shadow: 2px 2px white, 0px 2px white;
}

ul {
  padding: 0;
  background-image: linear-gradient(rgba(0, 0, 255, 0.1), rgba(0, 0, 255, 0.8));
}

不用为每个 li 着色,而是给 ul 一个背景渐变,并使用 box-shadow 创建一个盒子效果。

ul li {
  list-style: none;
  font-size: 16px;
  text-align: center;
  font-weight: bold;
  margin: 3px 0;
  box-shadow: 2px 2px white, 0px 2px white;
}

ul {
  padding: 0;
  background-image: linear-gradient(rgba(0, 0, 255, 0.1), rgba(0, 0, 255, 0.8));
}
<ul>
  <li>A</li>
  <li>B</li>
  <li>C</li>
  <li>D</li>
  <li>E</li>
  <li>F</li>
  <li>G</li>
  <li>H</li>
</ul>

【讨论】:

  • 我可以对背景做同样的事情。但是我还需要修改其他样式,例如文本的颜色在较浅的背景下会变暗,在较暗的背景下会变亮。所以我需要一个 mixin 解决方案
  • 如果你对 ul 使用渐变,这意味着 li 的背景不是纯色,它是渐变(例如 A 的背景是不透明度为 10% 的非蓝色渐变)跨度>
猜你喜欢
  • 2013-02-05
  • 2017-08-11
  • 2015-02-10
  • 1970-01-01
  • 2014-02-21
  • 2020-09-06
  • 2014-03-22
  • 2021-10-26
  • 2017-03-20
相关资源
最近更新 更多