Eu tenho um elemento de imagem que desejo alterar ao clicar.
<img id="btnLeft">
Isso funciona:
#btnLeft:hover {
width:70px;
height:74px;
}
Mas o que eu preciso é:
#btnLeft:onclick {
width:70px;
height:74px;
}
Mas, isso não funciona, obviamente. É possível ter onclick
comportamento em CSS (ou seja, sem usar JavaScript)?
:active
funciona enquanto o mouse está pressionado. Dependendo do que você está tentando fazer, você poderá fazê-lo funcionar usando a pseudo classe CSS4:target
.:target
não é novidade para os seletores 4. Está disponível desde os seletores 3, que já era uma recomendação há um ano no momento da redação deste artigo.Respostas:
O mais próximo que você vai chegar é
:active
:No entanto, isso só aplicará o estilo quando o botão do mouse for pressionado. A única maneira de aplicar um estilo e mantê-lo aplicado ao clicar é usar um pouco de JavaScript.
fonte
Resposta a partir de 2019:
A melhor maneira (na verdade, a única maneira *) de simular um evento de clique real usando apenas CSS (em vez de passar o mouse sobre um elemento ou torná-lo ativo, onde você não tem mouseUp ) é usar a caixa de seleção hack. Ele funciona anexando a
label
a um<input type="checkbox">
elemento através dofor=""
atributo do rótulo .Esse recurso possui amplo suporte ao navegador (a
:checked
pseudo classe é o IE9 +).Aplique o mesmo valor para um
<input>
's atributo ID e um acompanhante<label>
' sfor=""
atributo, e você pode dizer ao navegador para re-estilo da etiqueta no clique com o:checked
pseudo-classe, graças ao fato de que, ao clicar uma etiqueta irá verificar e desmarque a "associado"<input type="checkbox">
.* Você pode simular um evento "selecionado" por meio do
:active
ou:focus
pseudo-classe no IE7 + (por exemplo, para um botão que é normalmente50px
grande, você pode mudar a sua largura, enquantoactive
:#btnControl:active { width: 75px; }
), mas aqueles que não são verdadeiras "clique" eventos. Eles ficam "ativos" o tempo todo em que o elemento é selecionado (como Tabpressionar o teclado), que é um pouco diferente de um evento de clique real, que aciona uma ação - normalmente -mouseUp
.Demonstração básica do hack da caixa de seleção (a estrutura básica do código para o que você está pedindo):
Mostrar snippet de código
Aqui posicionei o rótulo logo após a entrada na minha marcação. Isso é para que eu possa usar o seletor de irmão adjacente (a +tecla) para selecionar apenas o rótulo que segue imediatamente minha
#demo
caixa de seleção. Como a:checked
pseudo-classe se aplica à caixa de seleção,#demo:checked + label
ela só será aplicada quando a caixa de seleção estiver marcada.Demonstração para redimensionar uma imagem ao clicar, e é isso que você está perguntando:
Com isso dito, não é uma má notícia. Como um rótulo pode ser associado apenas a um controle de formulário por vez , isso significa que você não pode simplesmente soltar um botão dentro das
<label></label>
tags e chamá-lo por dia. No entanto, nós podemos usar alguns CSS para tornar o rótulo e se comportam bastante perto de como um botão HTML parece e se comporta.Demonstração para imitar o efeito de clique no botão, acima e além do que você está perguntando:
Mostrar snippet de código
A maior parte do CSS nesta demonstração é apenas para estilizar o elemento label. Se você realmente não precisar de um botão , e qualquer elemento antigo for suficiente, poderá remover quase todos os estilos desta demonstração, semelhante à minha segunda demonstração acima.
Você também notará que eu tenho uma propriedade prefixada lá
-moz-outline-radius
,. Há algum tempo, a Mozilla adicionou essa incrível propriedade não especificada ao Firefox, mas o pessoal do WebKit decidiu que não a adicionaria , infelizmente. Portanto, considere essa linha de CSS apenas um aprimoramento progressivo para pessoas que usam o Firefox.fonte
:checked
.Você pode usar pseudo classe
:target
para imitar o evento click, deixe-me dar um exemplo.Veja como é: http://jsfiddle.net/TYhnb/
Uma coisa a observar, isso é limitado apenas ao hiperlink; portanto, se você precisar usar outro que não seja o hiperlink, como um botão, convém invadir um pouco, como estilizar um hiperlink para parecer um botão.
fonte
Se você der o elemento a
tabindex
, poderá usar a:focus
pseudo classe para simular um clique.HTML
CSS
http://jsfiddle.net/NaTj5/
fonte
tabindex=-1
o item, ainda é focalizável, mas apenas pelo mouse, não pelo teclado, o que é melhor nesse caso. você também pode usar umoutline:0
estilo para remover a borda azul quando focadaEdit: Respondido antes do OP esclarecer o que ele queria. A seguir, um onclick semelhante ao javascripts onclick, não o
:active
pseudo classe.Isso só pode ser alcançado com Javascript ou o Checkbox Hack
O hack da caixa de seleção basicamente permite que você clique em um rótulo, que "marca" uma caixa de seleção, permitindo que você estilize o rótulo como desejar.
A demo
fonte
id
atributos para ligá-los.TylerH deu uma resposta muito boa, e eu apenas tive que atualizar a versão do último botão.
fonte
Que tal uma solução CSS pura sem ser (isso) hacky?
O @TylerH tem uma ótima resposta, mas é uma solução bastante complexa. Eu tenho uma solução para aqueles que desejam apenas um simples efeito "onclick" com CSS puro, sem um monte de elementos extras.
Nós simplesmente usaremos transições CSS. Você provavelmente poderia fazer o mesmo com as animações.
O truque é alterar o atraso da transição para que dure quando o usuário clicar.
Aqui também adiciono a classe "clicada" para que o javascript também possa fornecer o efeito, se necessário. Eu uso o filtro de sombra de 0px porque destacará o gráfico transparente azul fornecido desta maneira para o meu caso.
Eu tenho um filtro em 0s aqui para que não entre em vigor. Quando o efeito é liberado, posso adicionar a transição com um atraso para que ele forneça um bom efeito "clicado".
Isso me permite configurá-lo para que, quando o usuário clicar no botão, realce o azul e desapareça lentamente (você pode, é claro, usar outros efeitos também).
Embora você esteja limitado aqui no sentido de que a animação a destacar é instantânea, ela ainda fornece o efeito desejado. Você provavelmente poderia usar esse truque com animação para produzir uma transição geral mais suave.
fonte
Ok, este talvez seja um post antigo ... mas foi o primeiro resultado no google e decidiu fazer o seu próprio mix neste ..
PRIMEIRO, USAREI O FOCO
A razão para isso é que ele funciona bem para o exemplo que estou mostrando, se alguém quiser um evento do tipo mouse down, use active
O CÓDIGO HTML:
O CÓDIGO CSS:
JS LINK FIDDLE: http://jsfiddle.net/00wwkjux/
Então, por que estou postando isso em um tópico antigo, bem, porque os exemplos aqui variam e pensei em fornecer um de volta à comunidade, que é um exemplo de trabalho.
Como já foi respondido pelo criador do thread, ele deseja que o efeito dure apenas durante o evento click. Agora, embora isso não seja exato para essa necessidade, está próximo. O active será animado enquanto o mouse estiver pressionado e quaisquer alterações que você precise que durem mais precisam ser feitas com javascript.
fonte
Aviso! Resposta particularmente simples abaixo! :)
Na verdade, você pode ter uma alteração que persista (como um bloco / pop-up que aparece e permanece visível após um clique) apenas com CSS (e sem usar o hack da caixa de seleção), apesar do que muitas das respostas (de outra forma corretas) aqui reivindicam, desde pois você só precisa de persistência durante o foco.
Portanto, dê uma olhada nas respostas de Bojangles e TylerH, se elas funcionarem para você, mas se você quiser uma resposta simples e apenas CSS que manterá um bloco visível depois de ser clicado (e até pode fazer com que o bloco desapareça com um clique de acompanhamento), então veja esta solução.
Eu tive uma situação semelhante, precisava de uma div pop-up com o onClick, onde não era possível adicionar nenhum JS ou alterar a marcação / HTML (uma solução verdadeiramente CSS) e isso é possível com algumas ressalvas. Você não pode usar o truque: target, que pode criar um bom pop-up, a menos que você possa alterar o HTML (para adicionar um 'id'), para que isso ocorra.
No meu caso, a div pop-up estava contida na outra div, e eu queria que o pop-up aparecesse em cima da outra div, e isso pode ser feito usando uma combinação de: active e: hover:
Exemplo (bem como um que permite clicar no pop-up para fazê-lo desaparecer) em:
http://davesource.com/Solutions/20150324.CSS-Only-Click-to-Popup-Div/
Também inseri um exemplo de trecho de código abaixo, mas o posicionamento na sandbox stackoverflow é estranho, então tive que colocar o texto 'clique aqui' após o innerDiv, o que normalmente não é necessário.
fonte
Eu tenho o código abaixo para passar o mouse e clicar com o mouse e funciona:
e esse código oculta a imagem quando você clica nela:
fonte
Eu tive um problema com um elemento que precisava ser colorido de VERMELHO ao passar o mouse e ser AZUL ao clicar ao passar o mouse. Para conseguir isso com o css, você precisa, por exemplo:
Eu lutei por algum tempo até descobrir que a ordem dos seletores de CSS era o problema que eu estava tendo. O problema era que troquei de lugar e o seletor ativo não estava funcionando. Então eu descobri que
:hover
ir primeiro e depois:active
.fonte
você pode usar: target
para alvo geral
ou filtrar pelo nome da classe
ou filtrar pelo nome do ID
fonte
:target
já está publicada, portanto, não há mais necessidade. Além disso, o questionador pergunta como obter um efeito "onclick", não mostra / oculta outros elementos.