Foros del Web » Creando para Internet » CSS »

Imposible de hacer con CSS?

Estas en el tema de Imposible de hacer con CSS? en el foro de CSS en Foros del Web. Hola a todos! Estoy queriendo hacer esto hace mas de un dia. Quiero hacer un clasico diseño de tres columnas pero que yo pueda omitir ...
  #1 (permalink)  
Antiguo 11/09/2009, 12:47
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 10 años, 9 meses
Puntos: 16
Imposible de hacer con CSS?

Hola a todos!

Estoy queriendo hacer esto hace mas de un dia. Quiero hacer un clasico diseño de tres columnas pero que yo pueda omitir alguna de las columnas (o las dos) y el contenido siempre se ajuste al ancho.

Esta tabla hace exactamente lo que quiero:

Código HTML:
<table width=780 height=100% border=1>
<tr>
	<td width=180 valign=top>col izq</td> <!--columna opcional-->
	<td valign=top>contenido</td>
	<td width=180 valign=top>col der</td> <!--columna opcional-->
</tr>
</table> 
Pero con CSS no lo puedo hacer

Ayudita?

gracias!
__________________
Responder encuestas
  #2 (permalink)  
Antiguo 11/09/2009, 13:06
Avatar de Daniel Ulczyk
Moderador
 
Fecha de Ingreso: febrero-2005
Ubicación: Buenos Aires
Mensajes: 9.175
Antigüedad: 12 años, 9 meses
Puntos: 2072
Respuesta: Imposible de hacer con CSS?

Tal vez si asignases IDs, podrías controlarlo mejor (según voluntad) y así aplicar CSS

Código HTML:
Ver original
  1.     <title></title>
  2.     <style>
  3.     #sinizquierda #izquierda {
  4.         display: none;
  5.     }
  6.     #derecha {
  7. /*      display: none;*/
  8.     }
  9.     #contenido {
  10.         background: #F5F5F5;
  11.     }
  12.     </style>
  13. </head>
  14.  
  15. <body id="sinizquierda">
  16. <table width=780 height=100% border=1>
  17. <tr>
  18.     <td id="izquierda" width=180 valign=top>col izq</td> <!--columna opcional-->
  19.     <td id="contenido" valign=top>contenido</td>
  20.     <td id="derecha" width=180 valign=top>col der</td> <!--columna opcional-->
  21. </tr>
  22. </body>
  23. </html>

En mi ejemplo, como el BODY tiene un ID="sinizquierda" se aplica el CSS
Código html:
Ver original
  1. #sinizquierda #izquierda {
  2.         display: none;
  3.     }

Con esa idea podrías escribir el CSS que necesites para las diferentes combinaciones

Suerte!
__________________
—Somos lo que hacemos repetidamente. La excelencia, entonces, no es un acto sino un hábito. (Aristóteles dixit)
  #3 (permalink)  
Antiguo 11/09/2009, 17:58
Avatar de danneg  
Fecha de Ingreso: agosto-2009
Ubicación: Todo un mundo de posibilidades
Mensajes: 856
Antigüedad: 8 años, 3 meses
Puntos: 48
Respuesta: Imposible de hacer con CSS?

mmm

pues por que no intentas hacerlo con capas (div's) en lugar de tablas?

es mas cencillo valida mas facil

puedes utilizar float's en los div para que nunca cambien su posicion
  #4 (permalink)  
Antiguo 11/09/2009, 18:01
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 10 años, 9 meses
Puntos: 16
Respuesta: Imposible de hacer con CSS?

eso es justamente lo que intento hacer. La tabla es solo a modo de ejemplo. Yo lo quiero hacer con divs pero es imposible
__________________
Responder encuestas
  #5 (permalink)  
Antiguo 11/09/2009, 20:13
Avatar de alexk
Colaborador
 
Fecha de Ingreso: julio-2009
Ubicación: De vuelta al trono
Mensajes: 1.697
Antigüedad: 8 años, 5 meses
Puntos: 137
Respuesta: Imposible de hacer con CSS?

mmmm...
Cita:
con divs pero es imposible
imposible no... "incompatible" Si...

Código css:
Ver original
  1. .all{width:750px;margin-top:20px;display:table;}
  2. .izk, .cen, .der{display:table-cell;}
  3. .izk, .der{width:180px;}
Código html:
Ver original
  1. <div class="all">
  2.     <div class="izk">columnizq</div>
  3.     <div class="cen">contenido</div>
  4.     <div class="der">columnder</div>
  5. </div>
  #6 (permalink)  
Antiguo 12/09/2009, 07:54
Colaborador
 
Fecha de Ingreso: junio-2007
Mensajes: 5.798
Antigüedad: 10 años, 6 meses
Puntos: 538
Respuesta: Imposible de hacer con CSS?

Esta estructura (dos columnas laterales de anchura fina y una central ocupando el resto del espacio disponible) es la clásica de los layouts de tres columnas.

Mira a ver si el siguiente código te sirve como base para lograr lo que necesitas.

Código html:
Ver original
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" lang="es-es">
  3. <title>Kseso? jugando con css</title>
  4. <meta http-equiv="Content-Type" content="text/html;charset=iso-8859-1" />
  5. <style type="text/css">
  6. * {margin: 0; padding:0; outline: none; border: 0;}
  7. body {font-size:99%; font-family:sans-serif; background:#f5f5f5;}
  8.  
  9. #header {background:#521E39;}
  10.  
  11. #izquierda {float:left; width:280px; padding:10px; background:#91D0D0;}
  12. #derecha{float:right; width:280px; padding:10px; background:#65684A}
  13. #centro {background:#e0e0e0; margin-top:10px;}
  14.  
  15. #izquierda, #centro, #derecha {padding-bottom:500px; margin-bottom:-500px;}
  16.  
  17. #contenedor {overflow:hidden; background:#e0e0e0;display:inline-block; min-width:970px;}
  18.  
  19.  
  20. #footer {clear:both; background:#191919; margin-top:-3px;}
  21.  
  22. .caja-top {padding:10px;}
  23. .caja-top img {float: left; display: inline; border: 1px solid #f5f5f5;}
  24. h1 {font-size:3em; margin:0; padding:10px 0; color:#fff; font-family: monospace;}
  25. h2, h3 {font-size:1.8em; margin:0; padding:8px 0; font-family: serif;}
  26. p {font-size:1em; line-height:1.5em; margin:0; padding:5px;}
  27. #footer p, #header p, #derecha p {color:#fff;}
  28. .monospace {font-family: monospace; font-size: 1.2em; background: #FF6600;}
  29. .codigo {font-family: monospace; font-size:1em; letter-spacing: .1em; border: 1px solid #f5f5f5; color: #f5f5f5; background:#191919;}
  30.  
  31. <!--[if lte IE 7]>
  32. <style type="text/css">
  33. #centro {float:left; display:inline; margin-left:10px; margin-right:10px;}
  34.  
  35. #contenedor {display:inline-block; width: expression(document.body.clientWidth < 971? "970px": "auto" );}
  36. </style>
  37. <![endif]-->
  38.  
  39. </head>
  40.  
  41.         <div id="header">
  42.             <div class="caja-top">
  43.                <img src="http://www.forosdelweb.com/customavatars/avatar184738_13.gif" />
  44.                 <h1>- KSESO? Jugando con CSS -</h1>
  45.                 <p>Layout de tres columnas, las laterales fijas y la central ocupando el resto de espacio. Si suprimes una de las laterales, su espacio es ocupado por la central.</p>
  46.             </div>
  47.         </div>
  48.  
  49.         <div id="contenedor">
  50.             <div id="izquierda">
  51.                     <h3>Izquierda 300px</h3>
  52.                     <p class="codigo">Para ocultar esta columna o la derecha sólo hay que añadir a su css "display: none;"</p>
  53.                     <p>Lorem ipsum dolor sit amet consectetuer velit semper elit volutpat mollis. Ligula Curabitur euismod at ut auctor porta enim vel neque consequat. Massa tempus libero dui ac elit platea tincidunt Vivamus Morbi ipsum. Dui mauris ac consectetuer id in congue sem Quisque dictumst metus. Hendrerit suscipit massa rhoncus risus Vestibulum vitae tortor cursus lorem Quisque. Sagittis Pellentesque interdum ipsum et ut dolor ipsum.</p>
  54.           <p>Cursus eget nulla libero fringilla tellus In elit et at felis. Vitae id in et risus elit Sed enim Nunc ac adipiscing. Ut massa leo nec leo accumsan est justo enim Morbi lorem. Ante dolor ante tincidunt interdum Pellentesque consectetuer Curabitur In interdum nibh. Diam congue tellus enim magna adipiscing risus metus dignissim Nam justo. Laoreet platea ut.</p>
  55.           <p>Felis ac mus Nam ante tortor Donec Aliquam nunc pulvinar pellentesque. Metus massa elit Fusce feugiat vel wisi enim neque Nulla est. Nulla Phasellus Lorem faucibus semper est vitae orci vel tristique nibh. Vitae tristique rhoncus felis Maecenas ligula dignissim justo ipsum orci orci. Velit id ante aliquam congue Nulla vitae gravida sapien elit sagittis. Mattis ac risus.</p>
  56.                 </div>
  57.  
  58.             <div id="derecha">
  59.                     <h3>Derecha 300px</h3>
  60.                     <p class="monospace">Puedes cambiar el valor de la anchura de las columnas laterales. <br/>
  61.           Admiten valores en px, % o en em. Es indiferente.</p>
  62.                     <p>Lorem ipsum dolor sit amet consectetuer velit semper elit volutpat mollis. Ligula Curabitur euismod at ut auctor porta enim vel neque consequat. Massa tempus libero dui ac elit platea tincidunt Vivamus Morbi ipsum. Dui mauris ac consectetuer id in congue sem Quisque dictumst metus. Hendrerit suscipit massa rhoncus risus Vestibulum vitae tortor cursus lorem Quisque. Sagittis Pellentesque interdum ipsum et ut dolor ipsum.</p>
  63.           <p>Cursus eget nulla libero fringilla tellus In elit et at felis. Vitae id in et risus elit Sed enim Nunc ac adipiscing. Ut massa leo nec leo accumsan est justo enim Morbi lorem. Ante dolor ante tincidunt interdum Pellentesque consectetuer Curabitur In interdum nibh. Diam congue tellus enim magna adipiscing risus metus dignissim Nam justo. Laoreet platea ut.</p>
  64.              </div>
  65.  
  66.             <div id="centro">
  67.                     <h2>Centro variable</h2>
  68.                     <p class="monospace">Esta caja ocupa el espacio restante que dejan las columnas laterales. Si se oculta una de ellas, se expande para rellenar el espacio liberado por ella.</p>
  69.                     <p>Lorem ipsum dolor sit amet consectetuer velit semper elit volutpat mollis. Ligula Curabitur euismod at ut auctor porta enim vel neque consequat. Massa tempus libero dui ac elit platea tincidunt Vivamus Morbi ipsum. Dui mauris ac consectetuer id in congue sem Quisque dictumst metus. Hendrerit suscipit massa rhoncus risus Vestibulum vitae tortor cursus lorem Quisque. Sagittis Pellentesque interdum ipsum et ut dolor ipsum.</p>
  70.           <p>Cursus eget nulla libero fringilla tellus In elit et at felis. Vitae id in et risus elit Sed enim Nunc ac adipiscing. Ut massa leo nec leo accumsan est justo enim Morbi lorem. Ante dolor ante tincidunt interdum Pellentesque consectetuer Curabitur In interdum nibh. Diam congue tellus enim magna adipiscing risus metus dignissim Nam justo. Laoreet platea ut.</p>
  71.           <p>Felis ac mus Nam ante tortor Donec Aliquam nunc pulvinar pellentesque. Metus massa elit Fusce feugiat vel wisi enim neque Nulla est. Nulla Phasellus Lorem faucibus semper est vitae orci vel tristique nibh. Vitae tristique rhoncus felis Maecenas ligula dignissim justo ipsum orci orci. Velit id ante aliquam congue Nulla vitae gravida sapien elit sagittis. Mattis ac risus.</p>
  72.                 </div>
  73.  
  74.  
  75.         </div>
  76.  
  77.         <div id="footer">
  78.             <div class="content">
  79.                 <p>Este layout no es 100% elaboración propia. Siento no haber dejado constancia del original en el que está basado.</p>
  80.                 <p>Tanto la cabecera como el pie pueden ser suprimidos. No influyen en el comportamiento de la caja central.</p>
  81.             </div>
  82.         </div>
  83.  
  84. </body>
  85. </html>
Los detalles está puestos en la página.

Un saludo
__________________
Por una web con mucho estilo
+++ CUENTA ABANDONADA. ¿la quieres? +++

Última edición por kseso?; 14/09/2009 a las 08:15
  #7 (permalink)  
Antiguo 12/09/2009, 11:27
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 10 años, 9 meses
Puntos: 16
Respuesta: Imposible de hacer con CSS?

Gracias por los mensajes! lo pude solucionar usando el codigo de kseso.

Yo ponia los tags asi:

<div id="izquierdo">Izquierda</div>
<div id="contenido">Contenido</div>
<div id="derecho">Derecha</div>

Que me parece lo más razonable. Es el orden que estarian en una tabla y es el orden que uno lo ve en la página.

Pero no funcionaba de esta manera. En el codigo de kseso es asi:

<div id="izquierdo">Izquierda</div>
<div id="derecho">Derecha</div>
<div id="contenido">Contenido</div>

De esta manera "magicamente" anda bien!!! Gracias! :)

Pero eso me hace pensar...
Es una de esas cosas que tiene el CSS que para mi no tiene sentido. El tener que armar el HTML "al revez" porque los CSS te obliga a hacerlo asi. ¿Izquierda, derecha, centro? ¿tiene sentido?

Entonces yo me pregunto, ¿porque todo el mundo dice que no hay que usar tablas y en cambio hay que usar divs y css? dicen que es para poder cambiar el diseño solo cambiando los css, ¿no? En este caso vemos claramente que no es asi.!

Ademas, si los estilos por algun problema de internet no cargan uno veria un desastre la pagina web! Si estuviera hecho con tablas al menos se veria ordenado pero sin estilos.

¿Alguien más se hizo este cuestionamiendo respecto a los DIVs+CSS?

Gracias nuevamente por la ayuda!
Saludos!
__________________
Responder encuestas
  #8 (permalink)  
Antiguo 12/09/2009, 15:53
Avatar de alexk
Colaborador
 
Fecha de Ingreso: julio-2009
Ubicación: De vuelta al trono
Mensajes: 1.697
Antigüedad: 8 años, 5 meses
Puntos: 137
Respuesta: Imposible de hacer con CSS?

quebien mmm en primera... segun mi "estupida" manera de entender... lo veo inecesario...
si tenemos un sitio estatico... (HTML) tansolo le sobreescribimos los estilos... en "dicha seccion" y ya...
ok ahora tenemos un sitio dinamico (php) ok... una variable que de igual manera cambie los estilos...
o con JS lo que sea... no lo veo necesario... vamos en los sitios que eh implementado... no le eh visto necesidad... tampoco con objetos dinamicos... en ajax y otras tecnologias.

ahora en cuando al "orden" en este caso... si es necesario llevarlo asi... que como veras la "columna" del centro no tiene un tamaño y mucho menos esta flotada... y ocupa el "espacio vacio" que hay entre las 2 columnas, (una o ninguna, columna) bien flotadas...

pero como te digo con css puedes ordenar cualquier objeto donde quieras.... (visualmente)... pero bueno hay de gustos... cada quien hace las cosas como puede... y como quiere... pero hay que seguir los "estandares" para no tener problemas chao y suerte...

kseso? buena esa... ya la conocia... pero si no tenemos cuidado con los elementos flotados se puede colapsar el "centro"... tambien no podemos jugar con los width, margin y padding, ya que el "width" de "centro" siempre es el 100%... aunque lo visual sea lo justo y adaptable. una solucion seria agregar a "centro" un margin de izquierda y derecha relativo al ancho de estos, es decir, margin:0 300px; y listo ya podremos flotar y jugar con margin y padding de los elementos hijo de esta columna.... pero ya no sera ajustable si una de las columnas falta... y regresamos con el problema

Última edición por alexk; 12/09/2009 a las 15:59 Razón: edito no es "vemos" sino "vamos" jeje
  #9 (permalink)  
Antiguo 12/09/2009, 18:46
Colaborador
 
Fecha de Ingreso: junio-2007
Mensajes: 5.798
Antigüedad: 10 años, 6 meses
Puntos: 538
Respuesta: Imposible de hacer con CSS?

Quebien:
No hay magia. El flujo en el html y los estilos aplicados mediante css están diréctamente relacionado con las premisas iniciales (con el comportamiento inicial que dices tienen que tener las cajas centrales).
Primero tenemos una estructura de 3 columnas: vale, necesitamos flotar las cajas para que se posiciones en la misma línea. Podríamos haber puesto en el html: #izquierda - #centro - #derecha. Pero -->
La columna central debe crecer para ocupar el espacio libre en función de la ventana y de si existe o no alguna de las laterales: ok, ya no podemos darle un tamaño, porque si hiciésemos eso no variaría junto a la ventana. El no tener tamaño definido ocupa el espacio que le queda, lo que fuerza a colocarla en el flujo del html después de la caja derecha, si no lo hacemos así, ocurre lo que ya has descubierto ocupa toda la horizontal dejada libre por #izquierda y desplaza a #derecha a la línea siguiente (cuanto ella termine).
¿Por qué no se pueden utilizar márgenes en #centro? Porque como bien dices, Alexk, otra condición a cumplir era que ocupase el espacio que deje libre una de las laterales.
En este caso no hay peligro de colapso, pues si te fijas, hay definido un min-width de #contenedor (que contiene a las tres columnas centrales) fijado en 970px, con su equivalente para ie en el c.c.
Añadir que sería conveniente fijar un max-width para esa caja con vistas a las "super pantallas de cine en casa"

Quebien, si utilizas webdeveloper junto a FF puedes tú mismo desactivar el css y ver qué ocurre.

Pero un tirón de orejas deberíais haberme dado Hay un mal uso de cierta etiqueta.
Os dejo unas horas a ver si alguien lo descubre.

Un saludo.

P.D.: perdón por el rOOOOOOOllOOOOOOO que acabo de soltar.
__________________
Por una web con mucho estilo
+++ CUENTA ABANDONADA. ¿la quieres? +++
  #10 (permalink)  
Antiguo 12/09/2009, 20:23
Avatar de alexk
Colaborador
 
Fecha de Ingreso: julio-2009
Ubicación: De vuelta al trono
Mensajes: 1.697
Antigüedad: 8 años, 5 meses
Puntos: 137
Respuesta: Imposible de hacer con CSS?

tranki mientras mas letras mejor... si decimos "No, nose puede" o un "Si claro, intentalo" pues nos jod**mos todos es mejor decir los "porques"...

lo de tu etiqueta mal empleada psss no veo nada raro nose mucho de codigos jeje... solo me incomoda cierto "<br/>" pero nose...
  #11 (permalink)  
Antiguo 14/09/2009, 08:16
Colaborador
 
Fecha de Ingreso: junio-2007
Mensajes: 5.798
Antigüedad: 10 años, 6 meses
Puntos: 538
Respuesta: Imposible de hacer con CSS?

El error que he advertido es el uso de <h3> sin que haya ningún <h2> en el documento.
Corregido.
__________________
Por una web con mucho estilo
+++ CUENTA ABANDONADA. ¿la quieres? +++
  #12 (permalink)  
Antiguo 14/09/2009, 12:55
Avatar de alexk
Colaborador
 
Fecha de Ingreso: julio-2009
Ubicación: De vuelta al trono
Mensajes: 1.697
Antigüedad: 8 años, 5 meses
Puntos: 137
Respuesta: Imposible de hacer con CSS?

wow.... ni idea... jeje no sabia eso... gracias <br/>
chao
  #13 (permalink)  
Antiguo 17/09/2009, 18:58
 
Fecha de Ingreso: febrero-2007
Mensajes: 309
Antigüedad: 10 años, 9 meses
Puntos: 16
Respuesta: Imposible de hacer con CSS?

Lo pude solucionar!

Se puede omitir cualquier columna en el codigo HTML y el contenido se ajusta a la perfeccion.

Acá dejo el codigo por si le sirve a alguien:

Código HTML:
<html>
<head>
<style>
#contenedor{
	width: 760px;
}
#encabezado{
	height: 80px;
	background: #CCCCCC;
}
#contenido{
	overflow: hidden; /*esta la clave!*/
}
#col_izq{
	float: left;
	width: 150px;
	height: 400px;
	background: #dddddd;
}
#col_der{
	float: right;
	width: 150px;
	height: 400px;
	background: #dddddd;
}
#pie{
	clear: both;
	background: #dddddd;
}
</style>
</head>
<body>
	<div id=contenedor>
		<div id=encabezado>encabezado</div>
		<div id=col_izq>col izq</div>
		<div id=col_der>col der</div>
		<div id=contenido>contenido</div>
		
		<div id=pie>pie</div>
	</div>
</body>
</html> 
__________________
Responder encuestas
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 06:15.