2012-08-16 16 views
5

Si tengo el siguiente marcadoaltura y la anchura de los elementos HTML y corporales

<html> 
<body> 
<div id="wrapper"> 
<div id="container"> 
<p>Lots of pragraphs here</p> 
</div> 
</div> 
</body> 
</html> 

con los siguientes estilos

html, body, #wrapper 
{ 
width: 100%; 
height: 100%; 
} 
#container 
{ 
width: 960px; 
margin: 0 auto; 
} 

¿Por qué no los elementos HTML, el cuerpo y la envoltura se extienden a la altura del 100% del navegador/puerto de vista en FF13. El html, el cuerpo y la envoltura se detienen verticalmente a cierta distancia de la parte inferior cuando se mira en Firebug. El contenedor div se extiende a la altura completa ya que su altura está determinada por el contenido.

(1263px X 558px para html, cuerpo, envoltura) y (960 X 880px por contenedor)

Mirando defecto 100% lo anterior sucede como la primera imagen siguiente muestra. Pero cuando hago un acercamiento al último zoom poesible, lo anterior no ocurre ya que la segunda imagen a continuación muestra y el contenedor html, body, se extiende a la altura completa.

(4267px X 1860px para html, cuerpo, envoltura) - (960 X 1000px para contenedor)

enter image description here enter image description here

+1

'contenedor' y 'contenedor' no son elementos HTML válidos:/ –

+0

@BillyMoat: es un elemento div no un elemento contenedor.

Jawad

+0

@BillyMoat: ha cambiado porque era un error tipográfico. – Jawad

Respuesta

23

Su html realidad exactamente extiende a la altura del 100% de su ventana de visualización causa aquí es la ventana del navegador, no el contenido interior.

Considere esto (jsfiddle):

<div id="div1"> 
    <div id="div2"> 
     <div id="div3"> 
      very much content 
     </div> 
    </div> 
</div> 

#div1 { 
    height:300px; 
    overflow-y:scroll; 
    border: 1px solid black; 
} 
#div2 { 
    height:100%; 
} 
#div3 { 
    height:600px; 
} 

div1 aquí tiene la altura de 300px y se desplaza. Cuando desplazas el contenido, simplemente mueves el div interno pero la altura permanece intacta, es 300px. Exactamente lo mismo ocurre cuando establece height:100% en html. La altura de su navegador sigue siendo la misma.

Al alejar la ventana de visualización, no se ha desplazado, por lo que la altura del contenido interno es menor que la altura de la ventana gráfica.

Poco, html {height:100%} se refiere a la altura de los padres no a la altura del contenido interno


ACTUALIZACIÓN:

puede especificar 3 tipos de valores a la altura del bloque de elementos:

  • longitud - altura fija establecida (p. '200px', '50em'). Eso es todo, no puedo decir nada más sobre eso.

  • porcentaje - de W3C spec:

El porcentaje se calcula con respecto a la altura del bloque de contención de la caja generada. Si la altura del bloque que lo contiene no se especifica explícitamente (es decir, depende de la altura del contenido), y este elemento no está en absoluto posicionado, el valor se computa en 'auto'. Una altura de porcentaje en el elemento raíz es relativa al bloque contenedor inicial.

  • automático - La altura depende de los valores de otras propiedades. (Por lo general a lo grande de contenido interno: texto, otros elementos en línea, los elementos de bloque, etc.)

Lo que está ocurriendo cuando el navegador muestra la página:

  1. se pone height: 100% para <html>. Esto significa que la altura resultante se calcula con respecto a la altura del bloque que contiene la caja generada (html -el elemento en ese caso) que contiene (initial containing block, es decir, browser window en ese caso). Digamos 1024px.
  2. luego se necesita height: 100% para <body>. Fijará la altura de body en la altura ya calculada de html, es decir, 1024px.
  3. luego el navegador aplica height:auto al #wrapper y luego el #container y el <p>. No sé cómo funciona exactamente eso, pero puedo suponer que pospone la configuración de altura (y respectivamente todos los otros estilos que dependen de eso, por ejemplo, fondos, bordes, etc.) y procede al contenido interno.
  4. El siguiente punto es contenido de texto. El navegador toma propiedades relacionadas especificadas o propias, es decir default styles, como font-family, font-size y el alto del texto.
  5. después de eso, establecerá la altura en el elemento <p>, por lo que el <p> se estirará para contener todo el contenido (el texto en ese caso). Lo mismo ocurre con el #container y el #wrapper.

Si sucede que la altura de la #wrapper es mayor que uno del cuerpo (1024 px ya que estaban de acuerdo) que el overflow debe aplicarse a la body. Eso es visible que es el predeterminado. A continuación, se aplica overflow: visible al html. Luego, el navegador muestra desplazamiento para todo el window. Honestamente, no sé si esto está especificado por la especificación W3C, pero puedo suponer que sí.

De modo que cuando se desplaza por la ventana, se mueven html y body como todos los demás elementos. Este es el mismo comportamiento que es con cualesquiera otros elementos (como en jsFiddle he publicado anteriormente):

scrolled part of the body

Nota que el fondo se establece en el elemento de body, sino que se extiende a toda la canvas es decir, mucho más allá del elemento body en sí. Esto se dirige a su preocupación por la posible necesidad de establecer la propiedad bg en el cuerpo. Esto es 100% compatible con la W3C spec que establece (cortado):

documentos cuyo elemento raíz es un elemento ... "html" que se ha calculado los valores de 'transparente' para 'background-color' y ' none 'para' background-image ', los agentes de usuario deben usar el valor calculado de las propiedades de fondo del primer elemento ... elemento "cuerpo" de ese elemento al pintar fondos para el lienzo, y no deben pintar un fondo para ese elemento niño. Tales fondos también deben anclarse en el mismo punto en que estarían si se pintaran solo para el elemento raíz.

Cuando aleja la página, el navegador vuelve a calcular todas las dimensiones. Digamos que con cada Ctrl + -, la página de clic se reduce, por ejemplo, para 20%. Entonces todo su texto se reduce, porque su altura depende del tamaño de fuente, que se ve afectado por el Ctrl + - clic, respectivamente <p>, #container y #wrapper todos son reducidos porque su altura depende de la altura text. Pero body y html ambos tienen altura que depende de la altura window que no se ve afectada por el Ctrl + - clic. Es por eso que finalmente obtiene esto: zoomed out page

No hay diferencia aquí entre el comportamiento de ancho y alto en ese caso. No ve el mismo problema con la dimensión horizontal simplemente porque ha configurado width: 960px; para el #container que resultó ser menor que el ancho de la ventana del navegador, por lo que no se produce desbordamiento. Si el ancho de la #container se excede el ancho del cuerpo que se vería esto: same issue but with the width

Todo esto es un comportamiento normal y esperado, y no hay nada que resolver aquí.

+0

Entonces, cómo resolver esto. Si le doy un color de fondo al div # wrapper (div # 3 en su caso), el color de fondo (por ejemplo, rojo) solo se extiende a la misma altura de html y body (div # 1 y div # 2 en su caso) y esto hace que el color de fondo NO se extienda a la altura completa y cuando se aleja solo una parte es roja y en la parte inferior, una parte es blanca/transparente (color de html y cuerpo). – Jawad

+0

@Jawad, puede adjuntar un fondo a un contenedor de su contenido, por lo que se extenderá en consecuencia. También es posible que desee utilizar el llamado 'pie de página adhesivo', por lo que el pie de página estará en la parte inferior de la ventana si no hay suficiente contenido (como en su segunda imagen). Ver este http://stackoverflow.com/questions/11606856/background-repeat-with-html-body-height-to-100-with-css-sticky-footer/11606934#11606934 – user907860

+0

Sé todo sobre los pies de página adhesivos. Mira mi perfil. No estoy preguntando eso. Tampoco quiero que html {height: 100%} tenga una altura del contenido interno. No tiene nada que ver con el contenido interno (div # container en mi caso). Quiero que el envoltorio html, body y div # tenga una altura del 100% ya que tiene el ancho del 100%. Si se relaciona con la altura de los padres, el padre de div # wrapper es body y el padre de body es html y el padre de html es la ventana/viewpap del navegador. Dado un fondo en el contenedor (color rojo) y 100% de altura en html, Body & Div # wrapper causa este problema. – Jawad

1

porque nunca se puede ajustar la altura a 100% si el elemento es relativa a la ventana del navegador. La razón de esto es que debido al desplazamiento, la ventana del navegador podría ser infinitamente grande. Tendrá que establecer una altura fija, o simplemente tendrá que configurar la altura para expandir a lo que está dentro de ella.

Sin embargo, width: 100%; es perfectamente válido.

También necesitará utilizar etiquetas html válidas. Lo que yo haría es, en lugar de usar el contenedor < > y <contenedor>, hacer una clase en su CSS. Los nombres de clase se declaran al iniciarlos con un punto.

.container{ 
width: 100%; 
} 

<div class="container"></div> 

buena suerte,

-Brian

+0

entonces, ¿por qué funciona cuando se hace zoom? – Jawad

+0

Porque no tiene desplazamiento cuando se aleja, simplemente – user907860

+0

@caligula: Sí, es muy simple. Use @ para dar comentarios. – Jawad

Cuestiones relacionadas