salga que otro funciona evitar elementos div dinamico contenido bloque baje alto ajustar css

css - otro - ¿Por qué overflow: hidden agrega altura adicional a un elemento de bloque en línea?



overflow css3 (3)

En este ejemplo ...

HTML

<body> <div> <div>foo bar</div> </div> </body>

CSS

body, html, div { height: 100%; margin: 0; } div div { display: inline-block; overflow: hidden; }

¿Por qué el overflow: hidden causa una barra de desplazamiento vertical? Además, ¿por qué esta altura no se atribuye a nada en la página? Es como un margen invisible.

La altura del 100% de todos los elementos es intencional. En teoría, eso debería hacer que la división más interna se expanda para cumplir con la ventana gráfica. ¡Y lo hace! ... mientras overflow: hidden no está ahí, ¿por qué?


Agregar overflow: hidden en el div padre no era una opción para mí, y también debido a la estructura de mi HTML no funcionaba.

Sin embargo, gracias al comentario de @Tony Gustafsson en el OP, noté que esto soluciona el problema:

div div { vertical-align: bottom; }


La altura adicional es la misma altura que la diferencia de altura entre vertical-align: baseline , y vertical-align: bottom . La "línea descendente". De ahí es de donde provienen los "5 píxeles extra" aparentemente aleatorios. Si el tamaño de la fuente es 10 veces más grande, esta brecha también será 10 veces más grande.

Además, parece que cuando el overflow: hidden no está allí, el elemento de inline-block tiene su línea de base como la misma línea de base de su última línea de texto.

Esto me lleva a creer que el overflow: hidden obliga a la línea base de todo el elemento del inline-block a estar en la parte inferior del elemento. Aunque no hay texto allí, el elemento primario del elemento de inline-block reserva espacio para la línea descendente. En el ejemplo dado en la pregunta, no se puede ver fácilmente ya que el elemento primario del elemento de inline-block tiene height: 100% . Entonces, en cambio, ese espacio adicional reservado para la línea descendente se desborda de ese div padre.

¿Por qué este espacio sigue ahí, aunque no haya texto? Creo que eso se debe a que el inline-block en línea crea un contexto de formato en línea, que es lo que causa este espacio. Si este elemento fuera un block , solo crearía este contexto de formato en línea una vez que encuentre un elemento o texto en línea.

Esto es solo una teoría, pero parece explicarlo. También explica por qué la respuesta de @Jonny Synthetic funciona: agregar desbordamiento: oculto para el padre oculta esa línea descendente adicional.

Gracias a @Hashem Qolami por los jsbins que me dieron esta teoría.


Los artículos con una altura del 100% deben tener desbordamiento: también ocultos . La primera regla de css solo apunta al div exterior, el desbordamiento oculto se aplica al div interior.

Jsfiddle con este CSS y funcionó bien:

body, html, div { height: 100%; margin: 0px; padding:0px; overflow: hidden; } div div { display: inline-block; overflow: hidden; }