Contenido

Tablas que no son tablas, ¿quien necesita la semántica?

12 Ago

+ 7

¿Alguna vez te has visto en la necesidad de convertir tus div’s en tablas? Usando la propiedad display de CSS, podrás tener las ventajas de las tablas sin perder las flexibilidad de los div’s. Evidentemente estamos perdiendo parte de esa semántica que tanto intetamos conseguir, pero en ocasiones hay que asumir males menores para conseguir resultamos mayores.

//CSS
.table { display: table; }
.table .row { display: table-row; }
.table row .cell { display: table-cell; }
//HTML
<div class="table">
      <div class="row header">
         <div class="cell">Header Column 1</div>
         <div class="cell">Header Column 2</div>
      </div>
      <div class="row body">
          <div class="cell">Body Column 1</div>
          <div class="cell">Body Column 2</div>
      </div>
  </div>

Evidentemente, no puede algo tan fácil, ya que navegadores como IE6 y 7 se pasan esta esta especificación por un lugar poco noble…Entonces, nos toca a nosotros cubrinos las espaldas ante esto.

Solución inline-block 

//CSS
.table { }
.table .row { }
.table .row .cell { display: inline-block; }
//HTML
<div class="table">
      <div class="row header">
         <span class="cell" style='width:50px;'>Header Column 1</span>
         <span class="cell" style='width:50px;'>Header Column 2</span>
      </div>
      <div class="row body">
          <span class="cell" style='width:50px;'>Body Column 1</span>
          <span class="cell" style='width:50px;'>Body Column 2</span>
      </div>
</div>

Esta solución, funcionará en la mayoría de navegadores, aunque rompe la regulación de la W3C ya que estamos haciendo que los <span /> sean elementos de bloque. 

Solución float

//CSS
.table { }
.table .row { clear: left; }
.table .row .cell{ float: left; }
//HTML
<div class="table">
      <div class="row header">
         <span class="cell" style='width:50px;'>Header Column 1</span>
         <span class="cell" style='width:50px;'>Header Column 2</span>
      </div>
      <div class="row body">
          <span class="cell" style='width:50px;'>Body Column 1</span>
          <span class="cell" style='width:50px;'>Body Column 2</span>
      </div>
<div style='clear:left;'></div>
</div>

Quizas, la solución compatible con los navegadores web, pero … los float, me dan un poco de yu-yu :D

Creo que te has equivocado en el último ejemplo, ya que en el CSS pones column y en el HTML no está por ningún lado.

¿Ese “width: 50px” no tocaría estar en el CSS?

No se… ¿ y no deberíamos usar una tabla y ya está ?

Siempre estamos diciendo que tenemos que respetar la semántica y para lo que se ha hecho una etiqueta y este código es totalmente “dividitis”, pero bueno.

De todas formas, una forma de “saltarse” el usar tablas :)

#3 Exacto, lo más correcto siempre es usar el elemento que tienes destinado para para esa función, pero siempre es bueno conocer otras alternativas, menos recomendables, pero interesantes :D

#2 Corregido, gracias ;)

Hola. Estoy de acuerdo en tenerlo como alternativa ya que podría hacernos caer en el efecto Div manía.

Salu2

Yo me vi hace poco en la situación de meter contenido con aspecto de tabla (semánticamente no era tabla) en una página.

Lo hice con float, y metiendo las filas como elementos de lista (LI), con las celdas delimitadas con SPAN.

El problema es que si no se carga la CSS o en navegadores de tipo texto como Lynx, se pierde el “formato tabla”. Lo siento, yo me quedo con las tablas.

Comentar

#

Me reservo el derecho de eliminar y/o modificar los comentarios que contengan lenguaje inapropiado, spam u otras conductas no apropiadas en una comunidad civilizada. Si tu comentario no aparece, puede ser que akismet lo haya capturado, cada día lo reviso y lo coloco en su lugar. Siento las molestias.


Cerrar
Enviar por Correo