Quero adicionar um estilo ao rótulo selecionado de um botão de opção:
HTML:
<div class="radio-toolbar">
<label><input type="radio" value="all" checked>All</label>
<label><input type="radio" value="false">Open</label>
<label><input type="radio" value="true">Archived</label>
</div>
CSS
.radio-toolbar input[type="radio"] {display:none;}
.radio-toolbar label {
background:Red;
border:1px solid green;
padding:2px 10px;
}
.radio-toolbar label + input[type="radio"]:checked {
background:pink !important;
}
Alguma idéia do que estou fazendo de errado?
:checked
seletor..foo { ... }
display:none;
, os navegadores farão com que o teclado funcione perfeitamente.Se você realmente deseja colocar as caixas de seleção dentro da etiqueta, tente adicionar uma tag de extensão extra, por exemplo.
HTML
CSS
Isso definirá os planos de fundo para todos os irmãos do botão de opção selecionado.
fonte
for
atributos.Você está usando um seletor de irmão adjacente (
+
) quando os elementos não são irmãos. O rótulo é o pai da entrada, não o irmão.O CSS não tem como selecionar um elemento com base em seus descendentes (nem em nada que se segue).
Você precisará procurar no JavaScript para resolver isso.
Como alternativa, reorganize sua marcação:
fonte
Você pode adicionar uma extensão ao seu html e css.
Aqui está um exemplo do meu código ...
HTML (JSX):
CSS para fazer com que o botão de opção padrão desapareça na tela e sobreponha a imagem do botão personalizado:
fonte
Como atualmente não existe uma solução CSS para estilizar um pai, uso uma simples jQuery aqui para adicionar uma classe a um rótulo com entrada marcada dentro dele.
Não se esqueça de dar
checkedlabel
também à classe do rótulo da entrada pré-verificadafonte
Aqui está uma solução acessível
fonte