CSS swap hover effect

Postado por: Pedro Rogério em

Vocês provavelmente já devem conhecer esse efeito, o de o usuário ao passar o mouse sobre alguma imagem na página, é mostrada a descrição da mesma, com um efeito de “swap”, esse efeito é bem interessante para ser utilizado em sites do tipo e-commerce, e para conseguir esse tipo de efeito não é muito difícil, só vamos ter algum trabalho para adequar o efeito ao Internet Explorer 6, que não interpreta corretamente o efeito :hover.

Para chegar a esse efeito, cada bloco de imagem deverá conter a seguinte marcação HTML:

<a class="show" href="#" title="Livro Ajax com jQuery"><img src="images/livro-ajax-com-jquery.jpg" alt="Livro Ajax com jQuery" /></a>
<div class="hide">
    <a href="#">Livro Ajax com jQuery</a>
    <p>Requisições Ajax com a simplicidade da jQuery</p>
</div>

Como pode ver no código acima, a miniatura da imagem fica dentro de um link com a class=”show” e depois criamos mais uma div que irá conter a descrição da imagem. Elá será revelada somente quando o usuário passar o mouse sob o thumbnail da imagem. Para que você possar manipular melhor os elementos na página, aconselho você a utilizar listas desordenadas para conter essa marcação:

<ul id="work">
    <li>
    	<a class="show" href="#" title="Livro Ajax com jQuery"><img src="images/livro-ajax-com-jquery.jpg" alt="Livro Ajax com jQuery" /></a>
    	<div class="hide">
        	<a href="#">Livro Ajax com jQuery</a>
    		<p>Requisições Ajax com a simplicidade da jQuery</p>
        </div>
    </li>

    <li>
    	<a class="show" href="#" title="Livro Ajax com jQuery"><img src="images/livro-ajax-com-jquery.jpg" alt="Livro Ajax com jQuery" /></a>
    	<div class="hide">
        	<a href="#">Livro Ajax com jQuery</a>
    		<p>Requisições Ajax com a simplicidade da jQuery</p>
        </div>
    </li>

    <li>
    	<a class="show" href="#" title="Livro Ajax com jQuery"><img src="images/livro-ajax-com-jquery.jpg" alt="Livro Ajax com jQuery" /></a>
    	<div class="hide">
        	<a href="#">Livro Ajax com jQuery</a>
    		<p>Requisições Ajax com a simplicidade da jQuery</p>
        </div>
    </li>
</ul>

Com o HTML já definido, vamos partir para o CSS:

#work {
	list-style:none;
	margin:0;
	padding:0;
}
#work li {
	float:left;
	width:235px;
	margin:10px;
	display:inline;
	padding:3px;
	background:#fff;
	border:1px solid #cad789;
	height:154px;
}
#work li a {
	border:none;
}
#work p {
	margin-bottom:0;
}

O código é bem simples, basta definir float para todos os elementos da lista, definir também uma largura e altura para o box. O básico já está pronto, agora vamos criar os efeitos:

#work li .show{
	display:block;
	width:235px;
	height:154px;
}
#work li .hide {
	color:#d4df9d;
	text-align: left;
	height: 0;
	overflow: hidden;
	background-color:#687b00;
}

Como podem ver foram utilizados height:0 e overflow:hidden na class=”hide” para garantir que ela fique invisível ao usuário e somente os elementos com a class=”show” sejam revelados ao usuário com a utilização do seguinte código:

#work li:hover .hide{
	cursor: pointer;
	height: 133px;
	padding:10px;
	width:215px;
}
#work li:hover .show {
	height: 0;
	overflow: hidden;
}

Eu uso a pseudo-classe :hover para definir algumas propriedades para a class .hide toda vez que o usuário passar o mouse sobre os elementos de lista desordenada com o id work. Depois definimos a altura do .hide para 153px e após adicionamos height:0 e overflow:hidden para o elemento .show.

Vejam agora o exemplo em funcionamento, mas ele ainda não funciona no Internet Explorer 6 e anteriores.

Solução para o IE6

Para que esse exemplo funcione corretamente no IE6 teremos que utilizar de JavaScript para que ele interprete o :hover corretamente nos elementos, basta observar o código abaixo:

<!--[if lte IE 7]>
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript">
$(function() {
	$("#work li").hover(function () {
		$(this).addClass("over");
	},function () {
		$(this).removeClass("over");
});
</script>
<![endif]-->

O Script acima irá adicionar a class=”over” a cada item da lista. É aconselhável você utilizar comentários condicionais para que o código seja somente lido pelo Internet Explorer 6 e anteriores. Não podemos esquecer também de adicionar ao CSS a marcação #work li.over .hide para que ela funcione semelhante a #work li:hover .hide. Basta efetuar a seguinte alteração no CSS:

#work li:hover .hide, #work li.over .hide{
	cursor: pointer;
	height: 133px;
	padding:10px;
	width:215px;
}
#work li:hover .show, #work li.over .show  {
	height: 0;
	overflow: hidden;
}

Vejam agora o exemplo final funcional no Internet Explorer 6. Esse post foi escrito com base no post original de Min Tran.

Posts Relacionados

Confira também outros artigos interessantes postados aqui no blog.

Gostou desse post?

Assine o nosso Feed RSS, siga-nos no Twitter, ou simplesmente nos recomende a seus amigos!

Sobre Pedro Rogério

Pedro Rogério é desenvolvedor web por paixão, não saberia fazer melhor outra coisa. Além de escrever para o CSS no Lanche também escreve para o Pinceladas da Web, blog com assuntos gerais sobre desenvolvimento web.

10 Responses to “CSS swap hover effect”

  1. Celso disse:

    Pedrinho!

    Parabéns pelo post, como sempre mandando super bem, quero saber quando sai o seu livro rs !

    Abs

  2. Andre disse:

    n entendi aki, tem um dispplay block e um display inline…assim nao esta anulando o display block? e ja declarando o float left, ja nao foi necessario para os “li” ficarem lado a lado?

    #work li {
    07. float:left;
    08. display:block;
    09. width:235px;
    10. margin:10px;
    11. display:inline;
    12. padding:3px;
    13. background:#fff;
    14. border:1px solid #cad789;
    15. height:154px;

  3. @Andre,

    Ops, aquele display:block ficou sobrando alí, desconsidere o mesmo. Obrigado.

  4. Micael disse:

    Nao sei pra que continuar desenvolvendo pra IE6 :P

    O lance é fazer que nem o youtube e orkut, contagem regressiva e JAH ERA!

  5. [...] More here: CSS swap hover effect » CSS no Lanche [...]

  6. Diego Oliveira disse:

    Aqui no Chrome ficou estranho, hein!
    1º, 2º e 4º item cortando.

    Flw.

  7. @Diego Oliveira,

    Já detectei o problema e já corrigi. Obrigado.

  8. Jacson Ferraz disse:

    fera gostei muito do efeito
    eu to desenvolvendo um site para um amigo e usei…
    no firefox funcionou muito bem… mais no i6 não consegui fazer funcionar… :S
    vc pode me ajudar… primeiramente eu nao sei se coloco no html ou no css o script, ja coloquei nos dois mais nao da certo… :S
    vlws parabens pelo blog muito bacana!

  9. Mario Sérgio disse:

    pow,achei mô complicado.to estudando css a 3 mesês sozinho todos os dias. so folta mais um pouco de pratica e estudo e ja estou fazendo sites legais em xhtml 1.0 e css 2.1. agora tenho que aprender mais efeitos como hover, e manipular as list bem!
    alguem manda um tuto aew? igual esse post do predro, mais um mais simples..

    vlw^^

  10. Marinho disse:

    Cara, parabéns pelo post e pelo blog. Você não imagina o quanto teus posts já me salvaram nesse novo mundo (para mim) do CSS. Valeu mesmo cara! CSS tá virando uma paixão pra mim!

    Obrigado e continua aí!

    Parabéns!!!

Leave a Reply