Por curiosidad, considerando el ejemplo siguiente, ¿por qué tener el margen en el div #container hace que aparezca una barra de desplazamiento vertical en el navegador? El contenedor tiene una altura mucho más pequeña que la altura del cuerpo, que se establece al 100%.
He establecido el relleno y los márgenes en 0 para todos los elementos excepto el #container. Tenga en cuenta que he omitido deliberadamente el posicionamiento absoluto en el div #container. En este caso, ¿cómo calcula el navegador la altura del cuerpo y cómo lo afecta el margen?
<!DOCTYPE html>
<html>
<head>
<style type="text/css">
* { padding:0; margin:0;}
html, body { height:100%; }
#container
{
padding:10px;
margin:50px;
border:1px solid black;
width: 200px;
height: 100px;
}
</style>
</head>
<body>
<div id='container'>
</div>
</body>
</html>
Ejemplo también en JSFiddle
Respuestas:
Si pinta los fondos de
html
ybody
(dándole a cada uno su propio color) , notará rápidamente quebody
se desplaza hacia abajo junto con#container
, y#container
que no se desplaza en absoluto desde la parte superiorbody
. Este es un efecto secundario del colapso del margen , que cubro en detalle aquí (aunque esa respuesta describe una configuración ligeramente diferente).Es este comportamiento el que hace que aparezca la barra de desplazamiento, ya que ha declarado
body
tener el 100% de la altura dehtml
. Tenga en cuenta que la altura real debody
no se ve afectada, ya que los márgenes nunca se incluyen en los cálculos de altura.fuente
html
convierte en el 100% de la ventana gráfica (el área de visualización de un navegador), y una altura del 100% activada labody
convierte en el 100% de su principal, que eshtml
. Los porcentajes que siguen son siempre los de los antepasados de un elemento. Si no establece el 100% de altura enhtml
obody
entonces se comportan como cualquier otro elemento de bloque. Consulte w3.org/TR/CSS21/syndata.html#percentage-units para obtener más detalles. % sy ems eventualmente tendrán que convertirse a algún valor absoluto durante el renderizado, para que un navegador sepa exactamente qué tan grande o pequeño medir y renderizar cosas en la pantalla.html
y también sebody
comportan como cualquier otro elemento a nivel de bloque.Un poco tarde, pero quizás ayude a alguien.
Agregar
float: left;
a#container
elimina la barra de desplazamiento, como dice W3C:• Los márgenes entre una caja flotante y cualquier otra caja no se colapsan (ni siquiera entre un flotador y sus hijos de entrada).
fuente
Basado en la respuesta de @ BoltClock ♦, lo arreglé poniendo a cero el margen ...
así que
html,body, #st-full-pg { height: 100%; margin: 0; }
funciona donde el id "st-full-pg" se asigna a un div del panel (que además contenía el encabezado del panel y el cuerpo del panel)
fuente
agregar
float:left;
es bueno, pero interferirá con el posicionamiento horizontal central usandomargin:auto;
si sabe qué tan grande es su margen, puede tenerlo en cuenta en su porcentaje de altura usando calc:
height: calc(100% - 50px);
la compatibilidad con el navegador es buena, pero solo IE11 + https://caniuse.com/#feat=calc
fuente
html,body { height: 100%; margin: 0; overflow: hidden; }
Esto funcionó para mi
fuente
He encontrado una solución: agregar relleno: 1px 0; al cuerpo evita que aparezcan las barras de desplazamiento verticales
fuente
html, body { height: 100%; overflow: hidden; }
Si desea eliminar el desplazamiento del cuerpo, agregue el siguiente estilo:
body { height: 100%; overflow: hidden; }
fuente
overflow: hidden
y dejar el cuerpo solo solucionó eso. Tanto mi cuerpo como html tienenheight: 100%
.Vi este problema solucionado antes, donde pones todo el contenido de
body
en un div llamado wrap. El estilo de envoltura debe establecerse enposition: relative; min-height: 100%;
. Para colocar#container
div 50px desde la parte superior e izquierda, coloque un div dentro de la envoltura con un relleno establecido en 50px. Los márgenes no funcionarán con wrap y el div que acabamos de crear, pero funcionarán en#container
y todo lo que contiene.aquí está mi solución en jsfiddle .
fuente
Inspirado por @BoltClock, probé esto y funcionó, incluso cuando se aleja y se acerca.
Browser: Chrome 51
html{ height: 100%; } body{ height: 100%; margin: 0px; position: relative; top: -20px; }
Supongo que
body
se redujo 20px.fuente
/*removes default margin & padding*/ html, body{ padding: 0px !important; margin: 0px !important; } /*sets body height to max; and allows scrollbar as page content grows*/ body{ min-height: 100vh; }
fuente
Para aquellos que vienen aquí para obtener una respuesta más fácil de entender que incluso incluya ejemplos de código, esta respuesta (copiada de aquí ) es para usted.
No
100px
se requieren JavaScript ni valores de píxeles definidos (como ), solo CSS puro y porcentajes.Si su div está sentado solo,
height: 50%
significará el 50% de la altura del cuerpo. Normalmente, la altura del cuerpo es cero sin ningún contenido visible, por lo que el 50% de eso es solo, bueno, cero.Esta es la solución (basada en esto ) (descomente las
background
líneas para obtener una visualización del relleno):/* Makes <html> take up the full page without requiring content to stretch it to that height. */ html { height: 100%; /* background: green; */ } body { /* 100% the height of <html> minus 1 multiple of the total extra height from the padding of <html>. This prevents an unnecessary vertical scrollbar from appearing. */ height: calc(100% - 1em); /* background: blue; */ } /* In most cases it's better to use stylesheets instead of inline-CSS. */ div { width: 50%; height: 50%; background: red; }
<div></div>
Lo anterior se escribió para que todavía quedara el relleno habitual. También podemos establecer las dimensiones del rojo
div
a100%
dejar de ver relleno en cada lado / fin. Si no desea este relleno, use este (aunque no se ve bien, le recomiendo que se quede con el primer ejemplo):/* Makes <html> take up the full page without requiring content to stretch it to that height. */ html, body { height: 100%; } /* You can uncomment it but you wouldn't be able to see it anyway. */ /* html { background: green; } */ body { margin: 0; /* background: blue; */ } /* In most cases it's better to use stylesheets instead of inline-CSS */ div { width: 50%; height: 50%; background: red; }
<div></div>
fuente
Agregar
overflow: hidden;
a html y cuerpo.html, body { height: 100%; overflow: hidden; }
fuente
Encontré una solución rápida: intente establecer la altura en 99,99% en lugar de 100%
fuente