Columnas con la misma altura mediante CSS

Columnas con la misma altura mediante CSS

altura-columnas-css

Siempre queremos que el diseño de nuestro sitio web tengamos una tendencia absoluta a la perfección, hay a veces que no es posible (no me refiero a la sintáxis del código fuente) y, por ejemplo, las columnas de contenido no quedan a la misma altura, quedando un diseño horrible.

Esto se puede arreglar con Javascript, pero, ¿y si el navegador no tiene activado Javascript?¿Tendré que recurrir a las tablas? ¡No, puedes aplicar CSS para solucionar este problema!

Explicaré a continuación como lograr que los divs tengan la misma altura aunque el contenido de una columna sea mayor que la otra haciendo que la columna con menos contenido aumente en forma paralela a la otra.

El código CSS sería así:

#container {
background-color: #fff;
overflow: hidden;
width: 780px;
margin: 10px auto 5px auto;
border: 1px solid #000;
}
#content {
background-color: #fff;
width: 580px;
border-right: 200px solid #0099FF; /* ancho y color del menú */
margin-right: -200px;
float: left;
}
#menu {
width: 200px;
float: left;
color: #fff;
background: #0099FF;
text-align: left;
}

Aplicamos ese código CSS a nuestro HTML, quedando así para poder conseguir las dos columnas:

<div id="container">
<div id="content">
<p>bla bla bla bla</p>
<p>bla bla bla bla</p>
</div>
<div id="menu">
bla bla bla bla
</div>
</div>

Desmenuzemos lo que hemos hecho:

Hemos aplicado un color específico al div #content además de tener un borde derecho de 200px y un margen derecho de -200px para que cuando insertemos el div #menu este se situe encima de el div #content y el borde finja ser una columna lateral derecha, con lo que al aumentar el tamaño del contenido el borde aumenta paralelamente su altura en relación al contenido así podremos añadir nuestro menú sin problemas para que se consigan ver a la misma altura. Esta solución es cross-browser (visualización correcta en todos los navegadores) y su código es válido.

Como siempre podemos ver un ejemplo de su funcionamiento.

Vía | CelulaWeb

Autor de CSSBlog ES
  • Hola Jesús, creo que puedo ayudarte. Viendo la demanda a cerca de este tema me decidí a publicar las soluciones que he usado yo para solucionar la construcción de colmunas CSS: http://www.elcssar.com/css/columnas-css
    Pruébala y me dices qué tal te ha ido. Y si tienes problemas puedes preguntar en el propio artículo. Te contestaré con gusto.
  • CSSBlog
    @Jesus por favor, las dudas técnicas pregúntalas en el foro de la comunidad: http://comunidad.cssblog.es

    Un saludo ;)
  • Jesus
    Disculpa, podrías porfavor darme un ejemplo (perdón pero no logro entender bien).

    Por ejemplo, si tengo 3 columnas y necesito que las columnas laterales midan 130pixeles de ancho y la central 650pixeles ¿como debo jugar con los bordes y márgenes? Espero puedas ayudarme, quiero entenderlo pero se me está complicando esto de poner todas las capas (columnas) con la misma altura. Pero te pregunto por los anchos porque le he estado moviendo y sigo sin entender.
  • CSSBlog
    @mari le añades otro div para contenido y listo.

    Un saludo.
  • mari
    Disculpen y como sería el código para tres columnas??
  • Óscar
    Bueno, la verdad es que estaba poniendo mi caso sin ponerme a probar. Ahora que lo he probado, puedo decir que funciona bien sea cual sea la columna de mayor longitud. Voy a probarlo en mi página a ver si va igual de bien. Muchas gracias.
  • Óscar
    Tengo un código HTML igual(conceptualmente) que el de tu ejemplo. Sólo que unas veces es el menu el más largo y otras veces el content. Tanto las entradas del menú como el content se generan mediante la información de unas tablas de la base de datos.
  • CSSBlog
    @Óscar podrías usar porcentajes en el tamaño, en vez de números fijos. No sé de que forma se genera tu código HTML, así que no puedo ayudarte en tu segunda pregunta.

    Un saludo.
  • Óscar
    Entonces, teniendo una disposición de capas como la del ejemplo, ¿no se puede conseguir el efecto usando CSS si no sabemos cuál de las capas es la más extensa? Y modificando el código HTML, ¿qué opciones habría?
  • CSSBlog
    @Óscar si no puedes tocar el código HTML, poca cosa se puede hacer.
  • Óscar
    Pues yo justamente estaba intentando resolver este problema. Pero hay una diferencia con el ejemplo, y es que el HTML se genera dinámicamente y no tengo forma de saber cuál es la columna que se quedará más corta. Además no puedo tocar el código HTML, sólo la CSS.
  • También viene muy bien usar una imagen como background en el container :)

    Este truco nunca lo había pensado, es bastante ingenioso, gracias :)
blog comments powered by Disqus

Sigue este blog por:

Patrocinadores

  • Últimos comentarios

    Patrocinadores


    Get Adobe Flash playerPlugin by wpburn.com wordpress themes