Básicamente, ha agregado más desorden en su código, lo que está creando más confusión, así que primero trato de eliminar el desorden que dificulta la comprensión del problema real.
Antes que nada tenemos que establecer que ¿cuál es la verdadera pregunta?
Es por eso que el " inline-block
" elemento es empujado hacia abajo.
Ahora comenzamos a entenderlo y eliminamos el desorden primero.
1 -
¿Por qué no dar a los tres divs el mismo ancho de borde?
Vamos a darlo.
2 - ¿El elemento flotante tiene alguna conexión con el elemento de bloque en línea que se empuja hacia abajo? No, no tiene nada que ver con eso.
Entonces, hemos eliminado ese div por completo . Y está presenciando el mismo comportamiento del elemento de bloque en línea empujado hacia abajo.
Aquí llega el turno de un poco de literatura para comprender la idea de los cuadros de línea y cómo están alineados en la misma línea, especialmente leer el último párrafo cuidadosamente porque ahí está la respuesta a su pregunta.
La línea base de un 'bloque en línea' es la línea base de su último cuadro de línea en el flujo normal, a menos que no tenga cuadros de línea en flujo o si su propiedad 'desbordamiento' tiene un valor calculado distinto de 'visible', en en cuyo caso la línea de base es el borde del margen inferior.
Si no está seguro acerca de la línea de base , aquí hay una breve explicación en palabras simples.
Todos los caracteres, excepto 'gjpqy', están escritos en la línea de base. Puede pensar en la línea de base como si dibujara una línea horizontal simple igual que subrayando justo debajo de estos "caracteres aleatorios", entonces será la línea de base, pero ahora si escribe cualquiera de 'gjpqy' los caracteres en la misma línea y luego la parte inferior de estos caracteres caerían debajo de la línea.
Entonces, podemos decir que todos los caracteres, excepto 'gjpqy', se escriben completamente por encima de la línea de base, mientras que parte de estos caracteres se escriben debajo de la línea de base.
3 - ¿Por qué no verificar dónde está la línea de base de nuestra línea? He agregado algunos caracteres que muestran la línea de base de nuestra línea.
4 - ¿Por qué no agregar algunos caracteres en nuestros divs también para encontrar sus líneas de base en el div? Aquí, se agregaron algunos caracteres en divs para aclarar la línea base .
Ahora, cuando comprenda la línea de base, lea la siguiente versión simplificada sobre la línea de base de los bloques en línea.
i) Si el bloque en línea en cuestión tiene su propiedad de desbordamiento establecida en visible (que es por defecto, por lo que no es necesario configurarla). Entonces su línea de base sería la línea de base del bloque contenedor de la línea.
ii) Si el bloque en línea en cuestión tiene su propiedad de desbordamiento establecida en OTRO QUE visible. Entonces su margen inferior estaría en la línea de base de la línea del cuadro contenedor.
Ahora mire esto nuevamente para aclarar su concepto de lo que está sucediendo con el div verde . Si aún hay alguna confusión, aquí se agregan más caracteres cerca del div verde para establecer la línea base del bloque contenedor y la línea base div verde se alinea.
Bueno, ahora estoy afirmando que tienen la misma línea de base? ¿DERECHA?
5 - Entonces, ¿por qué no superponerlos y ver si encajan uno con el otro? Entonces, traigo el tercer div -left: 35px; para verificar si tienen la misma línea de base ahora ?
Ahora, tenemos nuestro primer punto probado.
Bueno, después de la explicación del primer punto, el segundo punto es fácilmente digerible y ve que el primer div que tiene la propiedad de desbordamiento establecida en otra que no sea visible (oculta) tiene su margen inferior en la línea base de la línea.
Ahora, puede hacer un par de experimentos para ilustrarlo más.
- Establezca el primer desbordamiento div: visible (o elimínelo por completo) .
- Establezca el segundo desbordamiento div: que no sea visible .
- Establezca el desbordamiento de ambos divs: otro que no sea visible .
Ahora trae de vuelta tu desorden y mira si todo te parece bien.
- Recupere su div flotante (por supuesto, es necesario
aumentar un poco el ancho del cuerpo) Verá que no tiene ningún efecto.
- Recupere los mismos márgenes impares .
- Establezca div verde en desbordamiento: visible a medida que establece su pregunta (esa desalineación se debe al aumento del ancho del borde de 1px a 5px, por lo que si ajusta el negativo a la izquierda , verá que no hay problema)
- Ahora elimine los caracteres adicionales que agregué para ayudar a comprender . (y, por supuesto, eliminar la izquierda negativa)
- Finalmente, reduzca el ancho del cuerpo porque ya no necesitamos uno más ancho.
Y ahora estamos de vuelta a donde comenzamos.
Espero haber respondido tu pregunta.
El valor predeterminado para
vertical-align
CSS esbaseline
y esta regla también se aplica coninline-block
leer esto http://www.brunildo.org/test/inline-block.htmlEscribe
vertical-align:top
en tuinline-block
DIV.Mira esto http://jsfiddle.net/WGCyu/1/
fuente
display:inline-block
combinado confloat:left/right
.vertical-align
propiedad, ninguna de la complejidad descrita en el Se acepta la respuesta aceptada.Solo usa
vertical-align:top;
Manifestación
fuente
Ver este ejemplo alternativo. La razón de tal comportamiento se describe en el módulo CSS3: línea: 3.2. Line Box wrapping [1] :
Como puede ver, el tercer elemento se empuja hacia abajo, aunque no tiene una
overflow
propiedad. La razón debe estar en otro lugar para encontrar. El segundo comportamiento que observa se describe en las Hojas de estilo en cascada Nivel 2 Revisión 1 (CSS 2.1) Especificación: 9.5 Flotadores [2] :Todos sus
display:inline-block;
divs utilizan un tipo especial debaseline
en este caso 10.8 Cálculos de altura de línea: las propiedades 'line-height' y 'vertical-align' (final) [3] :Por lo tanto, cuando utilice elementos y
inline-block
elementos flotantes, el elemento flotante se empujará hacia un lado y el formato en línea se volverá a calcular de acuerdo con 1 . Por otro lado, los siguientes elementos se acortan si no encajan. Como ya está trabajando con una cantidad mínima de espacio, no hay otra forma de modificar sus elementos y luego presionarlos 2 . En este caso, el elemento más alto definirá el tamaño de su div de envoltura, definiendo así elbaseline
3 , mientras que, por otro lado, la modificación de la posición y el ancho indicados en 2 no se puede aplicar a elementos de altura máxima espaciada mínima. En este caso resultará un comportamiento como en mi primera demostración.Por último, la razón por la
overflow:hidden
que evitará#firstDiv
que lo empujen al borde inferior de la suya#container
, aunque no pude encontrar una razón en la sección 11 . Sinoverflow:hidden
esto funciona como se exceptúa y define por 2 y 3 . ManifestaciónTL; DR: Observe muy de cerca las recomendaciones de W3 y las implementaciones en el navegador. En mi humilde opinión, los elementos flotantes están determinados a mostrar un comportamiento inesperado si no conoce todos los cambios que hacen a los elementos que lo rodean. Aquí hay otra demostración que muestra un problema común con las carrozas.
fuente
Originalmente comencé a responder esta pregunta , pero estaba bloqueado como engañado antes de que pudiera terminar, así que publico la respuesta aquí.
Primero, necesitamos entender qué
inline-block
es.La definición en MDN dice:
Para entender lo que está sucediendo aquí, tenemos que mirar
vertical-align
, y su valor predeterminadobaseline
.En esta ilustración, tiene esta tabla de colores:
Azul: la línea base
Rojo: la parte superior e inferior de la altura de la línea
Verde: La parte superior e inferior del cuadro de contenido en línea.
En el elemento #left, tiene contenido textual que controla cuál es la línea base. Esto significa que el texto dentro define la línea base para #left.
En el #derecho, no hay contenido, por lo que el navegador no tiene otra opción que usar la parte inferior del cuadro como línea de base.
Vea esta visualización donde dibujé la línea de base en un ejemplo donde el primer contenedor en línea tiene algo de texto, y el siguiente está vacío:
Si alinea específicamente un elemento con la parte superior, realmente dice que alinea la parte superior de este elemento con la parte superior del cuadro de línea.
Esto podría ser más fácil de entender con un ejemplo.
El resultado es este, y agregué la línea de base azul y el cuadro de línea roja: lo que sucede aquí es que la altura del cuadro de línea depende de cómo se distribuya el contenido de toda la línea. Esto significa que para calcular la alineación superior, las alineaciones de línea de base deben calcularse primero. El elemento tiene , por lo que esto no se utiliza para el posicionamiento de la línea base. pero el y se colocan verticalmente para que sus líneas de base estén alineadas. Cuando se hace esto, la altura del cuadro de línea ha aumentado, porque el elemento ha sido empujado un poco hacia arriba como resultado del tamaño de fuente más grande. Luego, se puede calcular la posición superior del elemento, y esto se encuentra en la parte superior del cuadro de línea.
#middle
vertical-align:top
#left
#right
#right
#middle
fuente
el problema es porque has aplicado flotante: izquierda en el segundo div. lo que hace que el segundo div venga del lado izquierdo y tu primer div caiga y venga después de tu segundo div. Si aplica float: a la izquierda en el primer div también, su problema desaparecerá.
desbordamiento: oculto no está causando ningún problema a su diseño, desbordamiento: oculto afecta solo a los elementos internos de un div, no tiene nada que ver con otros elementos que están fuera.
fuente
Intenta agregar
padding:0;
al cuerpo y eliminar el margen de tus divs.Agregue
background-color:*any
color aparte del fondo * para verificar la diferencia.fuente
code
por ejemplo:.background-color:any color
Intente hacer que todas las propiedades CSS de todos los elementos sean iguales.
Tuve un problema similar y, mientras solucionaba esto, identifiqué que estaba soltando un Elemento con la propiedad Fuente en Elemento Div.
Después de soltar ese Elemento con la propiedad Fuente, se alteró la alineación de todos los DIV. Para solucionar esto, configuré la propiedad Font para todos los elementos DIV de la misma manera que el elemento que se dejó caer.
En el siguiente ejemplo, el elemento Dropped de la clase ".dldCuboidButton" se define con font-size: 30 px.
Así que agregué la misma propiedad a las clases restantes, es decir .cuboidRecycle, .liCollect, .dldCollect que utilizan los elementos DIV. De esa manera, todos los elementos DIV siguen las mismas medidas antes y después de colocar el elemento en él.
Aquí está el ejemplo de HTML creado dinámicamente usando el CSS anterior.
fuente