Tengo 2 divs: uno en el lado izquierdo y otro en el lado derecho de mi página. El que está en el lado izquierdo tiene un ancho fijo y quiero que el del lado derecho llene el espacio restante.
#search {
width: 160px;
height: 25px;
float: left;
background-color: #ffffff;
}
#navigation {
width: 780px;
float: left;
background-color: #A53030;
}
<div id="search">Text</div>
<div id="navigation">Navigation</div>
html
css
width
responsive
alexchenco
fuente
fuente
Respuestas:
Esto parece lograr lo que busca.
fuente
El problema que encontré con la respuesta de Boushley es que si la columna derecha es más larga que la izquierda, simplemente se ajustará a la izquierda y continuará llenando todo el espacio. Este no es el comportamiento que estaba buscando. Después de buscar a través de muchas 'soluciones', encontré un tutorial (ahora el enlace está muerto) sobre la creación de tres páginas de columna.
El autor ofrece tres formas diferentes, una de ancho fijo, una con tres columnas variables y otra con columnas externas fijas y una anchura media central. Mucho más elegante y efectivo que otros ejemplos que encontré. Mejoró significativamente mi comprensión del diseño CSS.
Básicamente, en el caso simple anterior, flota la primera columna a la izquierda y dale un ancho fijo. Luego dele a la columna de la derecha un margen izquierdo que sea un poco más ancho que la primera columna. Eso es. Hecho. Código de Ala Boushley:
Aquí hay una demostración en Stack Snippets & jsFiddle
Con el ejemplo de Boushley, la columna izquierda sostiene la otra columna a la derecha. Tan pronto como la columna izquierda termina, la derecha comienza a llenar todo el espacio nuevamente. Aquí la columna derecha simplemente se alinea más en la página y la columna izquierda ocupa su gran margen grueso. No se necesitan interacciones de flujo.
fuente
La solución proviene de la propiedad de visualización.
Básicamente necesitas hacer que los dos divs actúen como celdas de tabla. Entonces, en lugar de usar
float:left
, tendrá que usardisplay:table-cell
en ambos divs, y para el div de ancho dinámico también debe establecerlowidth:auto;
. Los dos div deben colocarse en un contenedor de 100% de ancho con ladisplay:table
propiedad.Aquí está el CSS:
Y el HTML:
IMPORTANTE: para Internet Explorer, debe especificar la propiedad flotante en el div de ancho dinámico, de lo contrario, el espacio no se rellenará.
Espero que esto resuelva tu problema. Si lo desea, puede leer el artículo completo que escribí sobre esto en mi blog .
fuente
En estos días, debe usar el
flexbox
método (puede adaptarse a todos los navegadores con un prefijo de navegador).Más información: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
fuente
Como esta es una pregunta bastante popular, me inclino a compartir una buena solución usando BFC.
Codepen muestra de lo siguiente aquí .
En este caso,
overflow: auto
desencadena el comportamiento del contexto y hace que el elemento correcto se expanda solo al ancho restante disponible y, naturalmente, se expandirá al ancho completo si.left
desaparece. Un truco muy útil y limpio para muchos diseños de UI, pero quizás difícil de entender al principio "por qué funciona".fuente
auto
puede desencadenar eso dependiendo de su contenido. También puede usar cualquier otro valor de desbordamiento para obtener el mismo efecto,hidden
puede funcionar mejor para su caso.Si no necesita compatibilidad con versiones anteriores de ciertos navegadores (IE
108 o menos, por ejemplo), puede usar lacalc()
función CSS:fuente
La respuesta de @ Boushley fue la más cercana, sin embargo, hay un problema no abordado que se ha señalado. El div derecho ocupa todo el ancho del navegador; El contenido toma el ancho esperado. Para ver mejor este problema:
http://jsfiddle.net/79hpS/
El contenido está en el lugar correcto (en Firefox), sin embargo, el ancho es incorrecto. Cuando los elementos secundarios comienzan a heredar el ancho (por ejemplo, la tabla con
width: 100%
) se les da un ancho igual al del navegador, lo que hace que se desborden a la derecha de la página y creen una barra de desplazamiento horizontal (en Firefox) o que no floten y se empujen hacia abajo ( en cromo).Puede solucionar esto fácilmente agregando
overflow: hidden
a la columna derecha. Esto le brinda el ancho correcto tanto para el contenido como para el div. Además, la tabla recibirá el ancho correcto y completará el ancho restante disponible.Probé algunas de las otras soluciones anteriores, no funcionaron completamente con ciertos casos extremos y fueron demasiado intrincados para justificar su reparación. Esto funciona y es simple.
Si hay algún problema o inquietud, no dude en plantearlos.
fuente
overflow: hidden
de hecho arregla esto, gracias. (La respuesta marcada es incorrecta, por cierto, ya que enright
realidad ocupa todo el espacio disponible en el padre, puede ver esto en todos los navegadores al inspeccionar elementos)overflow: hidden
coloca la columna derecha en su propio contexto de formato de bloque. Los elementos de bloque ocupan todo el espacio horizontal disponible para ellos. Ver: developer.mozilla.org/en-US/docs/Web/Guide/CSS/…overflow:xxx
atributo es la clave. Como dices, se detiene#right
de expandirse debajo#left
. Resuelve muy bien un problema que estaba teniendo usando jQuery UI redimensionable: con un#right
conjunto con un atributo de desbordamiento y#left
configurado como redimensionable, tiene un límite móvil simple. Ver jsfiddle.net/kmbro/khr77h0t .Aquí hay una pequeña solución para la solución aceptada, que evita que la columna derecha caiga debajo de la columna izquierda. Reemplazado
width: 100%;
conoverflow: hidden;
una solución difícil, si alguien no lo sabía.http://jsfiddle.net/MHeqG/2600/
[editar] Consulte también un ejemplo para el diseño de tres columnas: http://jsfiddle.net/MHeqG/3148/
fuente
Si está tratando de llenar el espacio restante en una caja flexible entre 2 elementos, agregue la siguiente clase a un div vacío entre los 2 que desea separar:
fuente
Utilizar
display:flex
fuente
La respuesta de Boushley parece ser la mejor manera de organizar esto mediante flotadores. Sin embargo, no está exento de problemas. La flotación anidada dentro del elemento expandido no estará disponible para usted; Romperá la página.
El método que se muestra básicamente "lo simula" cuando se trata del elemento en expansión: en realidad no está flotando, solo está jugando junto con los elementos flotantes de ancho fijo usando sus márgenes.
El problema es exactamente eso: el elemento desplegable no está flotando. Si intenta y tiene algún elemento flotante anidado dentro del elemento desplegable, esos elementos flotantes "anidados" no están realmente anidados; cuando intentas pegar
clear: both;
debajo de tus elementos flotantes "anidados", terminarás limpiando también los flotadores de nivel superior.Luego, para usar la solución de Boushley, me gustaría agregar que debe colocar un div como el siguiente: .fakeFloat {height: 100%; ancho: 100%; flotador izquierdo; } y coloque esto directamente dentro del div expandido; todos los contenidos del div expandido deberían ir dentro de este elemento fakeFloat.
Por esta razón, recomendaría usar tablas en este caso específico. Los elementos flotantes realmente no están diseñados para hacer la expansión que desea, mientras que la solución usando una tabla es trivial. En general, se argumenta que la flotación es más adecuada para los diseños, no para las tablas ... pero de todos modos no está usando la flotación, lo está fingiendo, y eso de alguna manera frustra el propósito del argumento estilístico para este caso específico, en mi humilde opinión.
fuente
overflow: hidden
. jsfiddle.net/dave2/a5jbpc85Probé las soluciones anteriores para un líquido a la izquierda, y un derecho fijo, pero ninguno funcionó (soy consciente de que la pregunta es a la inversa, pero creo que esto es relevante). Esto es lo que funcionó:
fuente
Tuve un problema similar y encontré la solución aquí: https://stackoverflow.com/a/16909141/3934886
La solución es para un div de centro fijo y columnas laterales líquidas.
Si desea una columna izquierda fija, simplemente cambie la fórmula en consecuencia.
fuente
Puede utilizar las propiedades de Grid CSS, es la forma más clara, limpia e intuitiva de estructurar sus cuadros.
fuente
Me pregunto que nadie usa
position: absolute
conposition: relative
Entonces, otra solución sería:
HTML
CSS
Jsfiddle ejemplo
fuente
/ * * css * /
/ * * html * /
fuente
¡Tengo una solución muy simple para esto! // HTML
// CSS
Enlace: http://jsfiddle.net/MHeqG/
fuente
Tuve un problema similar y se me ocurrió lo siguiente que funcionó bien
CSS:
HTML:
Este método no se ajustará cuando la ventana se reduzca, pero expandirá automáticamente el área de 'contenido'. Mantendrá un ancho estático para el menú del sitio (izquierda).
Y para la demostración de cuadro de contenido de expansión automática y cuadro vertical izquierdo (menú del sitio):
https://jsfiddle.net/tidan/332a6qte/
fuente
Trate de añadir posición
relative
, retirewidth
yfloat
propiedades del lado derecho, a continuación, añadirleft
yright
propiedad con0
valor.Además, puede agregar una
margin left
regla con el valor basado en el ancho del elemento izquierdo (+ algunos píxeles si necesita espacio intermedio) para mantener su posición.Este ejemplo me está funcionando:
fuente
Prueba esto. Funcionó para mi.
fuente
He estado trabajando en este problema durante dos días y tengo una solución que puede funcionar para usted y para cualquier otra persona que intente hacer un ancho fijo receptivo a la izquierda y que el lado derecho llene el resto de la pantalla sin envolver el lado izquierdo. Supongo que la intención es hacer que la página responda tanto en navegadores como en dispositivos móviles.
Aquí está el código
Aquí está mi violín que puede funcionar para usted como lo hizo para mí. https://jsfiddle.net/Larry_Robertson/62LLjapm/
fuente
Reglas para artículos y contenedores;
Utilice el espacio en blanco: nowrap; para textos en los últimos ítems por su desestructuración.
Artículo X% | Artículo Y% | Artículo Z%
¡Longitud total siempre = 100%!
Si
entonces
Artículo X = 70%
¡El elemento X es dominante (los primeros elementos son dominantes en el diseño CSS de la tabla)!
Prueba max-content; propiedad para div dentro para difundir div en contenedor:
}
fuente
La solución más fácil es usar margen. ¡Esto también responderá!
fuente
La solución más simple es hacer que el ancho del div izquierdo sea igual al 100%, el ancho del div derecho más cualquier margen entre ellos.
https://codepen.io/tamjk/pen/dybqKBN
fuente
Me encontré con este mismo problema tratando de diseñar algunos controles jqueryUI . Aunque la filosofía común ahora es "usar en
DIV
lugar deTABLE
", descubrí que en mi caso usar TABLE funcionó mucho mejor. En particular, si necesita tener una alineación directa dentro de los dos elementos (por ejemplo, centrado vertical, centrado horizontal, etc.), las opciones disponibles con TABLE proporcionan controles simples e intuitivos para esto.Aquí está mi solución:
fuente
<font>
,<b>
, etc. HTML evolucionada pasado que centrarse menos en la presentación.overflow
.display:table
para lograr la apariencia deseada de los datos no tabulares está limpio. Forzar datos no tabulares como columnas de página o controles de formulario en tablas HTML para controlar el diseño no está limpio.