Bruno Dulcetti



Arquivos:

Categorias:

  • Amizade:

  • Artigos

  • Links:

    O meu, o seu, o nosso espaço!

    » Menu em Abas sem utilizar imagens

    Falae galera. Estou aqui de novo, mas agora pra mostrar um outro Tutorial/Artigo, de como fazer um menu com abas. Eu já tinha postado um tutorial, mas era utilizando imagens e ficava um pouco limitado, pois se aumentasse a fonte, a imagem naum iria ficar legal.

    Agora estou mostrando um novo modo de se fazer, sem utilizar imagem alguma, somente com código css. Fica com um resultado bem leve e agradável. A única coisa é que fica quadrado, o que eu não vejo problema nenhum, mas para quem é fã de arredondados, esse tutorial não se encaixa.

    Ok, vamos começar:

    Primeiro Passo

    Primeiramente eu escolhi um DOCTYPE. Escolha o que vocês quiserem, mas eu utilizei o XHTML 1.1, mas fiquem livres pelo que gostarem mais.

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">

    Segundo Passo

    Eu mostrarei separadamente a criação do html e do css, pois fica mais fácil de explicar cada parte. Primeiramente, mostrarei o html, coisa que eu não preciso explicar muito, pois todos aqui já o conhecem (assim espero :D). Eu soh explicarei o que estiver entre as tags <body> e </body>. Não explicarei também, as tags de fechamento, pois é desnecessário.

    Veremos primeiro a página, sem estilos nenhum.

    Vamos entender cada parte do codigo:
    <div id="geral">
    Nessa linha, teremos o div pai, que englobará todo o layout, pois fiz com um tamanho de largura fixa para seu conteúdo. Desta maneira, fica mais fácil para fazermos modificações, principalmente em posicionamento do layout.

    <div id="menu">
    Div que conterá o menu, que faremos com uma lista não ordenada, <ul>.

    <li class="primeira"><a href="#" class="selecionado">Principal</a></li>
    <li><a href="#">Empresa</a></li>
    <li><a href="#">Serviços</a></li>
    <li><a href="#">Portfólio</a></li>
    <li><a href="#">Contato</a></li>

    Nessa parte, está englobada toda a codificação do menu feito em lista e seus respectivos links. Na primeira linha, temos uma classe para o link, a selecionado, que serve para indicar em qual página estamos. Perceba também a classe primeira, dentro do primeiro <li>, que no css eu explicarei para que serve.

    <div id="conteudo">
    <h1>Título H1</h1>
    <p>Lorem ipsum dolor sit amet, consectetuer ...</p>
    <h2>Título H2</h2>
    <p>Etiam laoreet pulvinar sem. Sed massa enim ...</p>
    <h3>Título H3</h3>
    <p>Quisque convallis fringilla tortor. Duis tortor diam ...</p>
    </div>
    <div id="rodape">Copyright &copy; 2006 - <a href="http://www.brunodulcetti.com/blog/">BrunoDulcetti.com</a></div>

    Aqui, podemos ver que é o conteúdo do site, que contém três títulos, h1, h2 e h3, com seu conteúdo dentro de um parágrafo para cada título. Nenhum mistério.

    Acho que agora não preciso explicar mais nada do código, pois é bem básico e de fácil compreensão. O que eu não expliquei, foi como disse acima, são tags de fechamento, metas, etc…

    Beleza Brunaum, agora vamos estilizar isso, pq tá feio pra caramba né?

    Logicamente. Esse primeiro passo, foi somente para mostrar o código HTML e só irmos jogando o css aos poucos, para vermos o resultado final.

    O css completo, você pode verificar aqui. Bem pequeno não é verdade?

    Agora vamos vendo cada propriedade:

    Estrutura geral do body:

    * { margin: 0; padding: 0; }
    body {
    text-align: center;
    font: 70% "Trebuchet MS", Verdana, Arial, Tahoma;
    background-color: #F1F1F1;
    color: #666666;
    }

    Neste primeiro bloco, temos a primeira linha, que zera todos os margins e paddings de TODAS as tags dentro da página que contenha esse css incluído. O asterisco antes de uma propriedade, siginifica todas as tags.

    Na segunda chamada, temos a tag body sendo setada. Nela nós temos 4 propriedades declaradas:

    • text-align: center; : Esta linha declara que o texto ficará centralizado dentro do body.
    • font: 70% “Trebuchet MS”, Verdana, Arial, Tahoma; : Definimos a fonte utilizada e seu tamanho, que nesse caso foi a Trebuchet com um tamanho 70% do tamanho padrão do navegador.
    • background-color: #F1F1F1; : Definição da cor de fundo do body, que nesse caso, coloquei um cinza bem claro.
    • color: #666666; : Agora a definição da cor do texto foi definida. Coloquei um cinza escuro como cor padrão do site.

    Percebemos que não tivemos problemas nenhum (assim espero), na declaração desse bloc. É bem básico e fácil de implementar e entender.

    Estrutura das tags:

    ul { list-style: none; }
    p { margin-bottom: 10px; }
    h1 { margin-bottom: 5px; color: #69A90A; font-size: 170%; }
    h2 { margin-bottom: 2px; color: #81C281; }
    h3 { color: #709AFE; }

    Aqui temos a estruturação e propriedades de todas as tags usadas no HTML e que eu quis modificar. Nos meus arquivos css eu estruturo desta forma, pois fica de uma maneira mais organizada, correta, etc.

    Veremos abaixo, cada linha desse bloco, com suas respectivas propriedades explicadas:

    • ul { list-style: none; } : Nesta linha, declaramos que TODAS as listas não ordenadas, vulgo <ul> :D, não possuirão estilo, que seriam aquelas bolinhas, círculos e quadrados.
    • p { margin-bottom: 10px; } : Aqui, declaramos que TODOS os parágrafos terão 10 pixels de margem na base.
    • h1 { margin-bottom: 5px; color: #69A90A; font-size: 170%; } : Aqui temos a declaração do título H1, que é o título de mais importância do HTML. Nele, declaramos uma margem de 5 pixels na base, uma cor verde para o texto do título e um tamanho de fonte 170% maior do que a declarada no body, que foi de 70%.
    • h2 { margin-bottom: 2px; color: #81C281; font-size: 150%; } : Aqui, declaramos as propriedades pro título H2, que é o título de segunda maior importância. Definimos que ele terá uma margem de 2 pixels na base e uma cor verde, um pouco mais clara que a do H1, para o texto do título e o tamanho do texto.
    • h3 { color: #709AFE; font-size: 130%; } : Declaração das propriedades da tag H3, que também é um título. Esta é a mais simples, configurei somente a cor do texto, para um cor azul e o tamanho do texto.

    Neste segundo bloco, configuramos as tags, não importando sua hierarquia. Sempre que declaramos no css uma propriedade para um seletor, que esteja somente o nome da tag, que dizer que TODAS as tags, independentes se estão dentro de um identificador, classe, etc, TODAS elas, receberão aquela configuração, a não ser que mais abaixo você declare uma propriedade diferente, que fará com que o css descarte a anterior e mantenha a mais recente.

    Identificador #geral:

    #geral {
    margin: 10px auto;
    width: 750px;
    text-align: left;
    }

    Neste bloco, temos o Identificador #geral, que é o div que engloba todo o layout em si. Dentro dele, coloquei 3 propriedades:

    • margin: 10px auto; : Definindo uma margem de 10 pixels em todas as direções do div (topo, direita, base e esquerda). E também, temos o auto, que faz com que o div fique no posicionamento relativo ao browser, que nesse caso o body que setou essa propriedade com o text-align igual a center, que quer dizer que o texto ficará centralizado. No i.e. não necessita disso, pois ele reconhece que com apenas o text-align o div fique centralizado, o que é errado, pois o div não é um texto e sim um bloco, por isso a utilização do auto.
    • width: 750px; : Definindo uma largura para o div, de 750 pixels
    • text-align: left; : Como o body foi setado um text-align centralizado, todos seus filhos heram essa propriedade, que é caso do #geral, mas como estamos setando aqui um text-align igual a left, é descartado o do body e levado em conta o que têm nessa propriedade desse identificador.

    Neste terceiro bloco, nenhum problema, dificuldade não é? Três propriedades, de fácil entendimento. O único problema um pouco mais chato de ser entendido é o margin auto, pro pessoal que tem um conhecimento básico, pode ter dificuldade, mas tentei explicar ali, qualquer dúvida, é só falar.

    Estrutura do Menu:

    #menu ul { display: table; height: 1%; }
    #menu ul li { float: left; margin: 0 4px; }
    #menu ul li.primeira { margin-left: 0; }
    #menu ul li a {
    display: block;
    float: left;
    padding: 5px 12px;
    background-color: #CCCCCC;
    color: #FFFFFF;
    font-weight: bold;
    }
    #menu ul li a.selecionado, #menu ul li a:hover { background-color: #FFFFFF; color: #999999; text-decoration: none; }

    A parte mais essencial do código e mais “chatinha” de se entender. Falo isso pro pessoal que tá começando, pois creio que quem possui um conhecimento intermediário/avançado, não terá problema algum nesse bloco. Vou dividir em três blocos, um para a parte de lista e li do menu, a segunda, para os links do menu e a terceira para o estado hover do menu. Vamos lá:

    Primeira Parte

    • #menu ul { display: table; height: 1%; } : Esta propriedade, faz com que a <ul> fique com o preenchimento como uma tabela. Precisamos disso, porque os lis vão receber um float, que faz com que seu pai, que neste caso é a <ul>, não reconheça sua altura, conteúdo. Você pode substituir isso por uma propriedade height, colocando a altura do <ul>, mas eu creio que fique melhor com o display, pois você não precisa se preocupar com altura, caso tenha que modificar futuramente, ou o usuário aumente o tamanho da fonte pelo navegador, isso seria um problema, pois nos browsers decentes, o height seria mantido, independente do seu conteúdo e da forma como está, ele cresce de acordo com o tamanho. Mas como nada é perfeito, nosso amigo i.e. está ae para atraplhar. Ele não renderiza corretamente o display table, por isso, tive que colocar uma “gambiarra para o perfeito funcionamento do mesmo, colocando um height: 1%. Mais um bug do i.e., porque se você não setar nenhum valor de altura, ele não reconhecerá o display table.
    • #menu ul li { float: left; margin: 0 4px; } : Como padrão, o <li> recebe um display block, que faz com que fique um embaixo do outro. Por isso, a utilização do float left, que faz com que o <li> fique grudado à esquerda. Foi setado também, uma margem para as laterais de 4 pixels, para que elas não fiquem uma grudada na outra.
    • #menu ul li.primeira { margin-left: 0; } : Agora explicarei essa classe, que falei mais acima. Com a utilização da propriedade acima, da margem nas laterais, a primeira <li> fica mais a direita do canto do conteúdo, o que não acho muito legal. Neste classe, zerei a margem esquerda, para que a <li> que receber esta classe, fique sem margem, que no nosso caso, é a primeira.

    Simples essa parte. Nada demais, só destacaria mais mesmo é a parte do display table e a classe sem margem para a primeira <li>. Partiremos pra próxima.

    Segunda Parte

    Lembrando que aqui eu estarei listando as propriedade dentro do seletor #menu ul li a { }.

    • display: block; : Como eu não quero que o menu fique somente no texto, tenho que colocar um display block, que transforma o link, num bloco.
    • float: left; : Com a utilização do block como display, o link ficaria um em cima do outro, que não é nosso objetivo. Nós queremos um ao lado do outro e esse trabalho é feito pelo float.
    • padding: 5px 12px; : Um padding, para o conteúdo dentro do link não ficar colado nos extremos. Aqui, setei 5 pixels para a base e o topo e 12 pixels para as laterais.
    • background-color: #CCCCCC; : Uma cor cinza claro de fundo para o link.
    • color: #FFFFFF; : Definindo uma cor branca para o texto do link.
    • font-weight: bold; : Deixando o texto em negrito.

    Nenhum mistério. Só deixamos o link como block e com float, para ele ir pra esquerda. Mas ae você me pergunta: “Mas por que isso Bruno? Não poderia fazer isso no <li>?”. Sim, claro, poderia fazer sim. O único problema seria na hora do link, porque ele sem block, fica como inline, ficaria, um do lado do outro, tranquilim, mas signica que SOMENTE o texto, o conteúdo dentro do link, ficaria como link realmente. E como a pseudo-classe hover só funciona em links, isso no i.e., lógico, não conseguiriamos o efeito correto. Veja um exemplo disso. Dá pra ver o resultado não é? Pelo menos não era o que eu queria nesse tutorial.

    Agora vamos para a terceira e última parte.

    Terceira Parte

    Lembrando que aqui eu estarei listando as propriedade dentro do seletor #menu ul li a.selecionado, #menu ul li a:hover { }.

    • background-color: #FFFFFF; : Definindo uma cor de fundo branca.
    • color: #999999; : Definindo um cinza médio para a cor do texto do link.
    • text-decoration: none; : Retirando a decoração do link, que como padrão fica sublinhado.

    A única coisa de diferente nesse exemplo, é a utilização de dois seletores dentro de um bloco de propriedades. Conseguimos isso, separando os seletores por vírgula. E mais por esses seletores, é que precisamos utilizar no link, o display block, float, etc, pois ao passar o mouse, temos mudanças no link, pois fica uma coisa mais organizada, usável, pois percebem que é um link, etc.

    Identificador #conteudo:

    #conteudo { background-color: #FFFFFF; color: #666666; padding: 10px; }

    Nesse bloco, temos a configuração da área de conteúdo do site. Coisas bem básicas:

    • background-color: #FFFFFF; : Definindo cor branca para área, pois o body está com um cinza claro.
    • color: #666666; : Deixando a cor do texto como cinxa escuro.
    • padding: 10px; : Definido um padding de 10 pixels em todas as direções, para que o conteúdo não fique grudado nos extremos do div.

    Nenhum mistério também, apenas estilizando o conteúdo, para ficar no estilo e organizado.

    E finalmente, vamos para a última parte, a do rodapé.

    Estrutura do Rodapé:

    #rodape { text-align: center; padding: 10px; }
    #rodape a { color: #54A4FC; }
    #rodape a:hover { text-decoration: none; }

    Poucas coisas setadas, código bem curto, pois no rodapé não coloquei nada, além de um pequeno texto. Veremos abaixo:

    • #rodape { text-align: center; padding: 10px; } : Como o geral recebeu um text-align left, entaum o texto ficaria na esquerda, que não é o que eu queria, então centralizei. Determinei também, um padding de 10 pixels, para não deixar o conteúdo grudado nos extremos.
    • #rodape a { color: #54A4FC; } : Definindo um azul para a cor dos link que estiverem dentro do rodapé.
    • #rodape a:hover { text-decoration: none; } : Retirando o sublinhado do link, quando passar o mouse em cima. Isso, logicamente, para os links do rodapé.

    Finalizando…

    É um menu bem simples de se fazer, implementar e modificar também. Como disse anteriomente, ele fica quadrado, mas mesmo assim, acho bonito, clean, interessante, sem problema algum.

    Bom, galera, é isso, o resultado final pode ser conferido aqui. Qualquer dúvida, correção, melhora, crítica, elogio, é só comentar ae…

    Aquele abraço.

    [ 27/maio/2006 às 20:42hrs ] [ Por Bruno Dulcetti ] Comentários 22 Comentários |

    Categorias: Artigos,CSS,Webstandards

    22 Comentários no Post "Menu em Abas sem utilizar imagens"

    Postar no Rec 6

    1. Bem legal o efeito, parabéns!!!

    2. Muito legal bruno. A cada dia que passa aprendo mais um pouco fazendo os seus artigos.
      Abraço

    3. E ai Bruno, show de bola!!!
      Parabéns!!!

    4. Cara, muito bacana! Depois vou dar uma olhada mais a fundo no código, mas bem interessante!

      Só uma dica, será que não ia ficar mais com cara de aba, se colocar uma borda embaixo das abas desativadas? Para dar um efeito de profundidade?

      Abraçao

    5. comentário de teste

    6. Excelente o artigo. Utilizei ele para montar o site de um produto la da empresa. Não sou designer, sou desenvolvedor Delphi / C#. Mas curto demais WebStandards e resolvi me atrever a fazer o site. Tentei fazer o design 100% no CSS e compativel com Firefox e I.E. Parece que consegui. O menu do Bruno ta la!!! hehe… olha o site: http://www.lidertalk.com.br

      abração Bruno. Valeu pela dica. E não venha me cobrar direitos autorais! ! haha

    7. TheChessMan | 11/jun/2006 às 14:33

      Fala Brunão! Traquilo? legaw o artigo… só axei uma coisa estranha aqui, no FF 1.5 qdo eu aumento a fonte, os items das abas vão um para baixo do outro, mas um detalhe mto louco: Qdo eu volto ao tamanho de fonte padrão, eles continuam um embaixo no outro!!

      Sei lá o q é isso.. mas fica o “alerta”, hehe

      Flw e parabéns!

    8. […] A outra notícia, é que eu descobri essa semana que passou, que meu artigo postado aqui no Blog, o Menu em Abas sem utilizar imagens, foi adicionado no iMasters. Eu tinha comentado sobre o tutorial com o Baeta, diretor do iMasters, mas passou um tempo e acabei esquecendo. Aí fui ver essa semana que ele estava lá . Veja o artigo agora. Já é meu quinto no iMasters e verei se escrevo mais em breve. E também verei o quanto antes, para escrever aqui também… […]

    9. Leonardo Procópio | 24/jul/2006 às 15:19

      Gostei muito do artigo, bem simples de se entender!!

    10. Fabio Botelho | 06/ago/2006 às 17:05

      Bruno, gsotei muito do seu menu sem imagens… to aprendendo um pouco sobre css mas ainda não consigo entender muito o ‘display’ e o ‘float’, se puder ajudar…

      []’s

    11. Dirceu Macedo | 05/set/2006 às 1:01

      E como se faz a navegação entre as abas?

    12. […] Não reparem mas utilizei um código parecido com o artigo Menu em Abas sem utilizar imagens. Utilizarei o mesmo código, tanto do CSS quanto do HTML. […]

    13. Fala Bruno, tudo bem? Êta artigo legal! Vez ou outra dou uma lida nele pra estudar e fixar. Como poderia fazer para a aba clicada ficar marcada?

      Obrigado,

      Farley Rangel
      http://farley.com.br

    14. Sinceramente não entendi nada… Acho que seria mais fácil se o código fosse inteiro e a gente mudasse tudo ^^* Mas mesmo assim, parabéns pela iniciativa, espero que tenha ajudado bastante gente!! :*

    15. Achei bem legal o post,mas não teria como vc colocar o código inteiro e para depois editar,não seria msia fácil?
      é que na verdade eu estou querendo fazer isto no meu blog,mas não quase nada de códigos html…..

      ou então vc poderia me mandar o código inteiro por e-mail,para eu ir modificando?

      por favor,meu e-mail é rafa_lost@terra.com.br

    16. Caro Dirceu Macedo,

      li este artigo há 30 minutos atrás (10:12) e a sua dúvida do dia 05/Set/2006 às 1:01:
      “E como se faz a navegação entre as abas?’
      EU CONSEGUI NAVEGAR NA BOA. Espia:
      dentro do id=”conteudo” criei um iframe com id=”conteudo1″ e name=”conteudo1″
      src=”nomedapaginaqueeuqueroabrir.htm” (APANHEI 15 MINUTOS, A EXTENSÃO DO MEU EDITOR NÃO ACEITA .html e sim .htm ATENÇÃO!) e pronto….

      Abraços
      MUITO OBRIGADO Bruno

    17. Estranho, aqui num funcionou .. nem o FF nem no IECA.

    18. OLá Amigo! Estou enfrentando um probleminha sério em meu blog! Tem muita coisa e está sem espaço para que eu publique minhas matérias e algumas propagandas! Como faço para colocar um menu na qual aparecesse uma tela diferente!??? grato tô precisando demais amigo! Sou iniciante mas… tá dando um trabalhão aqui parceiro!

    19. funcionou não..
      FF 2.0

    20. Aqui não funcionou… testei tanto no IE.. quanto no firefox… e não funcionou =(..

      MAs mesmo assim vlw pelas dicas.. várias coisas eu aprendi pelo seu site…

      Dica: poderia colocar o codigo pronto no .txt… ficaria mais fácil para achar os erros…

    21. oii,tudo bem?!

      Eu nao consegui fazer as abas, sei que esta certo os códigos, mas nao fica o site com abas. Ele esta com as bolinhas ( ). Será que falta algo para eu baixar ?? Me ajudaaa purfaaa!

      Obrigada pela ajuda!

      bjos

    22. Eu fiz passo a passo, mas não aparecem as guias, apenas bolinhas!
      Estou com o mesmo Problema da Vanessa aí de cima!!!
      help please.

    Tá esperando o quê? Comenta logo.

    
    Copyright © 2005 Bruno Dulcetti | Creative Commons
    Bruno Dulcetti atuante na área de desenvolvimento web / webdesign e colaborador na área de webstandards pelo Blog BrunoDulcetti.com - blog. Atuante na área desde 2000. Atuando na cidade de Niterói/RJ - Brasil. E-mail: bruno@brunodulcetti.com