Total de visualizações de página

quinta-feira, 1 de outubro de 2009

Abas com CSS utilizando :target

Para aumentar a usabilidade do seu site, o ponto inicial seria dar uma maior atenção aos links internos dele. Veremos aqui a utilização do pseudo-seletor CSS3 :target, que é utilizado para manipular as âncoras do HTML.

Para desenvolver o artigo me baseei no exemplo citado na Revista W, edição 101, onde o autor Craig Grannell nos ensina a desenvolver um menu em abas que ao clicar o conteúdo é trocado. Isso até então era possível somente com a utilização de JavaScript, mas com a utilização do pseudo seletor :target isso agora fica fácil.

Primeiramente temos que montar a nossa estrutura HTML, muito simples e de fácil entendimento:

<div id="container">


<ul id="tabs">
<li><a class="tab_pinceladas" href="#pinceladas" title="Pinceladas da Web" rel="me">Pinceladas da Weba>li>
<li><a class="tab_css" href="#css" title="CSS no Lanche" rel="alternate">CSS no Lanchea>li>
ul>

<div id="pinceladas">
<ul>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
ul>
div>

<div id="css">

<ul>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
<li><a href="#" title="Texto aqui">Texto aquia>li>
ul>

div>

div>

Utilizei de uma div #container para conter toda a estrutura de nossas abas. Após isso, utilizei de uma lista desordenada com os links para as tabs com nomes fictícios: pinceladas e css, vocês entenderão o porquê disso quando virem o exemplo final. Depois, defini o conteúdo de cada aba; na div #pinceladas o conteúdo referente à aba pinceladas e, na div #css, o conteúdo referente à aba css. Para aqueles que já desenvolveram sistemas de tabs com JavaScript, até agora estão se sentindo familiarizados com a estrutura, mas o grande segredo está no CSS:

* {

padding
: 0;
margin
: 0;
}
body
{
font
: 62.5% "Lucida Grande", "Lucida Sans Unicode", Lucida, Arial, Helvetica, san-serif;
padding
: 30px;
}
a
{text-decoration:none}
li
{
font
-size:1.2em;
list
-style:none;
}

Primeiramente, vamos aplicar algumas definições gerais ao nosso exemplo, como utilizar um CSS Reset genérico. Depois definimos tamanho e família de fonte e outros estilos. Os estilos listados abaixo serão os utilizados no exemplo:

#container {

background
-color:#aaa;
border
:10px solid #666;
width
: 300px;
position
: relative;
overflow
: auto;
padding
:20px;
}
#tabs li {
float:left;
text
-align:center;
width
:150px;
}
#tabs li a {
color
:#000;
padding
:5px;
display
:block;
}
#pinceladas {
background
-color: #eaedf0;
}
#css {
background
-color: #69c;
}
#pinceladas a {
color
:#000;
}
#css a {
color
:#fff;
}
#pinceladas, #css {
float:left;
padding
:10px;
width
:280px;
}
#pinceladas li, #css li {
border
-bottom: 1px dotted #000000;
padding
: 5px 0;
}
.tab_pinceladas {
background
-color:#eaedf0;
}
.tab_css {
background
-color:#69c;
}
#css {
position
: relative;
margin
-left: -300px;
z
-index: -1 !important;
}
#container :target {
z
-index: 1 !important;
}

No CSS listado acima, nos estilos das linhas 1 até a 45 não existem segredos. É a partir da linha 46 que as coisas começam a acontecer, pois temos que definir que uma das abas fiquem escondidas, por isso utilizamos z-index:-1. É obrigatória a definição de float para o conteúdo de nossas abas, como você pode verificar na linha 32, pois depois teremos que definir uma margem negativa para a aba que ficará escondida, caso contrário o espaço que ela ocuparia no fluxo normal da página ficaria visível.

Agora vamos à linha 51, onde aplicamos o pseudo seletor :target, que fará com que o usuário clique em uma das abas, seja definido um z-index maior, e a aba que antes estava invisível ao usuário agora se torna visível. Finalmente vamos ver agora um exemplo de tabs com CSS funcionando.

Infelizmente o seletor :target não é suportado por todos os browsers, mas se vocês repararem no código fonte do exemplo, verão que foi utilizado um arquivo JavaScript chamado: csstarget.js, um script desenvolvido por Peter Ryan que faz com que o seletor :target funcione em todos os browsers que não suportam esse seletor corretamente.

O que também deve ser feito é que você deve definir uma classe no CSS, chamada .target para aqueles browsers que não suportam o :target, pois ela será utilizada pelo JavaScript para executar os efeitos, como você pode ver no código abaixo:

#container .target {

z
-index: 1 !important;/*Para Browsers que não suportam :target*/
}

Vejam o exemplo. Caso tenha interesse, você pode baixar os arquivos utilizados.


Autor

Pedro Rogério de Assis Lemes é desenvolvedor Front-end desde 2005, viciado em XHTML e CSS. Atualmente trabalha em uma agência web, a Ambulance (www.ambulance.com.br) como desenvolvedor front-end. É criador do blog Pinceladas da Web e do CSS no Lanche, voltado para o mundo do desenvolvimento Front-End.

Nenhum comentário:

Postar um comentário

Mais vizualizadas

Quentinhas

PUBLICITÁRIOS versus PUBLICIDADE E PROPAGANDA

Grupos do Google
Participe do grupo PublicitáriosVersusPublicidade&Propaganda
E-mail:
Visitar este grupo