【问题标题】:How to make an element's background-color a little darker using CSS如何使用 CSS 使元素的背景颜色更深一些
【发布时间】:2021-11-24 06:47:33
【问题描述】:

我有一个按钮的以下 CSS:

.Button {
  background-color: #somehex;
}

当用户将鼠标悬停在按钮上时,我希望背景颜色更暗一些。我试过改变不透明度,但没有用,目前正在这样做:

.Button:hover {
  transition: 0.2s ease-in;
  background-color: #ALittleDarkerHex;
}

虽然此过程有效,但它确实很乏味,因为我必须手动寻找我正在使用的颜色的较暗版本。我想知道是否有更简单的方法可以使用 CSS 使按钮的背景颜色变暗。

【问题讨论】:

标签: html css


【解决方案1】:

使用background-image 在其顶部添加一个深色图层。此方法使您的文本以相同的颜色可见,同时仅更改背景。

.button {
  display: inline-block;
  color:#fff;
  padding: 10px 20px;
  font-size: 20px;
  background-color:red;
}

.button:hover {
  background-image: linear-gradient(rgba(0, 0, 0, 0.4) 0 0);
}
<div class="button"> some text </div>
<div class="button" style="background-color:lightblue;"> some text </div>
<div class="button" style="background-color:green;"> some text </div>
<div class="button" style="background-color:grey;"> some text </div>

进行过渡:

.button {
  display: inline-block;
  color:#fff;
  padding: 10px 20px;
  font-size: 20px;
  background: linear-gradient(transparent,rgba(0, 0, 0, 0.4)) top/100% 800%;
  background-color:red;
  transition:0.5s;
}

.button:hover {
  background-position:bottom;
}
<div class="button"> some text </div>
<div class="button" style="background-color:lightblue;"> some text </div>
<div class="button" style="background-color:green;"> some text </div>
<div class="button" style="background-color:grey;"> some text </div>

混合混合模式的另一个想法:

.button {
  display: inline-block;
  color: #fff;
  padding: 10px 20px;
  font-size: 20px;
  background-color: red;
  background-image: linear-gradient(rgba(0, 0, 0, 0.4) 0 0);
  background-blend-mode: lighten;
}

.button:hover {
  background-blend-mode: darken;
}
<div class="button"> some text </div>
<div class="button" style="background-color:lightblue;"> some text </div>
<div class="button" style="background-color:green;"> some text </div>
<div class="button" style="background-color:grey;"> some text </div>

【讨论】:

    【解决方案2】:

    这是你可以做到的一种方式

    .button {
      background-color: red;
    }
    
    .button:hover {
        filter: brightness(60%);
    }
    &lt;button class="button"&gt;Button&lt;/button&gt;

    任何高于brightness(100%) 的东西都会增加亮度,任何低于brightness(100%) 的东西都会使其变暗。

    【讨论】:

    • 我喜欢这个想法,但改变亮度也会使按钮内的白色文本变暗。有没有办法避免这种情况?
    • 如果您只想使用已有的按钮颜色并且不想重新调整所有内容,则此方法超级快速且有效。我不介意它也会使文本变暗。我只是想让用户知道他们正在悬停。
    • 这种技术的一个缺点是它也会改变文本/字体颜色。
    【解决方案3】:

    将伪元素放在按钮内容后面并在悬停时修改其不透明度

    const colors = ['#052F5F','#005377','#06A77D','#D5C67A','#F1A208'];
    const btn = document.querySelector('.Button');
    btn.addEventListener('click', (e) => {
      e.preventDefault();
      btn.style.backgroundColor = colors[Math.floor(Math.random() * colors.length)];
    });
    .Button {
      background-color: #F1A208;
      color:#fff;
      border: 0;
      border-radius: 20px;
      padding: 10px 22px;
      cursor:pointer;
      position: relative;
    }
    .Button:before {
      content: '';
      position: absolute;
      z-index:0;
      border-radius: 20px;
      top:0;
      left:0;
      right:0;
      bottom:0;
      background-color: rgba(0,0,0,0);
      transition: .2s ease;
    }
    .Button span {
      position: relative;
      z-index:1;
    }
    .Button:hover:before {
      background-color: rgba(0,0,0,.3);
    }
    &lt;button class="Button"&gt;&lt;span&gt;hover me&lt;/span&gt;&lt;/button&gt;

    【讨论】:

      【解决方案4】:

      使用HSL 颜色值可能会满足您的需求。 HSL 颜色模型比 Hex (#FF334E) 更易于阅读。

      HSL 颜色值指定为:hsl(hue, saturation, lightness)

      div {
        width: auto;
        display: inline-flex;
        justify-content: center;
        align-items: center;
        margin: 0.5rem 0;
        padding: 1rem 2rem;
        color: white;
      }
      
      .Button {
        --hue: 712;
        --saturation: 100%;
        --lightness: 60%;
        background-color: hsl(var(--hue), var(--saturation), var(--lightness));
      }
      
      .Button.dark:hover {
        transition: 0.2s ease-in;
        --lightness: 40%;
        /* 20% dark */
      }
      
      .Button.light:hover {
        transition: 0.2s ease-in;
        --lightness: 80%;
        /* 20% light */
      }
      <div class='Button dark'>some text</div>
      <div class='Button light'>some text</div>

      【讨论】:

        猜你喜欢
        • 2021-03-25
        • 1970-01-01
        • 2012-05-05
        • 2011-04-29
        • 2017-08-15
        • 2014-10-23
        • 2019-03-05
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多