仅在未禁用时悬停和激活

Ali*_*Ali 148 css

我使用悬停,活动禁用来设置按钮样式.

但问题是当按钮被禁用时,悬停和活动样式仍然适用.

如何仅在启用的按钮上应用悬停和活动?

Eng*_*eer 274

您可以使用:enabled伪类,但通知IE<9不支持它:

button:hover:enabled{
    /*your styles*/
}
button:active:enabled{
    /*your styles*/
}
Run Code Online (Sandbox Code Playgroud)

  • 我的应用程序仅适用于chrome,所以它没问题. (4认同)
  • 还有`:not()`选择器,但是再次,它也只支持IE9以来.请参阅:https://developer.mozilla.org/en-US/docs/Web/CSS/:not (3认同)
  • @jnns 谢谢。使用这个对我有用:button:hover:not([disabled]) (2认同)

小智 55

.button:active:hover:not([disabled]) {
    /*your styles*/
}
Run Code Online (Sandbox Code Playgroud)

你可以尝试这个..

  • 当您希望“悬停禁用”状态看起来与“非悬停禁用”状态相同时,这是一个很好的解决方案。 (2认同)

小智 32

为什么不在css中使用属性"disabled".这必须适用于所有浏览器.

button[disabled]:hover {
    background: red;
}
button:hover {
    background: lime;
}
Run Code Online (Sandbox Code Playgroud)

  • 通过在一行中选择它们来覆盖所有禁用状态:`.button [disabled],.button [disabled]:hover,.button [disabled]:focus,.button [disabled]:active {}` (12认同)

jak*_*ker 10

在sass(s​​css)中:

 button {
  color: white;
  cursor: pointer;
  border-radius: 4px;

  &:disabled{
    opacity: 0.4;

    &:hover{
      opacity: 0.4;  //this is what you want
    }
  }

  &:hover{
    opacity: 0.9;
  }
}
Run Code Online (Sandbox Code Playgroud)


mic*_*hai 10

较低的特异性的方法,在最先进的浏览器上运行(IE11 +,并排除一些移动歌剧和IE浏览器- http://caniuse.com/#feat=pointer-events):

.btn {
  /* base styles */
}

.btn[disabled]
  opacity: 0.4;
  cursor: default;
  pointer-events: none;
}

.btn:hover {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)

pointer-events: none规则将禁用悬停; 您不需要使用.btn[disabled]:hover选择器来提高特异性以使悬停样式无效.

(仅供参考,这是简单的HTML指针事件,而不是有争议的抽象输入设备指针事件)


fat*_*ode 8

如果您使用LESSSass,则可以尝试以下操作:

.btn {
  &[disabled] {
    opacity: 0.6;
  }
  &:hover, &:active {
    &:not([disabled]) {
      background-color: darken($orange, 15);
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

  • 这是 SASS 中的一个很好的解决方案,因为除非将其包装在 not 块中,否则将为禁用按钮处理悬停效果。 (2认同)