Tengo un pequeño problema peculiar que actualmente resuelvo usando a table
, ver más abajo. Básicamente, quiero que dos divs ocupen el 100% del ancho disponible, pero solo ocupen tanto espacio vertical como sea necesario (lo que no es tan obvio en la imagen). Los dos deben tener en todo momento exactamente la misma altura con una pequeña línea entre ellos, como se muestra.
(fuente: pici.se )
Todo esto es muy fácil de usar table
, lo que estoy haciendo actualmente. Sin embargo, no estoy muy interesado en la solución, ya que semánticamente no se trata de una tabla.
html
css
html-table
Deniz Dogan
fuente
fuente
Respuestas:
Puede obtener columnas de igual altura en CSS aplicando un relleno inferior de una gran cantidad, un margen negativo inferior de la misma cantidad y rodeando las columnas con un div que tiene un desbordamiento oculto. Centrar verticalmente el texto es un poco más complicado, pero esto debería ayudarte en el camino.
Creo que vale la pena mencionar que
la respuesta anterior de streetpc tiene un html no válido, el tipo de documento es XHTML y hay comillas simples alrededor de los atributos. También vale la pena señalar queno necesita un elemento adicional conclear
el fin de limpiar los flotadores internos del contenedor. Si usa overflow hidden, esto borra los flotantes en todos los navegadores que no son de IE y luego simplemente agregando algo para dar hasLayout como ancho o zoom: 1 hará que IE borre sus flotantes internos.He probado esto en todos los navegadores modernos FF3 + Opera9 + Chrome Safari 3+ e IE6 / 7/8. Puede parecer un truco feo pero funciona bien y lo uso mucho en producción.
Espero que esto ayude.
fuente
Es el año 2012 + n, por lo que si ya no le importa IE6 / 7
display:table
,display:table-row
ydisplay:table-cell
trabaja en todos los navegadores modernos:http://www.456bereastreet.com/archive/200405/equal_height_boxes_with_css/
Actualización 2016-06-17: Si crees que ha llegado el momento
display:flex
, echa un vistazo a Flexbox Froggy .fuente
display: flex
?Deberías usar flexbox para lograr esto. No es compatible con IE8 e IE9 y solo con el prefijo -ms en IE10, pero todos los demás navegadores lo admiten. Para los prefijos de proveedores, también debe usar autoprefixer .
fuente
puedes hacer que esto funcione con js:
fuente
Este es un problema clásico en CSS. Realmente no hay una solución para esto.
Este artículo de A List Apart es una buena lectura sobre este problema. Utiliza una técnica llamada "columnas falsas", basada en tener una imagen de fondo en mosaico vertical en el elemento que contiene las columnas que crea la ilusión de columnas de igual longitud. Dado que está en la envoltura de los elementos flotantes, es tan largo como el elemento más largo.
Los editores de A List Apart tienen esta nota en el artículo:
La técnica requiere diseños de ancho completamente estáticos que no funcionan bien con los diseños líquidos y las técnicas de diseño receptivo que son populares hoy en día para los sitios multidispositivo. Sin embargo, para sitios de ancho estático, es una opción confiable.
fuente
Tuve un problema similar y, en mi opinión, la mejor opción es usar solo un poco de javascript o jquery.
Puede conseguir que los divs deseados tengan la misma altura obteniendo el valor div más alto y aplicando ese valor a todos los demás divs. Si tiene muchos divs y muchas soluciones, sugiero escribir un pequeño código js avanzado para averiguar cuál de todos los divs es el más alto y luego usar su valor.
Con jquery y 2 divs es muy simple, aquí hay un código de ejemplo:
$('.smaller-div').css('height',$('.higher-div').css('height'));
Y para el final, hay una última cosa. ¡Su relleno (superior e inferior) debe ser el mismo! Si uno tiene un relleno más grande, debe eliminar la diferencia de relleno.
fuente
Hasta donde yo sé, no puede hacer esto usando implementaciones actuales de CSS. Para hacer dos columnas, de igual altura, necesita JS.
fuente
Esto me funciona en IE 7, FF 3.5, Chrome 3b, Safari 4 (Windows).
También funciona en IE 6 si descomenta el div más claro en la parte inferior. Editar : como dijo Natalie Downe, simplemente puede agregar
width: 100%;
en su#container
lugar.No conozco una forma CSS de centrar verticalmente el texto en el div correcto si el div no tiene una altura fija. Si es así, puede establecer el
line-height
mismo valor que la altura del div y poner un div interno que contenga su texto condisplay: inline; line-height: 110%
.fuente
Con Javascript, puede hacer que las dos etiquetas div tengan la misma altura. El div más pequeño se ajustará para tener la misma altura que la etiqueta div más alta usando el código que se muestra a continuación:
Con "izquierda" y "derecha" siendo las identificaciones de las etiquetas div.
fuente
Al usar la propiedad css -> display: table-cell
fuente
Usando JS, use
data-same-height="group_name"
en todos los elementos que desee que tengan la misma altura .El ejemplo: https://jsfiddle.net/eoom2b82/
El código:
fuente
Necesitaba hacer algo similar, aquí está mi implementación. Para recapitular el propósito, es tener 2 elementos que ocupen el ancho de un contenedor principal dado, y que la altura solo sea tan alta como sea necesario. Básicamente, la altura es igual a la altura máxima de la mayor cantidad de contenido, pero el otro contenedor está al ras.
html
css
fuente
Hace varios años, la
float
propiedad solía resolver ese problema con eltable
enfoque usandodisplay: table;
ydisplay: table-row;
ydisplay: table-cell;
.Pero ahora con la propiedad flex, puedes resolverlo con 3 líneas de código:
display: flex;
yflex-wrap: wrap;
yflex: 1 0 50%;
1 0 50%
son losflex
valores que le dimos a:flex-grow flex-shrink flex-basis
respectivamente. Es un atajo relativamente nuevo en flexbox para evitar escribirlos individualmente. Espero que esto ayude a alguienfuente