【问题标题】:CSS Change color on hoverCSS 在悬停时改变颜色
【发布时间】:2017-02-02 07:47:26
【问题描述】:

我正在尝试用第二次覆盖我的第一个“颜色变化”。 我希望我的图标在悬停文本时为银色,在悬停图标时为红色。

我试过了:

HTML

<ul>
  <li class="liDoc"><a href="">My link</a> <i class="fa fa-trash delDoc">icon</i></li>

CSS

.delDoc {
  color: transparent;
  font-size: 12px;
  cursor: pointer;
}

.liDoc:hover > .delDoc {
  color: silver;
}

.delDoc:hover {
  color: red;
}

我也试过了:

HTML

<li class="liDoc"><a href="" class="docLink">'+value+'</a> <i class="fa fa-trash delDoc"></i></li>

CSS

.delDoc{
    color: transparent;
    font-size: 12px;
}
.docLink:hover > .delDoc {
    color: silver;
}
.delDoc:hover{
    color: red;
}

FIDDLE
https://jsfiddle.net/zt393xjm/

【问题讨论】:

    标签: html css


    【解决方案1】:

    在这种情况下你不应该使用和避免使用!important,因为你可以用Specifity解决它:

    Specificity 是应用于给定 CSS 声明的权重,由匹配选择器中每个选择器类型的数量决定。当特异性等于多个声明中的任何一个时,CSS 中的最后一个声明将应用于元素。仅当多个声明针对同一元素时,特异性才适用。根据 CSS 规则,直接定位的元素将始终优先于元素从其祖先继承的规则。

    来源: https://developer.mozilla.org/en/docs/Web/CSS/Specificity


    在您的情况下,.delDoc:hover 不如 .liDoc:hover &gt; .delDoc 特定。所以只需将.delDoc:hover 替换为.liDoc &gt; .delDoc:hover 或.liDoc:hover &gt; .delDoc:hover。

    请不要使用!important!不鼓励使用!important!


    守则 (https://jsfiddle.net/zt393xjm/4/):

    .delDoc {
      color: transparent;
      font-size: 12px;
      cursor: pointer;
    }
    .liDoc:hover > .delDoc {
      color: silver;
    }
    .liDoc > .delDoc:hover {
      color: red;
    }
    <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
    <ul>
      <li class="liDoc"><a href="">My link</a>  <i class="fa fa-trash delDoc">icon</i>
      </li>
    </ul>

    【讨论】:

      【解决方案2】:

      你快到了。问题是第一个选择器比第二个选择器更具体,因此它具有优先权。您可以轻松地解决这个问题,而无需任何 !important 关键字,只需专门指定第二个选择器:

          .delDoc {
            color: transparent;
            font-size: 12px;
            cursor: pointer;
          }
          
          .liDoc:hover > .delDoc {
            color: silver;
          }
          
          .liDoc > .delDoc:hover {
            color: red;
          }
      <link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet"/>
      <ul>
        <li class="liDoc"><a href="">My link</a> <i class="fa fa-trash delDoc">icon</i></li>
      </ul>

      【讨论】:

      • 那么,最好的方法是什么,为什么? (而不是重要的)
      • 指定更具体的选择器比!important 更稳定,因为它们仍然可以被更具体的规则覆盖。这是级联样式表背后的核心思想。使用 !important 时,您只能通过使用更具体的规则和另一个 !important 关键字来覆盖这些规则。这会创建第二层级联,并且难以调试和维护。
      【解决方案3】:

      问题是,您的第一个选择器更具体:

      所以这个选择器:.liDoc:hover &gt; .delDoc 比 .delDoc:hover.

      当您检查元素时,您会看到 .delDoc:hover 样式,其中 color: red 被应用,但由于特殊性而被 .liDoc:hover &gt; .delDoc 覆盖。

      最简单的解决方案是使用!important:

      .delDoc:hover { color: red !important; }

      但是使用重要的被认为是一种不好的做法。

      另一种解决方案是使第二个选择器比第一个更具体:

      .liDoc:hover > .delDoc:hover {
          color: red;
      }
      

      稍微清理一下可能会导致这种情况:https://jsfiddle.net/zt393xjm/2/

      【讨论】:

      • 谢谢。我认为将“红色代码”放在“银色代码”下方会覆盖它。
      【解决方案4】:

      您需要设置链接本身的样式,而不是其周围的元素。 为 a 元素添加一个类。

       <ul>
        <li class="liDoc"><a class="button" href="">My link</a> <i class="fa fa-trash delDoc">icon</i></li>
      </ul>
      

      那么你可以做以下事情

      a.button:link{
        color:red;
      }
      
      a.button:hover{
        color:yellow;
      }
      

      【讨论】:

        【解决方案5】:

        试试这个: https://jsfiddle.net/16Lr39mh/

        这里我使用.liDoc .delDoc:hover在悬停时改变颜色。

        【讨论】:

        • 除非非常必要,否则强烈建议不要使用!important。这也是不好的做法。
        • 我不会反对你,但不鼓励使用important。
        • 如此随意地使用 !important 真是不好的做法。
        • 是的,建议不要使用重要的。@MuhammadUsman 感谢您的建议。
        猜你喜欢
        • 2018-01-17
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2016-10-26
        • 1970-01-01
        • 1970-01-01
        • 2023-01-10
        • 2012-02-16
        相关资源
        最近更新 更多