Vamos aprender com esse pequendo tutorial a criar uma caixa suspensa para conteúdo em geral, links, texto, imagens etc. As caixas suspensas são bem úteis porque economizam espaço e o usuario é quem decidirá se irá exibir o seu conteúdo ou não.
Nossa caixa suspensa será feita usando propriedades CSS3 o que a deixará com aparência mais profissional sem a necessidade do uso de imagens, colocaremos cantos arredondados, sombras e gradiente.
Também usaremos um pequeno javascript que será responsável por ocultar ou mostrar o conteúdo revezando os clicks no mesmo link.
Primeiro vamos ao código CSS:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139
<style type="text/css">
/* |||||| CONFIGURAÇÃO DO MENU |||||| */
.caixa_cantos_arredondados_pr{
overflow:hidden;
height:auto;
width:450px;
background-image: -moz-linear-gradient(100% 100% 90deg, #e9bc36,#ff9900);
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#ff9900), to(#e9bc36));
-webkit-border-radius:14px;
border-radius: 14px;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
color: #ffffff;
font-family:arial;
font-weight:bold;
background-color:#fab514;
padding-bottom:20px;
}
.botao_arredondado_pr{
float:left;
overflow:hidden;
height:25px;
width:25px;
margin:auto;
background-image: -moz-linear-gradient(100% 100% 90deg, #33cc00,#66ff66);
background-image: -webkit-gradient(linear, 0% 0%, 0% 100%, from(#66ff66), to(#33cc00));
-webkit-border-radius:20px;
border-radius: 20px;
-webkit-box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
box-shadow: 0 1px 3px rgba(0, 0, 0, 0.5);
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
font-family:"arial black";
background-color:#66ff66;
display:block;
text-align:center;
margin:5px 5px auto 5px;
}
.topo_caixa_pr{
width:100%;
height:15px;
text-shadow: 0 -1px 1px rgba(0, 0, 0, 0.25);
color: #ffffff;
font-family:arial;
font-weight:bold;
text-align:left;
padding-top:5px;
}
.meio_caixa_pr{
display:none;
height:100%;
width:100%;
margin:auto auto auto 15px;
padding:0px;
}
.rodape_caixa_pr{
width:100%;
height:15px;
}
.titulo_pr{
margin:5px 0px 0px 0px;
}
.titulo_pr a,#sinal{
margin:5px 0px 0px 0px;
color:#ffffff;
text-decoration:none;
}
#cca a{color:#ffff00;text-decoration:none;margin-left:10px;}
/* |||| FIM CONFIGURAÇÃO DO MENU |||| */
</style>
Não tem muito que explicar sobre a css, mas observem alguns detalhes:
Quando queremos alcança algum elemento sem ter que criar uma classe especÃfica ou referencia-lo diretamente  podemos pegar por exemplo, o elemento imediatamente externo e começarmos à partir dele, como no último bloco de código:  o sinal # significa que estamos referenciando pela ID do elemento e não pela classe. Observe que temos uma DIV de ID “cca” e dentro desta temos links, então alcançamos o link fazendo a sequência #cca a veja que não existe vÃrgula separando os elementos, pois fazem parte de uma mesma referência, se você fizesse dessa forma #cca, a você estaria referenciando separadamente a DIV de ID “cca” e todos os links que não tivessem definição de classe.
Observe também que a propriedade que atribui o gradiente é diferente para o Fire Fox “-moz-linear-gradient” e para o Chrome “-webkit-gradient” e as cores passadas são as que fazem a transição, e um detalhe importante é que elas são dispostas de maneira invertida do Fire Fox Para o Chrome, então quando  for usar outro padrão de cores atente para isso para que fique igual para os dois.
O código javascript é o seguinte:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
<script language="JavaScript">
corp="1"
function mostra(){
if(corp=="1"){
document.getElementById('cca').style.display="block"
document.getElementById('sinal').innerHTML="-"
corp="2"
}else{
document.getElementById('cca').style.display="none"
document.getElementById('sinal').innerHTML="+"
corp="1"
}
}
</script>
A div que guarda o conteúdo propriamente dito fica oculta ao abrir a página usando a propriedade display:none na class meio_caixa_pr
O que o javascript irá fazer ao clicar-se no link é verificar se o conteúdo está oculto e exibi-lo ou se está visÃvel irá oculta-lo.
Isso é feito da seguinte forma. Para a variável “corp” é atribuÃdo o valor 1 se estiver oculto, que é o valor inicial e 2 se estiver visÃvel, mas nesse caso poderia ser qualquer outro número pois a verificação é feita analisando se o valor é 1 ou não é 1, usamos dois apenas por convenção.
O que acontece então é que quando a página é acessada a primeira vez o seu valor está definido para 1 e se o usuário clicar para exibir, o script exibe o conteúdo atribuindo o valor “block” para a propriedade display da div de conteúdo e logo depois seta a variável para 2, sendo assim, se o usuário clicar novamente o script perceberá que a variável é 2 e fará o processo inverso, atribuindo o valor “none” para a propriedade display e em seguida seta novamente a variável corp para 1.
Atente também para o pequeno botão que aparece no canto superior direito da caixa e veja que inicialmente ele guarda o sinal + e ao exibir o conteúdo o sinal muda para – e vice-versa, isso é conseguido com o uso de innerHTML que alcança o conteúdo do elemento que está sendo referenciado por getElementById
Você pode entender melhor o uso de getElementById lendo o seguinte tutorial: Revezando imagens com Javascript e DOM.
Agora vamos montar a estrutura da caixa suspensa:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33
<div class="caixa_cantos_arredondados_pr" style="padding:5px auto auto 5p">
<div class="botao_arredondado_pr">
<a href="javascript:void(0)" id="sinal" onclick="mostra()">+</a>
</div>
<h3 class="titulo_pr">
<a href="javascript:void(0)" onclick="mostra()">Links Interessantes</a>
</h3>
<div id="cca" class="meio_caixa_pr">
<ul>
<li><a href="#" >Primeiro Link</a></li>
<li><a href="#" >Segundo Link</a></li>
<li><a href="#" >Terceiro Link</a></li>
</ul>
</div>
</div>
Agora crie um documento html e no cabeçalho entre as tags <body> e </body> coloque primeiro o código css e depois o javascript. No corpo do documento em qualquer lugar entre as tags <body> e </body> coloque e estrutura html.
OBS: Alguns efeitos CSS não são reconhecidos pelo Internet Explore.
Veja também como criar um teclado virtual com Javascript: Teclado virtual javascript.
Até a próxima.



Dermeval,
Estou chocado com a habilidade que você domina no assunto, fico feliz pois você não só passa o tutorial e explica, mas também nos ensina a parte teoria do assunto.
Parabéns, mas eu senti falta dos passos de Javascript e CSS, pois não encontrei em que tag deixar, e se possÃvel mostra alguma imagem de como é essa caixa surpresa.
Quando o meu Blog estiver com um Trafego maior, vou correr atrás de você para me enviar Guests Posts, por que pessoas como você, que domina no assunto, realmente tem espaço para meu Blog.
Abraços.
Olá Ruan,
Na próxima postagem irei ensinar como adaptar essa caixa suspensa para o WordPress e terá a imagem da caixa para você ver.
Quanto onde colocar o CSS e Javascript, é só copiar e colar entre as tags head, não tem mistério, assim:
<html>
<head>
Código css aqui
Código Javascript aqui
</head>
<body>
Código html aqui
</body>
</html>