And After - Design e Tecnologia por Sua Conta!
O desenvolvedor é um blog sobre desenvolvimento web, não tratando apenas de programação mas também compartilhando experiências, métodos, debates e tendências da internet.

O Desenvolvedor é um blog de www.andafter.org
Assinar o Feed RSS

Guilherme Serrano

[@]
[www]

Graduado em design, viciado em web, adoro desenvolvimento, mashups, usabilidade, o universo e tudo mais.

Vivo de e para internet. :)

Status
Karma: 49506
Opiniões: 30

Mais deste autor


CSS Orientado a Objetos

CSS Orientado a Objetos

Muito bomEste texto foi classificado como Muito bom
Em Internet, Programação
Por Guilherme Serrano
11 de Agosto de 2009

CSS Orientado a objetos? Uma reflexão sobre métodos de pensar as folhas de estilos, com uma apresentação em slides da idéia para orientação a objetos e boas práticas na codificação :)

RSS Acompanhe O Desenvolvedor por Feeds!


Mesmo sabendo que o Chris vai falar algumas coisa relacionada ao termo "orientado a objetos", achei o conceito de otimizar e "orientar" o CSS bem interessante.

Na semana passada estava conversando sobre CSS aqui no serviço, debatendo o que era melhor:

Opção 1 - Uma classe por elemento

Ao meu ver, este é o modo mais simples de "pensar" CSS. Você pensa na estrutura html do seu site a para cada elemento cria uma classe, quando o elemento se repete você usa a mesma classe.

Por exemplo, você tem um quadro (div) com o topo azul, bordas cinza e área para conteúdo com background branco.

Seu CSS seria:

.quadro_azul{
border: 1px solid #ccc;
background: #fff;
padding: 6px;
}

.quadro_azul h6{
display: block;
background: blue;
}

 

Para criar um quadro com o header vermelho você precisar duplicar o código do CSS, facilita a vida para atualizar um elemento específico porém dificulta para fazer alterações gerais, como mudar o layout.

Esse método também torna o código mais sujo (e o html levemente mais limpo).

 

 

Opção 2 - Classes comuns para diversos objetos

Para mim ainda é um pouco complicado pensar desta forma, uma coisa que temos que ter na cabeça antes de pensar nisso é: um elemento do html pode ter várias classes. Repitam isso.

No mesmo exemplo anterior, você teria um estilo para delimitar TODOS os quadros, por exemplo:

.quadro {
border: 1px solid #ccc;
background: #fff;
padding: 6px;
}
 

 E para setar as outras propriedades, como a cr do cabeçalho definiria classes para isso.

h6 .azul{
display:block;
background:blue;
}

Ou ainda mais amplo:

.azul{background:blue;}

.block{display:block;}

Claro que neste caso não faz muito sentido, porque estamos criando classe para setar uma única propriedade, um "desperdício" de classe por assim dizer.

Mas neste caso utilizamos na div a classe "quadro e no cabeçalho (h6) as classes azul e block.

<h6 class="azul block">Header do quadro</h6>

 

 

O que é melhor?

Eu ainda não tenho uma opinião formada sobre qual o melhor caminho a seguir, mas neste momento eu recomendaria o budismo: "siga o caminho do meio".

Ter centenas de classes definindo propriedades vai só complicar a vida do desenvovledor em possíveis manutenções. O CSS vai dicar extenso, montar o html também pois você terá que chamar diversas classes para cada objeto.

Ter uma classe para cada objeto também pode não ser benéfico, a cada nova página você provavelmente vai ter que criar uma nova classe, aumentnado seu CSS sem um bom reaproveitamento de código.

Em ambos, lá se vai a facilidade para alterar layout de um modo REALMENTE rápido.

 

Graças ao Twitter (saiba o que é o Twitter e como usá-lo) visitei um link que me chamou a atenção, com uma possível buzzword: CSS Orientado a Objetos.

Apesar do nome mimimi, a idéia é realmente interessante. A herança poderia ser bem útil no CSS, mas como o nome diz a "cascata" existe, pensando direito dá para aproveitá-la bem.

Bom, veja a apresentação em slides do conceito, abaixo continuo meus pitacos sobre essas práticas!

 

Uma coisa que não costumo fazer e tenho certeza que é muito útil é a separação no CSS da estrutura (posicionamento de colunas, menu, header, footer, ad, etc...) da visualização (backgrounds, fontes, bordas, etc.).

Isso facilita a alteração de layout (visual e estrutural) e somado com o reaproveitamento de classes para diversos elementos, a redução do número de classes para elementos bastante similares e outras boas técnicas pode reduzir bastante seu CSS e facilitar o trabalho em equipe!

O que vocês acham da idéia, do nome e da apresentação?

O que você achou do texto?

  • Muito ruim
  • Ruim
  • Regular
  • Bom
  • Muito bom
Sua opinião é o que faz a comunidade funcionar, colabore para isso!

Tags: css, html, interface, programacao, internet

Enviar para um amigo
Você pode comentar, assinar o feed, conhecer mais sobre o autor e ajudar a divulgar este artigo em sua ferramenta favorita através dos botões abaixo.
  • Rec6
  • ueba
  • linkk
  • dihitt
  • linkloko
  • websapiens
  • linkto
  • Eu curti

Comentários

gustavo
[www]

11/8/2009 14:32:00

Bom eu venho aplicando tal "conceito" nos meus últimos trampos!
Não aplico com total eficácia (HAUHAUHA), pois não tenho total liberdade aonde trabalho =/
Porem realmente vc "codifica" bem menos css e reutiliza muito mais, e não só no mesmo projeto!
É quase que encapsular tudo!
Para mim eu fiz um "framework", que segue a lógica que css é muito repetitivo (fazer colunas, listas, navegações, estruturas, bla bla bla...), ai criei um arquivo com classes básicas de configuração, ou seja com classes css que quase sempre uso em todo lugar, ai eu só modulo elas no atributo class.
Em uma visão geral, no mínimo, vc separa regras css de apresentação das de estruturas.
E acho que esse conceito possivelmente sumirá quando pudermos usar seletores mais avançados.


[Responder este comentário]

Caio Conechoni

11/8/2009 16:51:00

Não sou designer, mas como programador (e aspirante a desenvolvedor web) gostei da idéia de tentar aplicar os conceitos de orientação a objeto no CSS. Parece realmente poupar bastante trabalho, mas vocês designers podem falar melhor disso.

[Responder este comentário]

Guilherme Serrano

14/8/2009 14:07:00

Esqueci de citar no artigo, mas existe herança de alguns elementos no CSS, mas só alguns... acho que poderia ser legal uma forma mais bem definida mesmo, poderia economizar código :)

Cayo Medeiros aka. yogodoshi
[www]

14/8/2009 13:04:00

Já tinha visto essa apresentação antes mas já tinha esquecido tudo que li, é bom dar uma re-lida de vez em quando ^^

Abraços!

[Responder este comentário]

Caio Conechoni

14/8/2009 18:30:00

A herança que conheço no CSS refere-se ao próprio estilo em "cascata" que o nome cita, que se refere à ordem que as coisas são feitas no css. Ex.: se você cria a regra
a { color: #FFF } todos os links serão brancos, mas se logo em seguida você cria a classe .linkvermelho { color: #F00} os elementos `a` com classe `linkvermelho` serão vermelho mesmo existindo a regra que diz que eles devem ser brancos. É disso que você tá falando?

[Responder este comentário]

Sr.Anônimo
[www]

12/11/2009 09:17:00

Ahh cara acho que o nome não é o certo apesar de ser levemente para o lado do POO mas acho que vendo de um modo geral ele se encaixa bem.

[Responder este comentário]

Rodrigo Amorim
[www]

3/1/2010 01:00:00

é quanto mais eu leio sobre programação eu descubro que eu nao sei nada!!
cara é muita coisa uma a traz da outra. (haha)
mas ainda gosto disso.

[Responder este comentário]

Guilherme Serrano
[www]

4/1/2010 11:10:00

Haha, é bem isso... quanto mais a gente estuda mais formas diferentes de fazer as mesmas coisas encontramos. E sempre queremos fazer de um jeito novo para ver se é mais eficiente! :D

Chris Benseler
[www]

4/1/2010 17:18:00

Olha, eu passei da fase: já encontrei uma forma que se adaptou bem pra minha escrita de html/CSS, se for levar em conta td q leio por aí, fico maluco.
Pode parecer meio cabeça-fechada ou acomodado, mas não dá pra querer conhecer 100% tudo que a gente vê...

Guilherme Serrano
[www]

4/1/2010 17:24:00

Faz sentido o teu pensamento Chris! No html/css penso de forma parecida: estou bastante satisfeito com a "produtividade vs resultado final" da forma como desenvolvo. No javascript ainda me considero bastante noob e ainda mudo bastante a forma como escrevo uma função ou outra, apesar de procurar seguir um padrão... hehe

Thiago - Nupe

4/1/2010 10:57:00

utilizo bastante esse metodo na criação de tabelas com onde as linhas são com cores e propriedades alternadas e também utilizo para definir minhas divs, utilizo bastantante as divs para separar meu layout, por exemplo, uma div para o form principal (essa tem suas propriedades), outra div para as colunas (tambem com determinadas propriedades), div para tipos de campos (com suas propriedades). Utilizo assim porque eh necessário seguir um padrão na criação do site. Todos os forms devem ter a mesma formatação. Defino Tudo no css e utilizo sempre o mesmo. Por exemplo:

CSS:
div.Colunas {
margin:1px;
padding:2px;
line-height:20px;
background:#FFFFFF;
float:left;
}
div.Field {
background:#EFEFEF;
}
div.Field2 {
background:#DEDEDE;
}
div.Field3 {
color:#FFFFFF;
background:#333333;
}
div.Over {
overflow:auto;
}
div.CursorPointer {
cursor:pointer;
}
div.FormPrincipal {
width:530px;
margin:10px 0 10px 0;
}
div.divInterna {
margin:20px;
float:left;
}

HTML/PHP:
<div class="divInterna" style="margin-bottom:0px;">
<div class="statusAction"><strong> Conferência de Lançamentos Bancários</strong></div>
<div class="FormPrincipal">
<form name="formConfereLctosBancarios" id="formConfereLctosBancarios" class="formInterna" ac...

<div class="Colunas Field3" style="width:450px"><strong>Empresas</strong></div>
<div class="Colunas Field" style="width:450px">
<select name="id_filial" id="id_filial" class="formInterna300" on...

acho essa maneira um exelente método para poupar trabalho e deixar o código menos sujo, pois tenho muitos forms todos no mesmo padrão.

[Responder este comentário]

Guilherme Serrano

4/1/2010 17:35:00

A idéia de separar os elementos ou classes de estrutura (normalmente algumas divs) dos elementos ou classes de layout é exatamente facilitar a alteração do visual sem precisar mexer (muito) em margins, paddings, floats, etc. mas ao meu ver tem que cuidar para o CSS nâo ficar gigante, da mesma forma que o número de classes por elemento.

Exemplo:
<div class="coluna1 borderRed cursorPointer biggerFont noPadding" />

Quando acontece isso as vezes vale a pena criar uma classe específica para o elemento, reduzindo o html para algo mais simples como:

<div class="coluna1 commentContent" />

Valeu por compartilhar teu código Thiago! :D

Deixe seu comentário!

Nome (requerido)

E-mail (requerido - não será divulgado)

URL

Quanto é 1 + 1?




web tracker