2011-08-17 5 views
5

Consulte este jsfiddle por ejemplo: http://jsfiddle.net/FrJRA/1/ y tenga en cuenta que el borde del tramo interior se superpone con el div que lo contiene.¿Por qué el relleno de span hace que el cuadro de representación se superponga a su elemento primario?

Entiendo algo de lo que está pasando. Pero no entiendo por qué. ¿Por qué no se aumentó el tamaño del div para permitir la nueva altura del span?

Sé que puedo usar display: inline-block si deseo que esto suceda, pero ¿cuál es el razonamiento detrás de inline que no puede aumentar el tamaño del contenedor principal?

+0

su URL es un poco mal. Debería ser. http://jsfiddle.net/FrJRA/1 – scottheckel

+0

¡gracias! fijo. –

+0

"¿Por qué no se aumenta el tamaño del' div '? ¿Por qué debería? – BoltClock

Respuesta

7

Los elementos en línea solo cambian sus dimensiones para el relleno en las dimensiones izquierda/derecha. No aumenta la dimensión del elemento en las direcciones superior/inferior. Es por eso que nota que lo aumenta en los lados, pero no en la parte superior/inferior.

Actualización: Encontramos la parte de la especificación W3 que toca esto.

El relleno vertical, borde y margen de una línea, no sustituido inicio cuadro en la parte superior e inferior del área de contenido, y no tiene nada que ver con el 'line-height'. Pero solo la 'altura de línea' se usa cuando calcula la altura del cuadro de línea. CSS 2.1 Spec

+4

Una buena explicación visual http://www.maxdesign.com.au/articles/inline – BoltClock

3

Los elementos en línea simplemente no tienen el propósito de afectar la disposición, por eso block o inline-block voluntad, sino la duración de inline no lo hará.

+0

Pero * ellos * afectan el diseño; afectan el ancho del padre simplemente bien. Y sus márgenes agregan, a la derecha. ¿Simplemente no su relleno ...? –

+0

La explicación de Hexxagonal es mejor; No estoy seguro de por qué las dimensiones en línea se pueden cambiar parcialmente, solo sé que la teoría es que no están destinadas a afectar los elementos de nivel de bloque. Pero tienes razón: la realidad insiste en que los dos interactúan de alguna manera. –

+0

No afectan el ancho de sus elementos principales, excepto en casos especiales (elementos flotantes y completamente posicionados sin 'ancho', y contenido de celda de tabla). – bobince

0

El <div> no está destinado a cambiar el tamaño en este caso. Como <span> es un elemento en línea.

Si esto es la funcionalidad que busca modificar

div, span { 
    border: 1px solid gray; 
} 

con overflow:auto;

div, span { 
    border: 1px solid gray; 
    overflow:auto; 
} 
+0

Esto va en la dirección incorrecta: no solo el div no es más grande, sino que ahora también tiene barras de desplazamiento. –

Cuestiones relacionadas