2011-08-13 27 views
20

Tengo una página con un ancho de contenedor del 100%, por lo que es todo el ancho de la pantalla, tengo varios DIV en una estructura de cuadrícula, todos tienen flotante: izquierda en ellos y sin ancho fijo, solo un margen de 10px.Justificar divs con CSS para llenar el ancho del contenedor principal

Hay un método, usando CSS o jQuery, para que los divs llenen todo el ancho y se justifiquen para ajustarse a los espacios, por lo que el margen cambia dependiendo del tamaño de la pantalla.

+0

Es decir que los divs actualmente no tienen un ancho fijo, pero tener un margen establecido. ¿Tu intención es hacer que los divs tengan un ancho fijo y que el espacio entre ellos sea fluido? – shanethehat

+0

Sí, esto es exactamente lo que me gustaría – benhowdle89

Respuesta

28

Salida respuesta de thirtydot en este tema por una solución CSS/HTML puro sin JavaScript que funciona en todos los navegadores incluyendo IE 6.

Fluid width with equally spaced DIVs

http://jsfiddle.net/thirtydot/EDp8R/

HTML:

<div id="container"> 
    <div class="box1"></div> 
    <div class="box2"></div> 
    <div class="box3"></div> 
    <div class="box4"></div> 
    <span class="stretch"></span> 
</div>​ 

CSS:

#container { 
    border: 2px dashed #444; 
    height: 125px; 

    text-align: justify; 
    -ms-text-justify: distribute-all-lines; 
    text-justify: distribute-all-lines; 

    /* just for demo */ 
    min-width: 612px; 
} 

.box1, .box2, .box3, .box4 { 
    width: 150px; 
    height: 125px; 
    vertical-align: top; 
    display: inline-block; 
    *display: inline; 
    zoom: 1 
} 
.stretch { 
    width: 100%; 
    display: inline-block; 
    font-size: 0; 
    line-height: 0 
} 

.box1, .box3 { 
    background: #ccc 
} 
.box2, .box4 { 
    background: #0ff 
} 

+1

Genial, excepto IE6. – Webars

+9

Lo bueno IE6 ya está disponible :) –

+4

Lo mejor de IE7 también está disponible ahora: D – Ergec

2

Puede hacer esto con CSS si especifica todas las dimensiones en porcentajes (es decir, ancho, margen, relleno).

O si quieres un margen o material de relleno específico, puede utilizar jQuery

$(window).resize(function() { 
    var $columns = $('.column'), 
     numberOfColumns = $columns.length,    
     marginAndPadding = 0, 
     newColumnWidth = ($('#container').width()/numberOfColumns) - marginAndPadding, 
     newColumnWidthString = newColumnWidth.toString() + "px"; 

    $columns.css('width', newColumnWidthString); 
}).resize(); 
9

El uso de CSS3 ahora es muy fácil.

ACTUALIZACIÓN

Añadido soporte MS IE (creen en ella o no ...). No estoy muy seguro sobre las cosas de FF porque Mozilla cambió algo. No tengo tanto tiempo. Así que si alguien podría tal vez me corrija ...

ACTUALIZACIÓN II

código Trasladado a snippet

.container { 
 
    border: 1px solid black; 
 
    display: -webkit-box; 
 
    -webkit-box-pack: justify; 
 
    -webkit-box-align: center; 
 
    display: -moz-box; 
 
    -moz-box-pack: justify; 
 
    -moz-box-align: center; 
 
    display: -ms-flexbox; 
 
    -ms-flex-pack: justify; 
 
    -ms-flex-align: center; 
 
    display: box; 
 
    box-pack: justify; 
 
    box-align: center; 
 
} 
 
.child { 
 
    background-color: red; 
 
}
<div class="container"> 
 
    <div class="child"> 
 
    Some Content 
 
    </div> 
 
    <div class="child"> 
 
    Some Content 
 
    </div> 
 
    <div class="child"> 
 
    Some Content 
 
    </div> 
 
</div>

+2

considera en su lugar: usando 'space-between' (http://css-tricks.com/snippets/css/a-guide-to-flexbox/) que es un poco más estable (en relación con la estabilidad de flexbox como un todo) – kurttheviking

Cuestiones relacionadas