¿Cómo puedo hacer que un div llene el ancho restante?
<div id="Main" style="width: 500px;">
<div id="div1" style="width: 100px;"></div>
<div id="div2"></div>
<div id="div3" style="width: 100px; float: right;"></div>
</div>
¿Cómo puedo div2
llenar el resto?
Respuestas:
Prueba algo como esto:
<style> #divMain { width: 500px; } #left-div { width: 100px; float: left; background-color: #fcc; } #middle-div { margin-left: 100px; margin-right: 100px; background-color: #cfc; } #right-div { width: 100px; float: right; background-color: #ccf; } </style> <div id="divMain"> <div id="left-div"> left div </div> <div id="right-div"> right div </div> <div id="middle-div"> middle div<br />bit taller </div> </div>
divs naturalmente ocupará el 100% del ancho de su contenedor, no es necesario establecer explícitamente este ancho. Al agregar un margen izquierdo / derecho igual que los dos divs laterales, su propio contenido se ve obligado a sentarse entre ellos.
Tenga en cuenta que el "div del medio" va después del "div derecho" en el HTML
fuente
Solución actualizada (octubre de 2014): lista para diseños fluidos
Introducción:
Esta solución es incluso más sencilla que la proporcionada por
Leigh
. En realidad, se basa en él.Aquí puede observar que el elemento intermedio (en nuestro caso, con
"content__middle"
clase) no tiene ninguna propiedad dimensional especificada, ni ancho, ni relleno, ni propiedad relacionada con el margen en absoluto, sino solo unaoverflow: auto;
(ver nota 1).La gran ventaja es que ahora puede especificar un
max-width
y unmin-width
a sus elementos izquierdo y derecho . Lo cual es fantástico para los diseños de fluidos .. por lo tanto sensible diseño :-)nota 1: versus la respuesta de Leigh, donde necesita agregar las propiedades
margin-left
&margin-right
a la"content__middle"
clase.Código con diseño no fluido:
Aquí los elementos izquierdo y derecho (con clases
"content__left"
y"content__right"
) tienen un ancho fijo (en píxeles): por eso se llama diseño no fluido.Demostración en vivo en http://jsbin.com/qukocefudusu/1/edit?html,css,output
<style> /* * [1] & [3] "floats" makes the 2 divs align themselves respectively right & left * [2] "overflow: auto;" makes this div take the remaining width */ .content { width: 100%; } .content__left { width: 100px; float: left; /* [1] */ background-color: #fcc; } .content__middle { background-color: #cfc; overflow: auto; /* [2] */ } .content__right { width: 100px; float: right; /* [3] */ background-color: #ccf; } </style> <div class="content"> <div class="content__left"> left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/> </div> <div class="content__right"> right div<br/>right div<br/>right div<br/>right div<br/> </div> <div class="content__middle"> middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller </div> </div>
Código con diseño fluido:
Aquí los elementos izquierdo y derecho (con clases
"content__left"
y"content__right"
) tienen un ancho variable (en porcentajes) pero también un ancho mínimo y máximo: por eso se llama diseño fluido.Demostración en vivo en un diseño fluido con las
max-width
propiedades http://jsbin.com/runahoremuwu/1/edit?html,css,output<style> /* * [1] & [3] "floats" makes the 2 divs align themselves respectively right & left * [2] "overflow: auto;" makes this div take the remaining width */ .content { width: 100%; } .content__left { width: 20%; max-width: 170px; min-width: 40px; float: left; /* [1] */ background-color: #fcc; } .content__middle { background-color: #cfc; overflow: auto; /* [2] */ } .content__right { width: 20%; max-width: 250px; min-width: 80px; float: right; /* [3] */ background-color: #ccf; } </style> <div class="content"> <div class="content__left"> max-width of 170px & min-width of 40px<br />left div<br/>left div<br/>left div<br/>left div<br/>left div<br/>left div<br/> </div> <div class="content__right"> max-width of 250px & min-width of 80px<br />right div<br/>right div<br/>right div<br/>right div<br/> </div> <div class="content__middle"> middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br/>middle div<br />bit taller </div> </div>
Soporte del navegador
Probado en BrowserStack.com en los siguientes navegadores web:
fuente
overflow
crea un contexto de formato de bloque? tendríadisplay: flex
el mismo efecto?overflow-y: hidden
ya que a) se permitió establecer el ancho, b) tiene la mejor compatibilidad con el navegador yc) no era una tablaLas cajas flexibles son la solución y son fantásticas. He querido algo como esto de CSS durante una década. Todo lo que necesita es agregar
display: flex
a su estilo para "Principal" yflex-grow: 100
(donde 100 es arbitrario, no es importante que sea exactamente 100). Intente agregar este estilo (colores agregados para hacer visible el efecto):<style> #Main { background-color: lightgray; display: flex; } #div1 { border: 1px solid green; height: 50px; display: inline-flex; } #div2 { border: 1px solid blue; height: 50px; display: inline-flex; flex-grow: 100; } #div3 { border: 1px solid orange; height: 50px; display: inline-flex; } </style>
Más información sobre cajas flexibles aquí: https://css-tricks.com/snippets/css/a-guide-to-flexbox/
fuente
Utilice la propiedad CSS Flexbox
flex-grow
para lograr esto..main { display: flex; } .col-1, .col-3 { width: 100px; } .col-2 { flex-grow: 1; }
<div class="main"> <div class="col-1" style="background: #fc9;">Left column</div> <div class="col-2" style="background: #eee;">Middle column</div> <div class="col-3" style="background: #fc9;">Right column</div> </div>
fuente
Aunque
bit
tardó en publicar una respuesta, aquí hay un enfoque alternativo sin usar márgenes.<style> #divMain { width: 500px; } #div1 { width: 100px; float: left; background-color: #fcc; } #div2 { overflow:hidden; background-color: #cfc; } #div3 { width: 100px; float: right; background-color: #ccf; } </style> <div id="divMain"> <div id="div1"> div 1 </div> <div id="div3"> div 3 </div> <div id="div2"> div 2<br />bit taller </div> </div>
Este método funciona como magia, pero aquí hay una explicación:) \
Juega con una muestra similar aquí.
fuente
El Div que tiene que tomar el espacio restante tiene que ser una clase. Los otros divs pueden ser id (s) pero deben tener ancho
CSS :
#main_center { width:1000px; height:100px; padding:0px 0px; margin:0px auto; display:block; } #left { width:200px; height:100px; padding:0px 0px; margin:0px auto; background:#c6f5c6; float:left; } .right { height:100px; padding:0px 0px; margin:0px auto; overflow:hidden; background:#000fff; } .clear { clear:both; }
HTML :
<body> <div id="main_center"> <div id="left"></div> <div class="right"></div> <div class="clear"></div> </div> </body>
El siguiente enlace tiene el código en acción, que debería resolver el problema de cobertura del área restante.
jsFiddle
fuente
Estaba buscando una solución al problema opuesto en el que necesitaba un div de ancho fijo en el centro y un div de ancho fluido en cada lado, así que se me ocurrió lo siguiente y pensé en publicarlo aquí en caso de que alguien lo necesite.
#wrapper { clear: both; width: 100%; } #wrapper div { display: inline-block; height: 500px; } #center { background-color: green; margin: 0 auto; overflow: auto; width: 500px; } #left { float: left; } #right { float: right; } .fluid { background-color: yellow; width: calc(50% - 250px); }
<div id="wrapper"> <div id="center"> This is fixed width in the centre </div> <div id="left" class="fluid"> This is fluid width on the left </div> <div id="right" class="fluid"> This is fluid width on the right </div> </div>
Si cambia el ancho del
#center
elemento, debe actualizar la propiedad de ancho de.fluid
a:width: calc(50% - [half of center width]px);
fuente