Hover et actif uniquement lorsqu'il n'est pas désactivé

J'utilise hover, active et désactivé à l'aide des Boutons de style.

Mais le problème est que lorsque le bouton est désactivé, les styles hover et active s'appliquent toujours.

Comment appliquer hover et actif uniquement sur les boutons activés?

110
css
demandé sur Ali 2012-07-22 17:30:44

7 réponses

Vous pouvez utiliser :activé pseudo-classe, mais notez IE<9 ne prend pas en charge il:

button:hover:enabled{
    /*your styles*/
}
button:active:enabled{
    /*your styles*/
}
180
répondu Engineer 2012-07-22 13:45:34
.button:active:hover:not([disabled]) {
    /*your styles*/
}

Vous pouvez essayer ceci..

35
répondu Velayutham Anjamani 2014-05-09 10:34:34

Pourquoi ne pas utiliser l'attribut "disabled" en css. Ce doit fonctionne sur tous les navigateurs.

button[disabled]:hover {
    background: red;
}
button:hover {
    background: lime;
}
24
répondu Madef 2013-12-02 06:29:12

Dans sass (scss):

 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;
  }
}
7
répondu jakeforaker 2015-12-08 23:38:27

Une approche de moindre spécificité qui fonctionne dans la plupart des navigateurs modernes (IE11+, et excluant certains navigateurs mobiles Opera & IE -- http://caniuse.com/#feat=pointer-events):

.btn {
  /* base styles */
}

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

.btn:hover {
  color: red;
}

La règle pointer-events: none désactivera le survol; vous n'aurez pas besoin d'augmenter la spécificité avec un sélecteur .btn[disabled]:hover pour annuler le style de survol.

(pour votre information, il s'agit des simples événements de pointeur HTML, pas des événements de pointeur de périphériques d'entrée d'Abstraction litigieux)

4
répondu michai 2016-09-19 15:48:46

Une façon est d'ajouter une classe partcular tout en désactivant les boutons et en remplaçant les États hover et active pour cette classe dans css. Ou supprimer une classe lorsque vous désactivez et spécifiez les propriétés hover et active pseudo sur cette classe uniquement en css. De toute façon, cela ne peut probablement pas être fait uniquement avec css, vous devrez utiliser un peu de js.

2
répondu techfoobar 2012-07-22 13:37:26

Si vous utilisez LESS ou Sass, Vous pouvez essayer ceci:

.btn {
  &[disabled] {
    opacity: 0.6;
  }
  &:hover, &:active {
    &:not([disabled]) {
      background-color: darken($orange, 15);
    }
  }
}
2
répondu fatlinesofcode 2017-08-07 11:14:51