O vício dos divs

Por RamonPage

PARA QUEM ESTÁ iniciando no mundo do tableless, nada melhor do que pensar nos seus layouts completamente sem tabelas. Mas isso pode se tornar um vício, e um recurso que pode e deve ser utilizado em XHTML acaba entrando no esquecimento.

Pensando nisso, um dos meus últimos projetos foi efetuado completamente sem tabelas (até para textos tabulados). O resultado foi interessante, mas ainda assim não foi possível chegar à todos os recursos (como larguras flexíveis) que as tabelas proporcionam. Caso eu fosse tentar me aventurar nisso, com certeza perderia um pouco de tempo, em vão.

Darei um exemplo. Ele funciona bem no IE, Opera e Firefox (ou firer0x, apelido carinhoso).

O código

Definindo as colunas e células da nossa “tabela”.

Definindo o título:

<div class="row-order">
          <div class="col-title-1">Código</div>
          <div class="col-title-2">Produto</div>
          <div class="col-title-3">Quantidade</div>
        </div>
        

Definindo o conteúdo:

<div class="row-order">
          <div class="col-1">102</div>
          <div class="col-2">Arroz</div>
          <div class="col-3">1kg</div>
        </div>
        

Definindo o CSS:

#content .row-order {
          width: 500px;
          background: #fff;
          margin: 0;
          border-bottom: 1px dotted #c7c7c7;
        }
        /**/
        #content .row-order .col-title-1 {
          /* Título tabela - primeira coluna */
          display: table-cell;
          margin: 0;
          padding: 10px;
          width: 60px;
          background: #f1f1f1;
          font-weight: bold;
          color: #0678b3;
          border-left: 1px solid #fff;
        }
        /**/
        * html #content .row-order .col-title-1 {
          /* Título tabela - primeira coluna (hack IE) */
          display: list-item;
          float: left;
        }
        /**/
        #content .row-order .col-1 {
          /* Conteúdo tabela - primeira coluna */
          display: table-cell;
          margin: 0;
          padding: 10px;
          width: 60px;
          border-left: 1px solid #fff;
        }
        /**/
        * html #content .row-order .col-1 {
          /* Conteúdo tabela - primeira coluna (hack IE) */
          display: list-item;
          float: left;
        }
        /**/
        /* E assim sucessivamente até chegar até a terceira
           coluna respeitando o tamanho total de 500px
           para cada célula da tabela. Ou seja: com três
           colunas, divida os 500px em três como desejar.*/
        

Esta técnica dá certo, porém vejam o trabalho para a construção de toda a marcação, além do inconveniente do uso dos hacks para IE. Todas as colunas posteriores à primeira precisarão de ajustes via hack para ficarem com seu tamanho similar ao apresentado em outros browsers.

A solução

Na realidade não é bem uma solução, já que, ao meu ver, deve ser a forma correta de marcação. Fica como uma conscientização, então. Lá vai:

<table>
          <caption>Minha tabela de produtos</caption>
          <thead>
            <tr>
              <th>Código</th>
              <th>Produto</th>
              <th>Quantidade</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td>102</td>
              <td>Arroz</td>
              <td>1kg</td>
            </tr>
          </tbody>
        </table>
        

Para este trabalho, uma simples tabela de três colunas resolveria o problema. E melhor: sem grandes truques de CSS. Tabelas servem para isso! Use-as para isso!

Marcado em:

* * *