Criando uma caixa suspensa com CSS3

Caixa suspensa com CSS3 - dicas de cssVamos 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.

2 Respostas para Criando uma caixa suspensa com CSS3

  1. 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>

Deixe uma resposta

O seu endereço de email não será publicado Campos obrigatórios são marcados *

*

Você pode usar estas tags e atributos de HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>