Tablas VS DIV + CSS

pekpon

Buenas chicos!

Primero de todo decir que he buscado por el foro a ver si había algo parecido al debate que voy a exponer y no he encontrado nada parecido, así que ayá voy :D

Hace aproximadamente 5 o 6 años que diseño páginas web, y empecé con un tutorial de una página, la cual me enseñó a estructurar estas con tablas.

Despues de muchas páginas a la espalda, llego a un grado SUPERIOR de informática y me dicen que una web actualmente se estructura con DIV's y que las tablas son únicamente para mostrar datos en forma de tabla.

Tengo un dilema. Por mucho que me insistan en que es mil veces mejor usar DIV+CSS para una página web, yo estoy acostumbrado a crearlas con tablas y no logro ver el "OSTRAS! Si que es verdad que con DIV es mejor..."

Así pues, si podéis decirme que técnica usais vosotros y los argumentos para decirme que usar DIV es mucho mejor, os estaré muy agradecido.

Gracias!

eXtreM3

Uno de los beneficios de usar divs en lugar de tablas es la maquetación por bloques. Ponte en el caso que tienes una web enorme y en un momento dado quieres insertar un nuevo bloque, con divs es muy fácil, mientras que con tablas te puedes volver realmente loco, sobre todo si no eres tú el que ha hecho el código inicial y te lo han pasado.

La base de esta discusion no es que se use una cosa u otra, sino que se use cada cosa para lo que esta diseñada. Es decir, que si tengo que mostrar un bloque de texto a la derecha y otro a la izquierda, usare, por logica, aquel elemento que me agrupe textos dentro de un bloque, y luego los posicionare en el navegador con CSS; si dentro de alguno de esos bloque lo que necesito es mostrar datos tabulares, los mostrare dentro de una tabla, y luego la posicionare relativamente respecto al bloque qen el que esta incluida.

Cuando digo bloque, me refiero a cuaquier tipo de elemento de bloque, ya sean listas de definiciones, bloques de cita, o los tan usados divs o cuadros.

El error esta en intentar ubicar los contenidos de la web mediante un entramedo sucio y lioso de tablas, celdas de encabezado(que nadie usa y no se porque), filas, y celdas.

Lo correcto es que con HTML demos formato al texto, y nos ayudemos de herramientas como CSS para posicionar cada elemento.

Saludos :D

Meleagant

El uso de tablas se abandonó hace mucho.

Lo de las tablas era una ñapa que se hizo para poder realizar diseños complejos para los que HTML no estaba pensado, pero hoy en día CSS le da mil vueltas a ese sistema y hacerlo va en contra de todas las recomendaciones del W3C.

BLZKZ

meh

B

No hay versus ninguno...

Los tablas para datos tabulados y los divs para maquetar.

Puedes estar acostumbrado a ponerte toda la vida los calzoncillos en la cabeza, pero esa no es su función.

pekpon

Vale. Cada vez tengo más claro que una tabla no esta diseñada para estructurar una web, y que se deben usar bloques como DIV's para estructurar, si. Pero el problema reside en:

Imaginad que quiero hacer una web, la cual tiene 3 apartados o columnas.
1 columna(o bloque) a la izquierda de 150 px.
1 columna central(o bloque) en medio de 400 px.
1 columna (o bloque) a la derecha de 150 px.

Si creo esto en una tabla con 3 columnas, tengo los 3 apartados juntos en una sola tabla, de manera que está toda la info recogida. Ademas con dreamweaver, lo veo todo de manera visual.

Ahora, si uso 3 DIV's, me da la impresion que al ser INDIVIDUALES, será eso un putiferio y la estructuración no será precisa ni nada.

Se que me equivoco, pero por favor, decidme como sería este ejemplo con 3 DIV's de manera que la estructura quede solida y pueda hacerme bien la idea.

Gracias chicos!

Crawler

No entiendo tu ejemplo.

Tener la info en 3 divs es como tenerlas en 3 tds, al respecto de tenerlas "agrupadas" o "separadas"

Si necesitas un padre que englobe todo, puedes hacer algo como:

<div>
	<div></div>
	<div></div>
	<div></div>
</div>

*No hay manera de insertar código legible en MV ?

LR

Codigo legible?? mm......... [ code] [ /code]?

NeB1

#6 muy fácil:


<div style="display:table;width:700px;margin: 0 auto;">
    <div style="width:150px;float:left;">Menu izquierda</div>
    <div style="width:400px;float:left;">Contenedor central</div>
    <div style="width:150px;float:left;">Menu derecha</div>
</div>

Si se te ralla, es por los márgenes por defecto de los divs, todo es cuestión de ajustarlo un poco.

Si después de dos años haciendo webs con tablas, no has visto que problemas tienen ... :S

pekpon

Pues la veradad es que las tablas nunca me han dado ningun problema....
Por eso este post...

Crawler

@ #9

Olvidate de "display: table" en IE lt 8, y flotar elementos sin hacer algún tipo de clearfix con su contenedor, es altamente peligroso.

@ #8 Gracias por lo de code, no lo sabia/recordaba ;)

pekpon

#11 ejemplo de lo correcto? Gracias!! :D

Crawler

Yo lo haría así:

CSS

#wrapper{
	width: 700px;
	margin: 0 auto;
	overflow: hidden; *zoom: 1; *overflow: visible;
	background: #f00;
}

#sidebar1{
	float: left;
	width: 150px;
	background: #a0f;
}

#sidebar2{
	float: right;
	width: 150px;
	background: #af0;
}
#mainContent{
	background: #fff;
}

HTML

<div id="wrapper">
	<div id="sidebar1">s1</div><!-- sidebar1-->
	<div id="sidebar2">s2</div><!-- sidebar2-->
	<div id="mainContent">mC</div><!-- mainContent -->
<div><!-- wrapper-->	

Para rallarte menos, y que siga el mismo orden que si fuesen tablas, puedes hacerlo asi:

<div id="wrapper">
	<div id="sidebar1">s1</div><!-- sidebar1-->
	<div id="mainContent">mC</div><!-- mainContent -->
	<div id="sidebar2">s2</div><!-- sidebar2-->
<div><!-- wrapper-->

a lo cual tendrías que añadir al css anterior:

#mainContent{
	background: #fff;
	float: left;
	width: 400px;
}

y #sidebar2 podría ser float left o float right indistintamente.

Edit: si, uso el hack del asterisco para arreglar internet explorer 7 y 6, cosa que hace que no valide el CSS.

pekpon

Muchas gracias chico!
Mañana lo testeo y empezaré a empaparme de maquetación con capas.
Una pregunta más:
De que sirve crear un div madre, cuando los otros 3 son independientes y puedes colocarlos donde quieras?

Saludos!

NeB1

#13 sin el display table el div 'wrapper' tendrá un height de 0, esta era la única razón por la cual lo he puesto.

eXtreM3

#14 la madre siempre ayuda a saber lo que tienes dentro y estructurar todo con mayor claridad

pekpon

#16 de acuerdo, de manera que cada bloque, tenga sus sub-bloques para poder identificarlos más rapidamente en el código...no?

A ver si empiezo ya con esto, que parece muy interesante :D

l31m

http://www.code-sucks.com/css%20layouts/fixed-width-css-layouts/

pekpon

#18 Muy muy buena, para hacerse una idea basica...
Me lo miraré con detenimiento, Gracias!

bLaKnI

Cuando useis flotabilidades, acordaos de los clear posteriores!
Ya sea via <div style="clear:both;"></div>
o via añadir dicha propiedad en el proximo bloque.

Si no lo haceis, sereis felices cuando empeceis a dar margins o paddings posteriormente. Ya lo vereis...

1
eXtreM3

#20 doy MUCHA fe de eso :D

NeB1

#20 Me ha costado mucho tiempo empezar a descubrir el poder del clear

Crawler

#20 de ahi el overflow: hidden en el contenedor padre.

Funciona igual de bien, y se aplica en el div que toca, no "en el siguiente". Creo que es más lógico.

Edit: además de lógico, es totalmente indispensable para la reutilización de código.

Por otro lado, clear both no se puede utilizar siempre, ya que hay veces que no quieres que el div en cuestión haga un clear, sólo que pille el height adecuado, es otra razón para apostar por overflow: hidden;

Crawler

#18 Pinta bien la página, aunque los layouts fijos se me hagan algo antiguos.

El único problema grande que le veo, es el nombre que utiliza para los divs. NUNCA se deben utilizar nombres relativos al aspecto del mismo.

M'explico:

Nadie te garantiza que lo que has llamado "leftColumn" vaya a quedarse a la izquierda para siempre, igual un dia tienes que cambiarlo de sitio, asi que te encontrarás con un elemento llamado "leftColumn" que no es la columna de la izquierda.

Más de una vez me he encontrado con este caso, o con "<span class="colorRojo">" y el contenido del mismo de color azul, y cosas asi...

Nombrad los elementos según su significado/uso, no según su aspecto/posición.

Usuarios habituales

  • Crawler
  • NeB1
  • eXtreM3
  • bLaKnI
  • pekpon
  • l31m
  • Meleagant