javascript - Alterar a cor do rótulo com base no evento do mouse e/ou valor booleano
Atualmente, estou tentando mudar a cor de fundo de um rótulo com base em um valor. Ao mesmo tempo, gostaria de mudar a cor do rótulo se o usuário clicar nele ou passar o mouse sobre ele. Atualmente, já fiz o clique e o hover (usando classes CSS separadas), mas não tenho certeza de como fazer a parte do valor funcionar também.
Eu tenho um valor booleano simples (chamado 'displayValueTrueClass') definido como true em um arquivo TypeScript. Se esse valor for true, então eu quero mudar a classe CSS para uma classe 'valueTrue'.
Aqui está meu HTML:
<section class="ac-container">
<div>
<input id="id-1" name="id-1" type="checkbox" />
<label [ngClass]="{'valueTrue': displayValueTrueClass}" for="id-1">Panel Name Goes Here</label>
</div>
e aqui está o meu CSS:
.ac-container {
width: 100%;
margin: 10px auto 30px auto;
}
.valueTrue {
background-color: #060bf7;
color: #ffffff;
}
.ac-container label {
padding: 4px 20px;
position: relative;
display: block;
height: 25px;
cursor: pointer;
color: #ffffff;
font-size: 12px;
background: #404040;
}
.ac-container label:hover {
background-color: #000000;
}
.ac-container input:checked + label,
.ac-container input:checked + label:hover{
background-color: #4ed017;
color: #ffffff;
}
.ac-container label-broken {
background-color: #ff0000;
color: #ffffff;
}
Meu TypeScript tem o booleano definido como verdadeiro:
displayValueTrueClass: boolean = true;
Posso confirmar que a linha ngClass realmente exibe usando a classe CSS apropriada, mas somente se eu remover todas as outras classes .ac-container:label, então parece que elas talvez estão tendo precedência sobre a classe valueTrue? Sou relativamente novo em construir HTML com CSS. Tenho quase certeza de que estou usando 'ngClass' corretamente, então não entendo por que a classe apropriada não é aplicada quando esse valor é verdadeiro.
Resposta #1
Como você notou, o seletor CSS .ac-container label tem maior precedência do que o seletor .trueValue. Você pode dar ao seletor .trueValue uma precedência maior tornando-o mais específico:
.ac-container label.trueValue
Ele substituirá o seletor de rótulo padrão quando a classe trueValue for aplicada.
Mais detalhes sobre a especificidade do CSS podem ser encontrados neste artigo.
