Usando apenas CSS, show div ao passar o mouse sobre <a>
302
Gostaria de mostrar uma div quando alguém passa o mouse sobre um <a>elemento, mas gostaria de fazer isso em CSS e não em JavaScript. Você sabe como isso pode ser alcançado?
lembre-se que: hover não vai funcionar da mesma maneira em telas sensíveis ao toque, e nestes dias, deve usado com precaução (por exemplo, evite usar para exibir elementos de navegação adicionais)
acompanhando meu último comentário, também vejo algumas variações úteis em uma resposta de comentário que fiz nessa publicação no blog: zoomicon.wordpress.com/2017/11/25/…
O HTML5 permite que os elementos âncora envolvam quase tudo, portanto, nesse caso, o divelemento pode ser transformado em filho da âncora. Caso contrário, o princípio é o mesmo - use a :hoverpseudo-classe para alterar a displaypropriedade de outro elemento.
solução agradável, mesmo se você colocar div: hover {display: block;} então div não escondia quando você passa o mouse em si Div ..
Alper
22
Isso fará com que todos <div>os itens da página display:nonee quando o mouse passe o mouse sobre "Passe o mouse sobre mim!" fará com que todos os <div>seguintes sejam <a>dentro do mesmo pai display:block. Pode ser uma ideia melhor selecionar por .class-nameou por #id. Caso contrário, boa postagem.
Nate
10
adicione div: pairar {display: block; } para mantê-lo fora enquanto o mouse estiver sobre ele
monkeyhouse
Pode ser prudente usar a visibilidade em vez da exibição. Pelo que me lembro, é mais eficiente porque a tela redesenha o div toda vez. Embora provavelmente não importe para uma div, se você precisar fazer muitas, talvez seja melhor torná-las invisíveis.
Prinsig
@Yi Jiang - como você adicionou este código à resposta?
Como essa resposta é popular, acho que é necessária uma pequena explicação. Usando esse método quando você passa o mouse sobre o elemento interno, ele não desaparece. Como o .showme está dentro do .showhim, ele não desaparece quando você move o mouse entre as duas linhas de texto (ou o que quer que seja).
Estes são exemplos de quirqs que você precisa cuidar ao implementar esse comportamento.
Tudo depende do que você precisa. Esse método é melhor para um cenário de estilo de menu, enquanto o de Yi Jiang é melhor para dicas de ferramentas.
Você não pode ter elemento de bloco dentro elemento inline, a menos que você estiver usando HTML 5.
metil
3
HTML5 ainda não é um padrão, então o método de Yi Jiang é melhor.
metil
4
eu sei que é melhor, é por isso que eu upvoted it :) i deu um exemplo de trabalho, apresentando um conceito (seletores css mais especificamente), não vejo porque downvote-lo ^^
n00b
Pode ser melhor usar <span>s, mas acho que este é um exemplo melhor do que o de Yi Jiang.
Nate
37
Achei que usar a opacidade é melhor, ele permite que você adicione transições css3 para fazer um bom efeito de foco final. As transições serão descartadas apenas pelos navegadores IE mais antigos, de modo que degradam normalmente.
#stuff {opacity:0.0;-webkit-transition: all 500ms ease-in-out;-moz-transition: all 500ms ease-in-out;-ms-transition: all 500ms ease-in-out;-o-transition: all 500ms ease-in-out;transition: all 500ms ease-in-out;}#hover {width:80px;height:20px;background-color:green;margin-bottom:15px;}#hover:hover +#stuff {opacity:1.0;}
Isso é ótimo, usei isso para uma div muito maior. Eu queria que a div "stuff" permanecesse visível se eu movesse meu cursor da div "hover" para a div "stuff", então alterei o último elemento de estilo de #hover:hover + #stuff {para #hover:hover + #stuff, #stuff:hover {. Então a div "coisas" permanece visível quando você passa por cima dessa div!
NotJay
26
Sou especialista em meios, mas estou incrivelmente orgulhosa de ter trabalhado sobre esse código. Se você fizer:
div {
display: none;}
a:hover > div {
display: block;}
(Observe o '>') Você pode conter a coisa toda em uma tag, então, desde que seu gatilho (que pode estar em sua própria div, ou diretamente na tag a, ou qualquer coisa que você queira) toque fisicamente a div revelada, você pode mover o mouse de um para o outro.
Talvez isso não seja muito útil, mas eu tive que definir meu div revelado para transbordar: auto, então às vezes ele tinha barras de rolagem, que não podiam ser usadas assim que você se afastava do div.
De fato, depois de finalmente descobrir como fazer a div revelada (embora agora seja filha do gatilho, não um irmão), sente-se atrás do gatilho, em termos de z-index, (com uma pequena ajuda desta página : Como fazer com que um elemento pai apareça acima de filho ), você nem precisa rolar o div revelado para rolar o mouse, apenas fique pairando sobre o gatilho e use sua roda, ou o que for.
Minha div revelada cobre a maior parte da página; portanto, essa técnica a torna muito mais permanente, em vez da tela piscando de um estado para outro a cada movimento do mouse. Na verdade, é realmente intuitivo, daí o motivo pelo qual tenho muito orgulho de mim mesmo.
A única desvantagem é que você não pode colocar links dentro da coisa toda, mas pode usá-la como um grande link.
<aclass="hoverable">Hover over me!</a><divclass="show-on-hover">I'm a block element.</div><hr/><aclass="hoverable">Hover over me also!</a><spanclass="show-on-hover">I'm an inline element.</span>
Gostaria de oferecer esta solução de modelo de uso geral que se expande para a solução correta fornecida pela Yi Jiang.
Os benefícios adicionais incluem:
suporte para passar o mouse sobre qualquer tipo de elemento ou vários elementos;
o pop-up pode ser qualquer tipo de elemento ou conjunto de elementos, incluindo objetos;
código de auto-documentação;
garante que o pop-up apareça sobre os outros elementos;
uma base sólida a seguir se você estiver gerando código html a partir de um banco de dados.
No html, você coloca a seguinte estrutura:
<divclass="information_popup_container"><divclass="information"><!-- The thing or things you want to hover over go here such as images, tables,
paragraphs, objects other divisions etc. --></div><divclass="popup_information"><!-- The thing or things you want to popup go here such as images, tables,
paragraphs, objects other divisions etc. --></div></div>
No css, você coloca a seguinte estrutura:
div.information_popup_container {
position: absolute;
width:0px;
height:0px;/* Position Information *//* Appearance Information */}
div.information_popup_container > div.information {/* Position Information *//* Appearance Information */}
div.information_popup_container > div.popup_information {
position:fixed;
visibility: hidden;/* Position Information *//* Appearance Information */}
div.information_popup_container > div.information:hover + div.popup_information {
visibility: visible;
z-index:200;}
Alguns pontos a serem observados são:
Como a posição do div.popup está definida como fixa (também funcionaria com absoluto), o conteúdo não está dentro do fluxo normal do documento, o que permite que o atributo visível funcione bem.
O z-index está configurado para garantir que o div.popup apareça acima dos outros elementos da página.
O information_popup_container está definido como um tamanho pequeno e, portanto, não pode passar o mouse.
Esse código oferece suporte apenas ao passar o mouse sobre o elemento div.information. Para oferecer suporte ao passar o mouse sobre as informações div.info e div.popup, consulte Passe o mouse sobre o pop-up abaixo.
Foi testado e funciona como esperado no Opera 12.16 Internet Explorer 10.0.9200, Firefox 18.0 e Google Chrome 28.0.15.
Passe o mouse sobre o pop-up
Como informação adicional. Quando o pop-up contém informações com as quais você pode recortar e colar ou contém um objeto com o qual você deseja interagir, primeiro substitua:
E segundo, ajuste a posição do div.popup para que haja uma sobreposição com o div.information. Alguns pixels são suficientes para garantir que o div.popup possa receber o cursor ao mover o cliente para fora das informações div.
Isso não funciona como esperado no Internet Explorer 10.0.9200 e funciona como esperado no Opera 12.16, Firefox 18.0 e Google Chrome 28.0.15.
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><styletype="text/css">
div
{display:none;color:black
width:100px;height:100px;background:white;animation:myfirst 9s;-moz-animation:myfirst 9s;/* Firefox */-webkit-animation:myfirst 5s;/* Safari and Chrome */}@keyframes myfirst
{0%{background:blue;}25%{background:yellow;}50%{background:blue;}100%{background:green;}}@-moz-keyframes myfirst /* Firefox */{0%{background:white;}50%{background:blue;}100%{background:green;}}@-webkit-keyframes myfirst /* Safari and Chrome */{0%{background:red;}25%{background:yellow;}50%{background:blue;}100%{background:green;}}a:hover + div{display:inline;}</style></head><body><ahref="#">Hover over me!</a><div>the color is changing now</div><div></div></body></html>
O +permitir 'selecionar' apenas o primeiro elemento não aninhado, >apenas os elementos aninhados - o melhor é usar o ~que permite selecionar o elemento arbitrário que é filho do elemento pairado pai. Usando opacidade / largura e transição, você pode fornecer uma aparência suave
div {transition: all 1s}.ccc,.ggg {opacity:0;color: red}.ccc {height:0}.aaa:hover ~.bbb .ccc {opacity:1;height:34px}.aaa:hover ~.eee .fff .ggg {opacity:1}
<divclass="aaa">Hover me... to see<br><br></div><divclass='bbb'>BBBBB
<divclass='ccc'>CCCCC
<divclass='ddd'>DDDDD</div></div></div><divclass='eee'>EEEEE
<divclass='fff'>FFFFF
<divclass='ggg'>GGGGG</div><divclass='hhh'>HHHHH</div></div></div>
, resultou que ele se expande usando o segundo, mas não se expande usando o primeiro. Portanto, se houver uma div entre o alvo em foco e a div oculta, ela não funcionará.
<divclass="product-card-sales-container brand-sales"><divclass="product-card-">Message from the business goes here. They can talk alot or not</div></div>
Respostas:
Você pode fazer algo parecido com isso :
Isso usa o seletor de irmão adjacente e é a base do menu suspenso otário .
O HTML5 permite que os elementos âncora envolvam quase tudo, portanto, nesse caso, o
div
elemento pode ser transformado em filho da âncora. Caso contrário, o princípio é o mesmo - use a:hover
pseudo-classe para alterar adisplay
propriedade de outro elemento.fonte
<div>
os itens da páginadisplay:none
e quando o mouse passe o mouse sobre "Passe o mouse sobre mim!" fará com que todos os<div>
seguintes sejam<a>
dentro do mesmo paidisplay:block
. Pode ser uma ideia melhor selecionar por.class-name
ou por#id
. Caso contrário, boa postagem.jsfiddle
Como essa resposta é popular, acho que é necessária uma pequena explicação. Usando esse método quando você passa o mouse sobre o elemento interno, ele não desaparece. Como o .showme está dentro do .showhim, ele não desaparece quando você move o mouse entre as duas linhas de texto (ou o que quer que seja).
Estes são exemplos de quirqs que você precisa cuidar ao implementar esse comportamento.
Tudo depende do que você precisa. Esse método é melhor para um cenário de estilo de menu, enquanto o de Yi Jiang é melhor para dicas de ferramentas.
fonte
<span>
s, mas acho que este é um exemplo melhor do que o de Yi Jiang.Achei que usar a opacidade é melhor, ele permite que você adicione transições css3 para fazer um bom efeito de foco final. As transições serão descartadas apenas pelos navegadores IE mais antigos, de modo que degradam normalmente.
fonte
#hover:hover + #stuff {
para#hover:hover + #stuff, #stuff:hover {
. Então a div "coisas" permanece visível quando você passa por cima dessa div!Sou especialista em meios, mas estou incrivelmente orgulhosa de ter trabalhado sobre esse código. Se você fizer:
(Observe o '>') Você pode conter a coisa toda em uma tag, então, desde que seu gatilho (que pode estar em sua própria div, ou diretamente na tag a, ou qualquer coisa que você queira) toque fisicamente a div revelada, você pode mover o mouse de um para o outro.
Talvez isso não seja muito útil, mas eu tive que definir meu div revelado para transbordar: auto, então às vezes ele tinha barras de rolagem, que não podiam ser usadas assim que você se afastava do div.
De fato, depois de finalmente descobrir como fazer a div revelada (embora agora seja filha do gatilho, não um irmão), sente-se atrás do gatilho, em termos de z-index, (com uma pequena ajuda desta página : Como fazer com que um elemento pai apareça acima de filho ), você nem precisa rolar o div revelado para rolar o mouse, apenas fique pairando sobre o gatilho e use sua roda, ou o que for.
Minha div revelada cobre a maior parte da página; portanto, essa técnica a torna muito mais permanente, em vez da tela piscando de um estado para outro a cada movimento do mouse. Na verdade, é realmente intuitivo, daí o motivo pelo qual tenho muito orgulho de mim mesmo.
A única desvantagem é que você não pode colocar links dentro da coisa toda, mas pode usá-la como um grande link.
fonte
Esta resposta não exige que você saiba que tipo de exibição (em linha, etc.) o elemento ocultável deve ser ao ser mostrado:
Isso usa o seletor de irmão adjacente e o não seletor .
fonte
Gostaria de oferecer esta solução de modelo de uso geral que se expande para a solução correta fornecida pela Yi Jiang.
Os benefícios adicionais incluem:
No html, você coloca a seguinte estrutura:
No css, você coloca a seguinte estrutura:
Alguns pontos a serem observados são:
Passe o mouse sobre o pop-up
Como informação adicional. Quando o pop-up contém informações com as quais você pode recortar e colar ou contém um objeto com o qual você deseja interagir, primeiro substitua:
com
E segundo, ajuste a posição do div.popup para que haja uma sobreposição com o div.information. Alguns pixels são suficientes para garantir que o div.popup possa receber o cursor ao mover o cliente para fora das informações div.
Isso não funciona como esperado no Internet Explorer 10.0.9200 e funciona como esperado no Opera 12.16, Firefox 18.0 e Google Chrome 28.0.15.
Veja fiddle http://jsfiddle.net/F68Le/ para um exemplo completo com um menu multinível pop-up.
fonte
por favor teste este código
fonte
O
+
permitir 'selecionar' apenas o primeiro elemento não aninhado,>
apenas os elementos aninhados - o melhor é usar o~
que permite selecionar o elemento arbitrário que é filho do elemento pairado pai. Usando opacidade / largura e transição, você pode fornecer uma aparência suavefonte
Para mim, se eu quiser interagir com a div oculta sem vê-la desaparecer toda vez que deixar o elemento acionador (a nesse caso), devo adicionar:
fonte
Com base na resposta principal, este é um exemplo, útil para exibir uma dica de ferramenta de informações ao clicar em
?
um link próximo:fonte
Dos meus testes usando este CSS:
E este HTML:
, resultou que ele se expande usando o segundo, mas não se expande usando o primeiro. Portanto, se houver uma div entre o alvo em foco e a div oculta, ela não funcionará.
fonte
HTML
CSS
CodePen: passe o mouse sobre div mostrar texto em outra div
fonte
Não se esqueça se você estiver tentando passar o mouse sobre uma imagem, precisará colocá-la em torno de um contêiner. css:
Se você passar o mouse sobre isso:
Isso mostrará:
fonte