Maquetar con divs como si fuese una tabla

Muchos de los que comenzamos maquetando, comenzamos a extrañar los comportamientos que tenian las tablas, y que era algo facil de acomodar los elementos.

Pero recordemos que ahora las tablas no se usan para maquetacion, en cuanto al diseño se refiere. Las tablas se deberían usar para tabular datos, como un listado de varios elementos.

Lo bueno del caso es que existe una manera de «imitar» el comportamiento de las tablas con capas, gracias a la propiedad display.

Muchos de los que comenzamos a maquetar conocemos las básicas que son:

display:

block

Inline

None

pero además existen:

display:

table

table-row

table-cell

Las anteriores propiedades son las necesarias para poder imitar el comportamiento de una tabla ya que tendriamos el elemento <table>, <tr> y <td>

Aca la demostración:

Partamos con un ejemplo de una tabla, que tiene 3 columnas:

Es una estructura sencilla para representar una tabla de 1 fila y 3 columnas. Ahora llevando este mismo concepto a divs tendriamos un resultado como el siguiente:

Teniendo en cuenta la grafica anterior:

Tendríamos nuestros equivalentes:

<table> sería equivalente a <div class=»contenedor-tabla«>

<tr> sería equivalente a <div class=»contenedor-fila«>

<td> sería equivalente a<div class=»contenedor-columna«>

Yo creo que ya esta entendida la idea. Nuestro codigo html sería:

HTML

<div class=»contenedor-tabla»>
    <div class=»contenedor-fila»>
        <div class=»contenedor-columna»>
Columna 1
         </div>

        <div class=»contenedor-columna»>
             Columna 2
        </div>

        <div class=»contenedor-columna»>
Columna 3
        </div>
    </div>
</div>

CSS

.contenedor-tabla{

display: table;

}

.contenedor-fila{

display: table-row;

}

.contenedor-columna{

display: table-cell;

}

24 respuestas a «Maquetar con divs como si fuese una tabla»

  1. Avatar de MArquez
    MArquez

    Muy buen ejemplo, me ayudo de mucho. Muchas gracias

    1. Avatar de Guillermo Aguilar Cruz

      Me alegra que te haya servido. Gracias por tu visita!

  2. Avatar de boris
    boris

    ¿Creando mas ‘divs’ se harían las filas?

    1. Avatar de Guillermo Aguilar Cruz

      Claro que si en este ejemplo solo tenemos una fila, si quisieras crear mas filas tendrias que duplicar el div que tiene la clase «contenedor-fila».
      Por ejemplo. Tomando mi ejemplo, con 3 Columnas, voy a añadir 2 filas mas, en total serian 3 filas:

      <div class="contenedor-tabla">
                  <div class="contenedor-fila">
                      <div class="contenedor-columna">Columna 1 fila1</div>
                      <div class="contenedor-columna">Columna 2 fila1</div>
                      <div class="contenedor-columna">Columna 3 fila1</div>
                  </div>
                  <div class="contenedor-fila">
                      <div class="contenedor-columna">Columna 1 fila2</div>
                      <div class="contenedor-columna">Columna 2 fila2</div>
                      <div class="contenedor-columna">Columna 3 fila2</div>
                  </div>
                  <div class="contenedor-fila">
                      <div class="contenedor-columna">Columna 1 fila3</div>
                      <div class="contenedor-columna">Columna 2 fila3</div>
                      <div class="contenedor-columna">Columna 3 fila3</div>
                  </div>
              </div>
      
      
      1. Avatar de Juan Piojo
        Juan Piojo

        con esta estructura como se combinan filas y columnas

        1. Avatar de Guillermo Aguilar Cruz

          si te refieres al colspan, rowspan de las tablas, no he intentado hacerlo, ya que las tablas solo deberian usarse para listar datos, el resto solo con divs.
          Pero tal vez te pueda servir este articulo:

  3. Avatar de Lola Lola
    Lola Lola

    EXCELENTEEEE… sinceramente excelente explicacion, la mas visual, la mas grafica, la ,mas sencilla, clara y QUE FUNCIONA!!! hace dias que ando buscando una forma correcta de conseguir este resultado sin poder hacerlo. Muchas soluciones en la web y mucha gente comn buena voluntad ayudando, pero nadie tan didactico y sencillo. MUCHISIMAS GRACIAS!!!

    1. Avatar de Guillermo Aguilar Cruz

      Gracias a ti por visitar nuestro blog, trato de hacer lo mas entendible los tutoriales, precisamente para que las ideas se entiendan bien. Saludos!

  4. Avatar de s
    s

    hola, me parece una explicación genial pero estoy intentando que una columna tenga dos filas y no se me ocurre cómo hacerlo…. alguna idea? gracias!!

    1. Avatar de Guillermo Aguilar Cruz

      Claro! mira colocas divs dentro de cada columna y tienes las filas

      
      <body>
      	<div class="contenedor-tabla">
      		<div class="contenedor-fila">
      			<div class="contenedor-columna">
      				<div>Columna1 Fila1</div>
      				<div>Columna1 Fila2</div>
      			</div>
      
      			<div class="contenedor-columna">
      				<div>Columna1 Fila1</div>
      				<div>Columna1 Fila2</div>
      			</div>
      			<div class="contenedor-columna">
      				<div>Columna1 Fila1</div>
      				<div>Columna1 Fila2</div>
      				<div>Columna1 Fila3</div>
      				<div>Columna1 Fila4</div>
      			</div>
      		</div>
      	</div>
      </body>
      
      
  5. Avatar de Ricchar
    Ricchar

    Buenas!! Como se podria centrar el contenido?? He probado a poner Columna1
    Pero no me hace caso, tambien he probado dentro del CSS a poner float:center
    y pasa de mi…

    Alguna sugerencia?

    Gracias de antemano!

  6. Avatar de Macarena
    Macarena

    Hola! Muy pero muy buen post, me ha ayudado mucho 🙂 Me gustaría preguntarte si se puede hacer que en la 1° fila hayan dos columnas y en la 2° fila solo una columna que ocupe los espacios de las columnas de la fila 1, no sé si me explico bien. Espero puedas responderme y gracias por compartir tus conocimientos 🙂 Saludos!

  7. Avatar de Gerardo
    Gerardo

    Excelente tu ilustracion, tus ejemplos son cortos y efectivos, y la forma de explicar con dibujos las similitudes entre tablas y Divs, no tiene precio.. Felicidades y gracias por dedicar algo de tu valioso tiempo a los que estamos aprendiendo….

  8. Avatar de Spg
    Spg

    Buenas, a ver si alguien me puede ayudar…
    Tengo que pintar un listado de horas de esta manera

    09:00 09:40 12:00
    09:10 09:50 13:00
    09:20 10:00
    09:30 11:00

    Tres columnas, suponiendo que la lista de horas esta en un array ordenado horas, usando solo table me resulta imposible, cómo podría hacerlo con div??

    Gracias

    1. Avatar de Guillermo Aguilar Cruz

      Hola que tal?
      SI dices que los horarios estan en un array ordenado lo mas simple seria listarlo pero veritcalmente es decir:

      09:00 09:10 09:20
      09:30 09:40 09:50.

      Pero puedes ordenarlas como tu quieres, pero es haciendo uso de CSS3, con la propiedad column-count de la siguiente manera:

      <!DOCTYPE html>
      <html>
      <head>
      <style> 
      .newspaper
      {
      column-count:3;
      -moz-column-count:3; /* Firefox */
      -webkit-column-count:3; /* Safari and Chrome */
      }
      </style>
      </head>
      <body>
      
      <p><strong>Note:</strong> The column-count property is not supported in Internet Explorer 9 and earlier versions.</p>
      
      <ul class="newspaper">
      <li>1:00</li>
      <li>1:10</li>
      <li>1:20</li>
      <li>1:30</li>
      <li>1:40</li>
      <li>1:50</li>
      <li>2:00</li>
      <li>2:10</li>
      <li>2:20</li>
      <li>2:30</li>
      <li>2:40</li>
      <li>2:50</li>
      </ul>
      
      </body>
      </html>
      
  9. Avatar de Cristinity
    Cristinity

    Muchas Gracias es justo lo que andaba buscando

  10. Avatar de a

    Mi comentario

  11. Avatar de Carlos Ceron
    Carlos Ceron

    Hola, genial tu explicación y más visual de ahí no se puede 😀

    Tengo 2 preguntas:

    1. Estoy usando Dreamweaver para hacer el ejemplo ..pero después de pegar el código html y el CSS no me aparece en dreamweaver tal cual como aparece al previsualizar en el navegador … hay forma de lograr que en dreamweaver vaya viendo tal cual como saldrá en la previsualización?

    2. la ventaja de usar las tablas es que por ejemplo en una de tus respuestas pusiste 4 filas en la última columna …eso haría que la primera y segunda columna se estirarían …pero con los DIVS no pasa eso … cómo puedo hacer que la columna1 de la fila 2 y la columna 2 de la fila2 tomen el alto que se está generando por poner la columna 3 fila 3 y la columna 3 fila 4?

    Mil gracias

  12. Avatar de Charly

    Qué chingona manera de explicar las cosas, me encantó

  13. Avatar de Akire

    Excelente aporte, pero me gustaría saber cuando cambio una tabla que adentro tiene tbody y dentro de esa tabla en una columna tiene otra tabla? al pasarlas a divs cómo seria? 🙁 esto parecía sencillo como lo explicaste en tu ejemplo pero no en los proyectos reales jaja podrías aconsejarme en este caso o me recomiendas usar boostrap o algun otro frameworkd para que me ahorre trabajo tiempo y demás?. Aunque me gustaría saber como sería la parte del tbody 🙁

    ordenes:

    codigos:

    actividad:

    partes:

    caracteristicas:

  14. Avatar de quinqui

    Este es el mejor tip que me podrías haber dado, llevo años sin poder usar las DIVs de este modo, y la solución eran tan pero tan sencilla que casi muero xDDD jajajaja!! Muchísimas gracias por el tip!!! 😀 😀 😀 😀

  15. Avatar de tonilazarenotoni

    Muchas gracias. De lo mejor que he encontrado. Sencillo, claro y práctico. Felicitaciones.

  16. Avatar de Felipe

    Mas facil imposible! gracias!

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

La moderación de comentarios está activada. Su comentario podría tardar cierto tiempo en aparecer.