Quiero un diseño div de dos columnas, donde cada uno puede tener un ancho variable, por ejemplo
div {
float: left;
}
.second {
background: #ccc;
}
<div>Tree</div>
<div class="second">View</div>
Quiero que el div 'vista' se expanda a todo el ancho disponible después de que el div 'árbol' haya llenado el espacio necesario.
Actualmente, mi div "vista" cambia de tamaño al contenido que contiene. También será bueno si ambos div ocupan toda la altura.
Descargo de responsabilidad no duplicado:
- Expanda div al ancho máximo cuando float: left se establece porque allí el izquierdo tiene un ancho fijo.
- Ayuda con div: haga que div se ajuste al ancho restante porque necesito dos columnas alineadas a la izquierda
html
css
multiple-columns
Anurag Uniyal
fuente
fuente
overflow hidden
Respuestas:
La solución a esto es realmente muy fácil, pero en absoluto obvia. Debe activar algo llamado "contexto de formato de bloque" (BFC), que interactúa con los flotantes de una manera específica.
Solo toma ese segundo div, quita el flotador y dale en su
overflow:hidden
lugar. Cualquier valor de desbordamiento que no sea visible hace que el bloque en el que está configurado se convierta en un BFC. Los BFC no permiten que los flotadores descendientes escapen de ellos, ni permiten que los flotadores de hermanos / antepasados se entrometan en ellos. El efecto neto aquí es que el div flotante hará lo suyo, luego el segundo div será un bloque ordinario, ocupando todo el ancho disponible, excepto el ocupado por el flotador .Esto debería funcionar en todos los navegadores actuales, aunque es posible que deba activar hasLayout en IE6 y 7. No puedo recordarlo.
Población:
fuente
Acabo de descubrir la magia de las cajas flexibles (display: flex). Prueba esto:
Las cajas flexibles me dan el control que deseé que css tuviera durante 15 años. ¡Finalmente está aquí! Más información: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
fuente
flex-grow: 100;
lugar deflex-grow: 1;
?flex-grow:10
y luego establecer #b paraflex-grow: 90
que #a sería el 10% del ancho de la línea y #b sería el 90% del ancho de la línea. Si ningún otro elemento tiene un estilo de ancho flexible, técnicamente no importa lo que pones.Solución Flexbox
Para eso es la
flex-grow
propiedad.Nota: Agregue prefijos de proveedores flexibles si así lo requieren sus navegadores compatibles .
fuente
Este sería un buen ejemplo de algo que es trivial hacer con tablas y difícil (si no imposible, al menos en un sentido de navegador cruzado) de CSS.
Si ambas columnas fueran de ancho fijo, esto sería fácil.
Si una de las columnas tuviera un ancho fijo, esto sería un poco más difícil pero completamente factible.
Con el ancho variable de ambas columnas, en mi humilde opinión, solo necesita usar una tabla de dos columnas.
fuente
display:none;
mientras hago el máximo posible de respuesta al 100% en una escala móvil, a veces es mejor cambiar su diseño por completo para un dispositivo móvil haciendo uso de la sensación de la pantalla táctil y estilo de botones.Mira esta solución
fuente
Uso
calc
:El problema con esto es que todos los anchos deben definirse explícitamente, ya sea como un valor (px y em funcionan bien) o como un porcentaje de algo definido explícitamente.
fuente
Aquí, esto podría ayudar ...
fuente
<div class="clear" style="clear: both; height: 1px; overflow: hidden; font-size:0pt; margin-top: -1px;"></div>
No entiendo por qué las personas están dispuestas a trabajar tan duro para encontrar una solución de CSS puro para diseños de columnas simples que sean tan FÁCILES utilizando la
TABLE
etiqueta anterior.Todos los navegadores todavía tienen la lógica de diseño de la tabla ... Llámame un dinosaurio tal vez, pero digo que te ayude.
Mucho menos arriesgado en términos de compatibilidad entre navegadores también.
fuente
media-queries
colocar ambas columnas una encima de la otra en dispositivos pequeños, es imposible con latable
etiqueta anterior. Para que esto funcione, debe aplicarCSS
estilos de tabla. Por lo tanto, hoy en día es mejor resolver estoCSS
si desea un diseño receptivo para cualquier tamaño de pantalla.Si el ancho de la otra columna es fijo, ¿qué tal si la
calc
función CSS funciona para todos los navegadores comunes ?De esta forma, se calculará el ancho de la segunda fila (es decir, el ancho restante) y se aplicará de manera receptiva.
fuente
css-grid
. También funciona con loposition: fixed
que hace que sea una elección perfecta. ¡Gracias!fuente
Puedes probar CSS Grid Layout .
fuente
flex-grow: define la capacidad de un elemento flexible de crecer si es necesario. Acepta un valor sin unidades que sirve como proporción. Dicta qué cantidad de espacio disponible dentro del contenedor flexible debe ocupar el artículo.
Si todos los artículos tienen un sistema de crecimiento flexible en 1, el espacio restante en el contenedor se distribuirá por igual a todos los niños. Si uno de los niños tiene un valor de 2, el espacio restante ocuparía el doble de espacio que los demás (o al menos lo intentará). Ver más aquí
fuente
Una implementación ligeramente diferente,
Dos paneles div (contenido + extra), uno al lado del otro, se
content panel
expanden siextra panel
no está presente.jsfiddle: http://jsfiddle.net/qLTMf/1722/
fuente
Pat - Tienes razón. Es por eso que esta solución satisfaría tanto a los "dinosaurios" como a los contemporáneos. :)
fuente
Puede usar la biblioteca CSS de W3 que contiene una clase llamada
rest
que hace exactamente eso:No olvides vincular la biblioteca CSS en la página
header
:Aquí está la demostración oficial: W3 School Tryit Editor
fuente
No estoy seguro de si esta es la respuesta que espera, pero ¿por qué no establece el ancho de Tree en 'auto' y el ancho de 'View' al 100%?
fuente
Eche un vistazo a los marcos de diseño CSS disponibles. Recomendaría Simpl o, el marco Blueprint un poco más complejo.
Si está utilizando Simpl (que implica importar solo un archivo simpl.css ), puede hacer esto:
, para un diseño de 50-50, o:
, para un 25-75.
Es así de simple.
fuente
¡Gracias por el enchufe de Simpl.css!
recuerda envolver todas tus columnas de esta
ColumnWrapper
manera.Estoy a punto de lanzar la versión 1.0 de Simpl.css, ¡así que ayúdenme a correr la voz!
fuente
Escribí una función de JavaScript que llamo desde jQuery $ (document) .ready (). Esto analizará todos los elementos secundarios del elemento primario principal y solo actualizará el elemento secundario más adecuado.
html
javascript
fuente
Esto es bastante fácil usando flexbox. Vea el fragmento a continuación. Agregué un contenedor contenedor para controlar el flujo y establecer una altura global. También se han agregado bordes para identificar los elementos. Tenga en cuenta que los divs ahora también se expanden a la altura completa, según sea necesario. Los prefijos de proveedor deben usarse para flexbox en un escenario del mundo real, ya que aún no es totalmente compatible.
Desarrollé una herramienta gratuita para comprender y diseñar diseños usando flexbox. Compruébalo aquí: http://algid.com/Flex-Designer
fuente
stretch
porque es el valor predeterminado y no es necesario hacer que el elemento secundario sea flexible, por lo quedisplay:flex
es inútil para los elementos internosSi ambos anchos son de longitud variable, ¿por qué no calcula el ancho con algunas secuencias de comandos o del lado del servidor?
<div style="width: <=% getTreeWidth() %>">Tree</div>
fuente