O elemento HTML body nos nossos sites, como melhor aproveitá-lo.

Lhes apresento o elemento body:

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

Todos nós conhecemos. Mas será que estamos utilizando de verdade ele ?

O body é o elemento no nosso documento responsável por ser o container de tudo que é conteúdo do site.
Diferente do <head>, oque está dentro do <body> é oque fica/ou ficará disponível para visualização do visitante.

As informações que queremos transmitir. Títulos, Textos, Imagens..
Até aqui, todos nós já usamos o body para isso, mas.. e 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:
http://www.w3schools.com/tags/tag_body.asp

Os mais interessantes, são o id e a class. Vocês já tinham colocado um desses no body de algum site ?

<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, rodapé inexistente..

Esse tipo de situação, podemos facilmente resolver usando o atributo ID no body.
Sendo a home, estilizamos o topo diferente doque ele seria nas internas:

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

A marcação html fica intacta, 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

Hum.. na verdade eu comecei explicando o ID, porém hoje em dia, eu prefiro

<body class="home">

do que com ID.

Pelo simples motivo de poder usar mais de uma. Com classes, temos todos os benefícios que citei do ID:

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

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

<body class="cursos html">

A motivação disso, é imaginemos um menu dropdown.

   <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 qq outra cor por padrão, nas páginas em que não definirmos nada.

.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:

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

E porque o body ? pq afinal, 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’ definições de fonte declaradas no body.

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, <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 a elemento. E não por herança como ocorre qndo trabalhamos com o body.

A idéia é 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 atingimos ela.
Por este motivo não gosto daqueles css resets gigantescos e milagrosos, entretanto isso é assunto para um próximo post.

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? (100% width), 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.

Que tal ?

3 Comments

  1. Evandro Oliveira

    março 1, 2012 at 14:59

    Bruno, você defende ou não o procedimento similar no HTML? Lembro de uma vez no fórum ter comentado sobre algo do tipo e ter sido desencorajado pelo – na época moderador – Paulo de Tarso.

    [http://forum.imasters.com.br/topic/377739-centralizar-pagina/], favor ignorar os malabarismos por desconhecer o milagre do DOCTYPE – shame on me

    Até mesmo o html5 boilerplate e o normalize.css aplicam regras de apresentação no HTML. Nunca vi problema algum.

  2. Jonathan [JCM]

    março 2, 2012 at 19:18

    A tag body também pode ser usada como wrapper. E é melhor do que ter uma div wrapper =)

Deixe uma resposta

Your email address will not be published.

*