CSS

6 mar, 2012

Elemento HTML body: como aproveitá-lo melhor

Publicidade

Eu lhes apresento o elemento body:

    view plaincopy to clipboardprint?

<body>
<!-- todo o conteudo do site aqui dentro -->
</body>

Todos nós o conhecemos, mas será que estamos utilizando-o de verdade?

O body é o elemento no nosso documento responsável por ser o container de todo conteúdo do site.
Diferente do <head>, o que está dentro do <body> é oque fica, ou ficará, disponível para a visualização do visitante, como títulos, textos e imagens. Todos nós já usamos o body para isso, mas o que mais podemos fazer com ele?

Pode parecer absurdo falar isso, mas convém lembrar: o body é uma tag HTML; e como tal, aceita atributos: veja! Os mais interessantes são o id e a class.

Vocês já tinham colocado um desses no body de algum site?

    view plaincopy to clipboardprint?

<body id="home">

Usar o body com um ID

É uma proposta interessante e nos ajuda a economizar alguns elementos de estruturação de layout de vez em quando. Por exemplo, aqueles layouts onde a home do site difere por poucas coisas das páginas internas, como: topo mais alto, ou o rodapé inexistente. Esse tipo de situação de ser facilmente resolvida usando o atributo ID no body.

Sendo a home, estilizamos o topo diferente do que ele seria nas internas:

    view plaincopy to clipboardprint?

body#home #header { height: 200px; }
#header { height: 100px; }

A marcação HTML fica intacta e assim evitamos coisas, como #header_home. E isso nos levará a escrever um CSS mais bonito também. Afinal, fizemos um condicional no CSS!

Usar o body com uma ou mais CLASSes

Na verdade, eu comecei explicando o ID, porém hoje em dia, eu prefiro uma CLASS:

    view plaincopy to clipboardprint?

<body class="home">

E tudo pelo simples motivo de poder usar mais de uma. Com CLASSes, temos todos os benefícios que citei do ID:

    view plaincopy to clipboardprint?

body.home #header { height: 200px; }
#header { height: 100px; }

E é possível colocar mais de uma, veja:

    view plaincopy to clipboardprint?

<body class="cursos html">

A motivação disso é um menu dropdown.

    view plaincopy to clipboardprint?

<li>Cursos
<ul>
<li>HTML</li>
<li>CSS</li>
<li>JavaScript</li>
</ul>
</li>

Assim cada página interna teria uma combinação de CLASS para o body diferente:
class=”cursos html”, class=”cursos css”, class=”cursos javascript”. A vantagem disso, é que a class=”cursos” é comum a todos eles e no CSS podemos fazer facilmente um destaque naquele item de menu – se estivermos dentro de um dos filhos. Mais uma vez, levamos o poder do CSS à outro nível!

Tendo a CLASS HTML, CSS e sabendo que cada página interna terá somente um título H1, podemos, por exemplo, fazer o H1 ser azul na página de HTML, ser vermelho na página de CSS e ser de qualquer outra cor por padrão, nas páginas em que não definirmos nada.

    view plaincopy to clipboardprint?

.html h1 { color: #00f; }
.css h1 { color: #f00; }
h1 { color: #000; }

A grande sacada disso é não precisarmos adicionar nada mais no HTML, além das respectivas classes no body.

O body é pai de todo mundo

Conhecendo o efeito cascata do CSS e sabendo que tudo o que o visitante verá está dentro do body do documento, é melhor usar a herança do CSS para definir os padrões do site, como:

    view plaincopy to clipboardprint?

body { font-size: 12px; font-family: Tahoma, sans-serif; color: #333; }

E por que o body? Porque todos os elementos posteriores herdarão dele e isso tudo com uma especificidade bem baixa. Então, não precisamos brigar para sobrescrever estilos.

Deve ter ficado implícito, mas quero ressaltar com uma ressalva: todos os elementos, menos os de formulário. Por algum motivo que desconheço, input, select e textarea, não herdam ‘naturalmente’ as definições de fonte declaradas no body.

    view plaincopy to clipboardprint?

body, input, select, textarea {
font-size: 12px; font-family: Tahoma, sans-serif; color: #333;
}

Com isso, cobrimos todas as tags e não estragamos as definições padrões, como: <small> terá uma fonte menor que o body e <h1> continua com uma fonte maior. Por esse motivo que não uso o seletor global * para esse trabalho. Ele aplica a todos os elementos, mas de forma “forçada”; elemento por elemento. E não por herança como ocorre quando trabalhamos com o body.

A ideia é brigarmos menos com nós mesmos. E só sobrescrever poucas propriedades. Isso é ótimo por uma outra questão: não corremos o risco de “esquecer” de alguma tag, visto que com uma declaração simples, e aproveitando a herança do CSS, nós a atingimos. Por este motivo não gosto daqueles CSS resets gigantescos e milagrosos – entretanto isso é assunto para um próximo artigp.

O body aceita CSS

Sabe aquele fundo do topo com degradê e aquela linha do header que vai de uma ponta a outra do browser? Então, aplica como background do body. Simples assim! Descartamos a necessidade de um #wrap_header, e jogamos em uma só imagem como background do body, pois ele mesmo já tem de graça para gente, 100% de largura da viewport.

Esse é apenas um exemplo para tentar “abrir” a mente. As possibilidades são muitas. Às vezes, precisamos rever coisas “óbvias” ou “básicas”, pois podem fazer coisas impressionantes.