2012-04-19 12 views
12

Tengo un <div id="content"> que contiene <div id="sub-navigation> y <div id="main container">, que son bloques en línea. Me gustaría poder hacer que el main container llene el resto del ancho de página disponible. ¿Es eso posible?¿Es posible que el elemento de bloque en línea llene automáticamente el ancho disponible?

Palge Layout

necesito columns-strip para ampliar o reducir en función del número y la anchura de column elementos. Si el ancho del columns-strip excede el ancho del main container, debe aparecer una barra de desplazamiento horizontal.

CSS:

* { 
    margin: 0px; 
    padding: 0px; 
    font-size: 10pt; 
    white-space: normal; 
} 

#wrapper { 
    margin: 0px 20px; 
    background-color: red; 
} 

#header { 
    margin: 25px 10px 10px 10px; 
    height: 50px; 
    background-color: purple; 
    color: white; 
} 

#content { 
    margin: 10px; 
    padding: 10px; 
    font-size: 0pt; 
    white-space: nowrap; 
    overflow: hidden; 
    background-color: white; 
} 

#sub-navigation { 
    width: 200px; 
    height: 150px; 
    display: inline-block; 
    vertical-align: top; 
    background-color: forestgreen; 
    color: white; 
} 

#main-container { 
    padding: 10px; 
    display: inline-block; 
    overflow: auto; 
    background-color: yellow; 
} 

#columns-strip { 
    padding: 10px; 
    font-size: 0pt; 
    white-space: nowrap; 
    background-color: mediumturquoise; 
} 

.posts-column { 
    margin: 0px; 
    width: 200px; 
    height: 200px; 
    display: inline-block; 
    vertical-align: top; 
    overflow: auto; 
} 

#footer { 
    margin: 10px 10px 25px 10px; 
    height: 50px; 
    background-color: navy; 
} 

HTML:

<div id="wrapper"> 
    <div id="header"></div> 
    <div id="content">  
    <div id="sub-navigation"></div>  
    <div id="main-container"> 
     <div id="columns-strip">  
     <div class="posts-column" style="background-color: lightgray;"></div> 
     <div class="posts-column" style="background-color: darkgray;"></div> 
     <div class="posts-column" style="background-color: gray;"></div> 
     </div> 
    </div> 
    </div> 
    <div id="footer"></div> 
</div> 
+1

No con 'inline-block' y sin JavaScript, no. – Phrogz

+0

Entonces, tengo que hacer flotar el 'sub-navigation' y' main-container'? – Boris

+0

Como comentario adicional, es posible que desee replantearse el uso de 'points' para' font-size'. – steveax

Respuesta

8

Tienes que eliminar los estilos inline-block y flotar el #sub-navigation div. inline-block no es adecuado para lo que está tratando de lograr. Cuando no agrega estilos de visualización, el elemento div será el valor predeterminado que es block, los elementos block ocupan todo el espacio disponible de forma predeterminada. Al flotar el elemento #sub-navigation, lo hace ocupar el espacio requerido para su contenido.

#sub-navigation { 
    width: 200px; 
    height: 150px; 
    float : left; 
    vertical-align: top; 
    background-color: forestgreen; 
    color: white; 
} 

#main-container { 
    padding: 10px;   
    overflow: auto; 
    background-color: yellow; 
} 

asegúrese de agregar un elemento clear: left después de la #main-container

+0

El único problema con esto es que si el contenido principal no tiene definición como div será 100%, lo que significa que se insertará debajo de la navegación secundaria. – Lazerblade

+0

@Lazerblade: ¿qué quiere decir con 'definition as a div'? el 'div' solo se mostrará debajo del' # subnavegación' si su contenido no permite que se muestre al lado (por ejemplo, si especifica ancho, inserta imágenes grandes o una URL ridícula) –

+0

Produzca un violín donde el contenedor principal se encuentra junto al div de subnavegación sin especificar el ancho para el contenedor principal, pero donde el contenedor principal ocupa el ancho del contenedor no ocupado por la navegación secundaria, sin utilizar javacript. – Lazerblade

0

no es así como se supone inline-block s para ser utilizado. Lo mejor que puede hacer aquí es hacer su cuadro de navegación float:left y dejar solo el valor predeterminado display.

0

Si su encabezado, pie de página y la envoltura tienen anchuras específicas, entonces sí, usted puede tener su principal recipiente a llenar el espacio disponible. Pero si no especifica anchos en su CSS, entonces necesita determinar qué tan grande puede ser su contenedor principal en función del ancho representado del elemento contenedor (contenedor). La única forma de determinar ese ancho después de cargar la página es con javascript. Si desea que su sitio tenga un ancho dinámico pero aún así su contenido (subnavegación y contenedor principal) llene la pantalla, necesitará usar javascript o porcentajes, y los porcentajes pueden ponerse desagradables cuando comience a buscar diferentes resoluciones de monitores, computadoras portátiles, etc ...

+0

De acuerdo. Quiero que el encabezado y el pie de página se extiendan al marco del navegador (menos el margen), la navegación secundaria es de ancho fijo, y el contenido es lo que queda entre el lado derecho de la navegación secundaria y el borde derecho del div rojo. Maldita sea, ¡necesito una carroza! – Boris

0

¿Has oído hablar de flex box model !!

Está hecho solo para eso.

Nota: en el modelo de flexbox, todos los elementos secundarios actúan como modelo de caja flexible, no puede optar por ciertas cosas. Lo que significa que si la página tiene navegación y debajo de ella, div div + side div. No puedes hacer una navegación superior fuera de él. Lo cual tiene implicaciones. Entonces la solución es tener todas las cosas solo que necesiten flex box en un div.

Cuestiones relacionadas