Passe o mouse e Ativo apenas quando não estiver desativado


186

Eu uso o cursor do mouse , ativo e desativado para estilizar os botões.

Mas o problema é que, quando o botão é desativado, o foco e os estilos ativos ainda se aplicam.

Como aplicar o foco e ativo apenas nos botões ativados?

Respostas:



75
.button:active:hover:not([disabled]) {
    /*your styles*/
}

Você pode tentar isso ..


Essa é uma boa solução para quando você deseja que o estado "desabilitado por passar o mouse" pareça idêntico ao estado "desabilitado sem passar o mouse".
Mikhael Loo

Eu <3 esta solução. permite que eu tenha o seguinte: <button class = "button"> passa o mouse </button> e <button class = "button no-hover> não passa o mouse </button> usando apenas: not (.no-hover)
Ben

35

Por que não usar o atributo "disabled" em css. Isso deve funcionar em todos os navegadores.

button[disabled]:hover {
    background: red;
}
button:hover {
    background: lime;
}

13
Cobrir todos os estados desativados, selecionando-os todos em uma linha:.button[disabled], .button[disabled]:hover, .button[disabled]:focus, .button[disabled]:active {}
DBK

13

Uma abordagem com especificidade mais baixa que funciona nos navegadores mais modernos (IE11 + e excluindo alguns navegadores Opera e IE móveis - http://caniuse.com/#feat=pointer-events ):

.btn {
  /* base styles */
}

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

.btn:hover {
  color: red;
}

A pointer-events: noneregra desabilitará o foco; você não precisará aumentar a especificidade com um .btn[disabled]:hoverseletor para anular o estilo de foco.

(Para sua informação, estes são os eventos-ponteiro HTML simples, não os eventos-ponteiro contenciosos de dispositivos de entrada de abstração)


12

Em 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;
  }
}

10

Se você estiver usando LESSou Sass, você pode tentar o seguinte:

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

Essa é uma boa solução no SASS, pois o efeito de foco será processado para um botão desativado, a menos que você o envolva em nenhum bloco.
mbokil 27/01

2

Uma maneira é adicionar uma classe partcular ao desativar botões e substituir os estados de foco e ativo dessa classe em css. Ou removendo uma classe ao desativar e especificar as propriedades de foco e pseudo ativo nessa classe apenas em css. De qualquer forma, provavelmente não pode ser feito apenas com css, você precisará usar um pouco de js.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.