Tableless - Desenvolvimento inteligente com Padrões Web

11/07/2006
Artigos

CSS Modular – Breve explicação

Há um artigo com mais detalhes aqui. Se você faz sites grandes usando CSS, já deve ter notado que chega uma etapa do trabalho que se não prestar a atenção devida, podemos nos perder em mundo de propriedades, classes e …

Por


Há um artigo com mais detalhes aqui.

Se você faz sites grandes usando CSS, já deve ter notado que chega uma etapa do trabalho que se não prestar a atenção devida, podemos nos perder em mundo de propriedades, classes e ids. O CSS ajuda muito no desenvolvimento, isso é fato e ninguém duvida. Acontece que se você não tiver o mínimo de organização, pode ficar tão bagunçado quanto desenvolver sites usando tabelas.

Há uma maneira de organizar melhor seu CSS e deixá-lo organizado para que a manutenção seja rápida e transparente. Isso é possível quando modulamos o CSS.

Separando as seções

Os sites costumam ser dividos em vários pedaços. Um site simples, por exemplo, pode ser divido em 5 pedaços principais: Topo, Coluna da esquerda (onde normalmente vai um menu lateral), Coluna do meio (onde geralmente vai o conteúdo do site), Coluna da direita (publicidade, busca, etc) e Rodapé.

Exemplo de estrutura

Você pode dividir seu CSS de acordo com este padrão. Ou seja, criar um arquivo CSS para cada pedaço do site, e depois importá-los em apenas um arquivo CSS principal, que será linkado na home.

No caso deste nosso sites simples, com 5 pedaços, você teria um arquivo CSS para o topo, onde você formataria tudo que pode estar no cabeçalho do site: Logo, menu, busca, data, etc… Outro CSS que formataria a coluna da esquerda, outro arquivo para coluna do meio, e assim por diante.

Você teria 5 arquivos CSS que conteriam a formatação de cada pedaço do site unicamente. Isso evitaria ter apenas um arquivo de CSS com centenas de linhas. Onde é um tanto custoso fazer alguma alteração. Separando seu CSS em pequenos módulos, você consegue ser mais rápido na hora de executar manutenções, porque você sabe onde exatamente encontrar a formatação de cada área do site. Se o problema é na lateral esquerda, você vai direto no arquivo responsável pela formatação da coluna da esquerda. Poupa trabalho de ficar procurando onde fazer a alteração.

Importando

Para importar todos os arquivos CSS em apenas um, usaremos o comando @import:

1
2
3
4
5
@import url(topo.css); /** CSS do cabecalho **/
@import url(colunaesquerda.css); /** Coluna da esquerda **/
@import url(conteudo.css); /** Conteúdo do site **/
@import url(colunadireita.css); /** Coluna da direita **/
@import url(rodape.css); /** Rodapé **/

Os nomes que eu usei para os arquivos são apenas para explicação. Não é bom usar nomes tão específicos por falta de semântica. Isso é papo para outro post.
Você pode ainda ir mais além, e criar arquivos individuais para seções específicas do site, como por exemplo telas que usem formulários: Telas de cadastro, contatos, logins, etc.

Use o bom senso. Não exagere. Não adianta você criar dezenas de arquivos CSS, em vez de facilitar a vida, você vai piorar. Já vi muito desenvolvedor criar um arquivo CSS para formatar apenas duas ou três propriedades de um objeto. Isso é contraproducente. Não vale a pena criar um arquivo para tão pouco código.

Planejando

Um bom planejamento antes de começar a estrutura seu CSS é muito bem vindo. Analise o layout e defina as seções principais. Mapeie as páginas que terão formulários, elas costumam ser mais complicadas que o geral, é bom que elas tenham um arquivo CSS individual.

Crie uma pasta CSS onde você irá colocar toda a formatação do site. Nesta pasta se encontrarão apenas os arquivos CSS e a pasta de imagens que estes arquivos irão utilizar.

Não crie nomes complicados para os arquivos CSS. Tente manter a simplicidade e objetividade nos nomes para que não haja problemas posteriores de conflito. Já vi muita gente colocar nomes como: cabecalho_interna_sistema_logado.css
É muito fácil cometer erros com uma nomeclatura desta maneira. Seja sucinto na hora da escolha dos nomes.
Fazendo todo este planejamento, é simples de controlar toda a estrutura de formatação do site.
A maneira que eu apresentei aqui é muito básica. Você com certeza fará sites bem maiores e complexos do que nosso exemplo. Mas a idéia continua a mesma. Adapte esta técnica de acordo com as necessidades do projeto. Invente maneiras novas… lembre-se que padrões web vieram para libertar.

Por Diego Eis

Diego Eis criou o Tableless para disseminar os padrões web no Brasil. Como consultor já treinou equipes de empresas como Nokia, Globo.com, Yahoo! e iG. É palestrante e empreendedor.

http://twitter.com/diegoeis/

Veja os outros posts de

  • Martins

    Muito bom! Era isso que eu precisava. Algo semelhante a idéia de frames em que não é necessário ficar reproduzindo as divisões da página.

    Valeu!

    :)

  • Renan

    mais um artigo que vai ajuda muita gente…
    parabéns Diego! :)

  • http://omarin.wordpress.com O’Marin

    Boa dica.

    Só não entendi qual o problema com os nomes :(

  • http://www.valongueiro.blogspot.com André Valongueiro

    Excelente Diego!

    Se tivesse sido postado 3 dias atrás teria sido melhor ainda, pois agora mesmo estou fazendo uma atualização numa page e já estou perdido no meio de uma porrada de linhas de código.

    Começa a fica cansativo depois de um tempo.

    Mas agora já tenho a estratégia! Valeu!

    Abraço!

  • http://www.pinceladasdaweb.com.br/ Pedro Rogério

    Boa dica,

    No meu blog é usado esse esquema, uso um css para o IE, outro para cores e outro para estrutura do site.

  • Tarcísio Sassara

    Valeu a dica!

    Estou passando dificuldades com um maldito .CSS enorme, acho que essa será a solução para organizar as coisas. #-O

    Comentando a resposta do Marin: A não ser que você copie e cole o nome do arquivo, acredito que seja dificil acertar o nome de um arquivo composto por mais de uma ou duas palavras separado por underline. Acredito q seja esse o problema com nomes grandes. Mas nada impede não é verdade. :-D

    Muito obrigado!

  • http://dgmike.blogspot.com Michael

    Ah… fala mais sobre esse negócio dos nomes.

  • http://www.arvoresdeirati.com Alex Saueressig

    Interessante este post Diego. Importante para que os desenvolvedores não comecem a fazer a bagunça do “tempo das tabelas”.

    O problema no nome dos arquivos, O’Marin e Michael, é que da forma citada eles fazem referência à posição da área selecionada de forma absoluta em relação ao layout. Mas bem se sabe que, com CSS, uma coluna ou área pode ser deslocada facilmente. O que está na esquerda hoje pode muito bem estar na direita amanhã.
    T+

  • http://chackalsjc.wordpress.com felipe tonello

    Boa dica Diego!

    Eu nunca pensei nisso, mas eu usava um CSS normal e outro para o IE. Agora vou começar a separar melhor meu css pois eu encontrava esse problema mesmo, de ter um arquivo com centenas de linha e apesar de estar comentado era muito ruim mesmo.

    Abraços

  • http://www.echoes4ever.com/blog Jonathas Scott

    Aproveitando o post, que é muito importante ressaltar essa questão de planejamento do projeto web, gostaria de levantar a questao que os nomes compridos, complicam um pouco quando se tem por exemplo 10 arquivos css e todos respectivos a secoes de seu site (experiência própria)

    Chegou um momento onde eu nao entendia mais nada.. e estava completamente perdido nos arquivos.

    Recentemente vih um lance de que utilizar underlines na nomenclaturas de ids e classes dentro do css ocasionam em problemas de validacao. Is it true !?

  • http://www.brunoalves.eti.br Bruno Alves

    Igualzinhos “nois faz” na programação :)

    A modularização do código foi uma grande revolução na área da programação, nunca entendi porque isso não era usado com mais frequencia por quem desenvolve para web.

    Tomara que seu artigo encorage mais pessoas a fazer isto.

    Abraço

  • http://www.inovastudio.com Rael

    só uma dúvida, esse “@import” vai no css ou no (x)html ?

    Eu geralmente costumo criar um css para o layout, e para as paginas que precisam de uma estilização mais própria, eu crio um css separado (como no caso de formulários de contato).

    Mas esse @import é algo que pode ser muito útil sim ! :)

    Valeu!

  • http://www.nghorta.com/ Newton de Góes Horta

    Vejam estes artigos:

    Modula r CSS
    A CSS Framework

  • http://www.numclique.net Joares Miranda

    Muito bom post… finalmente um artigo de dicas…. hehehe… mas… muito bom!

  • http://www.marionery.com/blog Mario Nery

    Gostei muito do texto. Simples direto e realmente eficiente. Vai me ajudar e com certeza vai ajudar muita gente por aí!

    Abraços

  • http://medeiros.tiamat.com.br/blog Rodrigo Medeiros

    Bacana o artigo, mas qual seria a sugestão para não incurtirmos no erro de redefinir uma propriedade. Por exemplo, se formato a tag P no cabeçalho e no rodapé por engano, formato com outros padrões, achar onde foi aconteceu o erro é brabo.
    Seria uma solução usarmos hierarquia de objetos? Tipo, só redefinir a tag P dentro da div#rodape?
    Taí uma sugestão para um outro post: como simplificar tudo o que podemos complicar. :)

    Grande abraço.

  • http://www.gpix.com.br Leopoldo Rezende

    MAIS UMA DICA:

    Muito interessante a lógica de desfragmentação do CSS em arquivos correspondentes aos frames do site.
    Em muitos casos é uma ótima solução, e já usufruí muito dela… Porém, muitas vezes a maior concentração de código pode se encontrar em um único frame, o do conteúdo por exemplo.

    Imagine um site separado em 4 arquivos css:
    Geral, Topo, Menu e Conteudo, sendo que, os arquivos: Geral, Topo e Menu contenham poucas linhas, e o arquivo Conteúdo seja Monstruoso!

    Uma das soluções simples que eu encontrei foi a divisão do css em “etapas” do site…
    como por exemplo:
    geral.css -> onde vem Menu Topo Rodape…
    index.css -> apenas conteúdo da index…
    interna.css -> apenas conteúdo das paginas internas..

    ______________________
    E sobre o comentário do Mederinho aqui em baixo… é sempre uma boa hierarquizar com Div’s, mas já vi mt css onde as hieraquizações são desnecessárias, como por exemplo: especificar que tais atributos se trata da tag P dentro da Table X dentro da Div Y etc etc etc… aí é só ter bom senso!

    abraço a todos!

  • Antonio Augusto André Silveira

    Muito bom o artigo, gostei muito.

    Parabéns Diego.

    Seria uma boa você falar mais em um novo post sobre aquilo que comentou:

    “Os nomes que eu usei para os arquivos são apenas para explicação. Não é bom usar nomes tão específicos por falta de semântica. Isso é papo para outro post.”

    De certa forma, entendo o que talvez queira dizer. Mas para ficar melhor, só você explicando seu ponto de vista. =D

    Meu caso é pouco parecido com o do amigo felipe tonello.

    Vou começar a editar alguns “brinquedos” meus de casa. =D

    Até mais,
    abraços!

  • http://heliocorreia.org Hélio Correia

    Particularmente eu prefiro o xhtml com apenas um css. A modularização se dá pelo lado do servidor, de acordo com a requisição, por exemplo:

    Configuro o apache para encaminhar a requisição para um arquivo (css.php). De acordo com o arquivo solicitado, ele faz os includes necessários. No final, o “arquivão” pode se aproveitar da comprssão gzip.

    Resultado:

    a. apenas 1 requisição
    b. compressão no arquivo
    c. headers de expiração

    Na verdade tudo isto é “achismo”. Ainda preciso testar se isto é o que realmente acontece.

    Viajando um pouco mais neste assunto, temos:
    CSS Server-Side
    http://www.shauninman.com/plete/2005/08/css-constants

    CSS Server-Side Variables
    http://www.shauninman.com/plete/2005/08/css-variables

  • http://heliocorreia.org Hélio Correia

    Esqueci de dizer que usando o php (asp, jsp etc) para gerar o CSS, é possível ainda gerar um css para cada tipo de browser.

    No lado servidor tudo organizado, separado por diretórios. No lado cliente (navegador), tudo em um único arquivo.

  • Valério Farias

    Parabéns pelo post Diego,

    Outra questão é a diferença entre a Home do site e as páginas internas ( geralmente mudam alguns posicionamentos do conteúdo ).

    pode-se fazer por exemplo os css para home e para páginas internas:

    Home………………………
    topo.css
    menuprincipal.css
    conteudo.css
    rodape.css

    Páginas internas…………………..
    topointerno.css
    menuprininterno.css
    conteudointerno.css
    rodapeinterno.css

    Daí vem a seguinte pergunta:

    e os intens que não mudam com relação a home?

    por exemplo o rodapé geralmente permanece o mesmo em todo o site então por qual motivo criar um arquivo rodapeinterno.css com as mesmo código do rodape.css

    Uma sugestão que vejo é a possibilidade de adicionar nomes descritivos no nome do css. Ex:

    já que o rodapé não modifica pode-se usar o seguinte nome:

    rodapecomum.css ( pois ele é comum a todas as páginas)

    esse arquivo rodapecomum.css seria importado tanto na página principal como nas internas.

    e as demais páginas que houvessem modificações seguiriam o padrão anterior de topo.css (home) topointerno.css (páginas internas)

    Terminando isso, o que falta ser feito são as formatações de páginas mais específicas como as de fomulário.

    Bom, mostrei algumas sugestões e gostaria de saber a opinião de vocês, validando ou mostrando os pontos falhos. Faz tempo que estou tentando criar um padrão de organização dos arquivos para tornar a manutenção mais intuitiva e esse post do Diego serviu muito para eu tirar idéias e tentar otimizá-las.

    Abraço a todos.

  • http://www.uhull.com.br israel junior

    gostei, eu tava procurando algo assim…

    muito bom

  • http://www.animespirits.net Tulio

    Artigo bom..
    E separar em varios css fica bom, uma coisa interresante também de ser fazer seria separar a formatação basica da formatação de imagens, cores e fontes.
    Tipo ter um css para a estrutura onde ficaria so o basico como os padding, width,height etc e um outro aonde ficaria as fontes e cores assim caso fosse alterar a cor do site não precisa mexer em um arquivo muito grande e pode fazer ate skins ou cores diferentes sem mexer na base.

    flws.

  • http://blog.f-ranieri.com.br Felipe Ranieri

    Ótima dica Diego.
    Um bom planejamento com certeza pode definir o rumo do projeto, por mais simples que este possa parecer.

    Abraços!

  • http://www.newtonwagner.net/blog Newton Wagner

    Interessante mesmo. Eu já fazia isso, mas separava apenas a parte de conteúdo da parte estrutural do site.

    Quanto mais separado melhor! :D

  • http://www.brainstorm.etc.br/ Nitai Fernandes

    Olá pessoal,

    Só quero fazer um adendo. Sei que é bem legal o uso de @import mas não é o mais apropriado, é melhor que vocês façam mais de um e modularizem do mesmo jeito, pois assim terão a garanti de funcionamento em um maior número de browsers.

    Abraços

  • Pingback: Bruno Alves » Arquivo » Folha de estilo em PHP PHP Style Sheet

  • Bruno Silva

    Olá!!

    Estive lendo a matéria
    [ Sobre nome e sobrenomes ] e
    pude perceber que o mesmo ensina
    a “semâtica” de arquivos e variaveis.

    Só que ao ler essa matéria de – CSS Modular – link dentro da matéria
    [ Sobre nome e sobrenomes ]
    pude perceber que usa a seguinte estrutura de arquivos;

    @import url(colunaesquerda.css);
    @import url(colunadireita.css);

    Não seria interessante ter um controle das
    matérias para que o assunto, não se dispersse entre uma e outra!!!

  • http://www.jonnybonny.v10.com.br wiLL

    ” O FAMOSO SALVA VIDAS ! ”

    vlw pela dika …..

  • http://chapa.blig.com.br Rodrigo Freitas

    Só vi esse artigo hoje, mas já me auxiliou muito no meu trabalho.

    Parabéns e muito obrigado!
    Abraços.
    Rodrigo.

  • Vital Rocha

    Muito bom esse artigo, vai me ajudar muito
    parabéns!!

    abraços

  • http://www.smartfocus.com.br Marcelo Rodrigo Wiebbelling

    Boa dica!

  • Pingback: BrPoint.net || english » Blog Archive » PHP Style Sheet

  • http://www.desiner.com.br Anderson Carlos Crepaldi

    Boa dica, organização e fluxo de trabalho é realmente muito importante nos dias de hoje..

    vlww

    Anderson
    http://www.desiner.com.br

  • Amélia

    Oi!
    Seu nome é Diego certo?
    Gostei muito do teu site, interessante mesmo. São “5mãos na roda”!!rs..
    Olha só, estou fazendo minha monografia este semestre, me formo em Design Gráfico, e gostaria de saber se vc ja publicou algum material aqui sobre “Programação Visual na Web”.Estou com um pouco de dificuldade em achar materiais com imagens sabe, eu gostaria de fazer um comparativo de como eram os sites logo que começaram a ser lançados com os de hoje.:)>-
    Ou quem sabe voce poderia me dar alguma dica sobre isto, hehe
    Estou aguardando ansiosa sua resposta!
    Abraço!

  • Jonathan

    legal esta pensando em uma boa solução pra isso esses dias, apesar de eu sempre ir procurar meus estilos na tag é dificil se habituar ao import().

    Agora estou pensando na melhor forma para orgnizar os arquivos ;)

    uma coisa importante, cuidado com a sintaxe do import() , dependendo como você escreve ele pode ser ignorado por alguns browsers….

    http://imfo.ru/csstest/css_hacks/import.php

  • http://www.clacelestial.com gadarf

    Muito bom mesmo.

  • http://www.samuelcorradi.com.br Samuel Corradi

    Prefiro usar a semântica de usar 1 css para cada tipo de página do meu site. Se por exemplo meu site for todo igual, tanto página inicial como todas internas, uso apenas um arquivo chamado geral.css. Caso a inicial seja diferente das páginas internas (como em http://www.diabetes.med.br) uso um aquivo geral.css para guarda os elementos redundante em todo site (tipos de fontes, cores de links, etc), coloco 1 arquivo inicial.css para detalhes específicos da página inicial e interno.css para as páginas internas.

    Prefiro essa modularidade pois se um dia vc for trocar o layout de seu site, o que era rodapé pode deixar de ser. O que é topo pode virar rodapé. O que é coluna esquedar pode ir para a direita. Então não acho que seja uma boa fazer isso.

    Além do mais, crio na raiz do server a pasta ‘recursos/estilo/padrao’ e lá dentro coloco os arquivos css e as imagens que dizem respeito a aquele estilo. Caso eu troque o estilo do site, crio a pasta ‘recursos/estilo/novoEstilo’ mudo seus arquivos css e imagens.

    Um programa simples em PHP pode consultar o banco de dados e permitir o usuário trocar o layout do site apenas indicando a pasta no @import.

    Existem outras coisas que acho interessante e quando tiver 1 tempinho colocarei no meu site pessoal.

    Abraço galera!

  • Pingback: CSS Modular - Breve explicação « Tutorial

  • http://www.netcampos.com Alan Germano

    muito boa e útil a informação…

    Abraços e Parabéns

  • Rodrigo sousa

    oi mas os navegadores antigos creio q nao suportam o metodo @import..como faria-mos para solucionar esse problema..( ideia .. eliminando o IE6 do mercado rss brincadeira),realmente algums navegadores antigos nao funcionam esse metodo import..obrigado

  • Seiji

    Muito boa esta explicação, estou melhorando o site da empresa que eu trabalho, utilizaram somente tabelas e quase nada de CSS para criar o layout. Estou transformando todo o site em tableless e percebi que estava ficando complexo de fazer manutenção por causa do tamanho do conteudo do meu arquivo .CSS. Agradeço por colocar uma explicação tão clara e objetiva. Me ajudou bastante. Abraços!

  • http://www.josesluz.com.br José Luz

    Ótimo post, estou inicianto na área de tableless e ajudou bastante!
    muito bom!