Alinee los DIV de bloque en línea con la parte superior del elemento contenedor


199

Cuando dos inline-block divs tienen diferentes alturas, ¿por qué el más corto de los dos no se alinea con la parte superior del contenedor? ( DEMO ):

.container { 
    border: 1px black solid;
    width: 320px;
    height: 120px;    
}

.small {
    display: inline-block;
    width: 40%;
    height: 30%;
    border: 1px black solid;
    background: aliceblue;    
}

.big {
    display: inline-block;
    border: 1px black solid;
    width: 40%;
    height: 50%;
    background: beige;    
}
<div class="container">
    <div class="small"></div>
    <div class="big"></div>
</div>

¿Cómo puedo alinear el pequeño diven la parte superior de su contenedor?




1
aplicar vertical-align: top; para la clase .small
Deepu Sasidharan

1
No quiero usar flotador. gracias @ Mr.Alien funciona ahora :)
Youssef

Respuestas:


347

Porque el vertical-alignse establece en la línea de base por defecto.

Use en su vertical-align:toplugar:

.small{
    display: inline-block;
    width: 40%;
    height: 30%;
    border: 1px black solid;
    background: aliceblue;   
    vertical-align:top;
}

http://jsfiddle.net/Lighty_46/RHM5L/9/

O como dijo @ f00644 , también podría aplicar floata los elementos secundarios.


Si aplico el flotador tendré un problema de altura si el contenedor tiene flotador para niños como en mi caso. Echa un vistazo aquí artículo
Youssef

1
¿Alguna idea de por qué baselinees el valor predeterminado? Estoy seguro de que hay una buena razón, pero para un inesperado, parece extraño. Terminas con un efecto de horizonte de Manhattan.
Sridhar Sarnobat

La alineación vertical se usa para la alineación de fuentes, ya que las fuentes tienen una línea de base, es lógico que el valor predeterminado se resuelva en la línea de base. En otras ocasiones como esta, debes sobrescribirlo.
ceed

25

Necesita agregar una vertical-alignpropiedad a sus dos divisiones secundarias.

Si .smallsiempre es más corto, solo necesita aplicar la propiedad a .small. Sin embargo, si cualquiera podría ser más alto, entonces debe aplicar la propiedad a ambos .smally .big.

.container{ 
    border: 1px black solid;
    width: 320px;
    height: 120px;    
}

.small{
    display: inline-block;
    width: 40%;
    height: 30%;
    border: 1px black solid;
    background: aliceblue; 
    vertical-align: top;   
}

.big {
    display: inline-block;
    border: 1px black solid;
    width: 40%;
    height: 50%;
    background: beige; 
    vertical-align: top;   
}

La alineación vertical afecta los cuadros en línea o de celda de tabla, y hay una gran cantidad de valores diferentes para esta propiedad. Consulte https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align para obtener más detalles.


-1
<style type="text/css">
        div {
  text-align: center;
         }

         .img1{
            width: 150px;
            height: 150px;
            border-radius: 50%;
         }

         span{
            display: block;
         }
    </style>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>
  <input type='password' class='secondInput mt-4 mr-1' placeholder="Password">
  <span class='dif'></span>
  <br>
  <button>ADD</button>
</div>

<script type="text/javascript">

$('button').click(function() {
  $('.dif').html("<img/>");

})

Creo que simplemente cambiar las propiedades de visualización predeterminadas de un tramo de en línea a bloque hará el truco.
holyghostgym

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.