Allinea i DIV a blocco inline alla parte superiore dell'elemento contenitore


199

Quando due inline-block divs hanno altezze diverse, perché il più corto dei due non si allinea alla parte superiore del contenitore? ( 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>

Come posso allineare il piccolo divnella parte superiore del suo contenitore?




1
applica vertical-align: top; per .small class
Deepu Sasidharan,

1
non voglio usare float. grazie @ Mr.Alien ora funziona :)
Youssef,

Risposte:


347

Perché vertical-alignè impostato come valore predefinito alla base .

Usa vertical-align:topinvece:

.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 come ha detto @ f00644, potresti applicare anche floatagli elementi figlio.


Se applico il galleggiante avrò un problema in altezza se il contenitore ha appena galleggiante per bambini come nel mio caso. Dai un'occhiata qui all'articolo
Youssef,

1
Qualche idea sul perché baselineè l'impostazione predefinita? Sono sicuro che ci sia una buona ragione, ma non aspettarselo sembra strano. Si finisce con un effetto skyline di Manhattan.
Sridhar Sarnobat,

L'allineamento verticale viene utilizzato per l'allineamento dei caratteri, poiché i caratteri hanno la linea di base, è logico che il valore predefinito si risolva in linea di base. In altre occasioni come questa, devi sovrascriverla.
ceed

25

Devi aggiungere una vertical-alignproprietà ai div di due bambini.

Se .smallè sempre più corto, devi solo applicare la proprietà a .small. Tuttavia, se uno dei due potrebbe essere il più alto, è necessario applicare la proprietà a entrambi .smalle .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;   
}

L'allineamento verticale influisce sui riquadri in linea o delle celle di tabella e per questa proprietà è presente un numero elevato di valori diversi. Per maggiori dettagli, consultare https://developer.mozilla.org/en-US/docs/Web/CSS/vertical-align .


-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/>");

})

Penso che semplicemente cambiare le proprietà di visualizzazione predefinite di un intervallo da inline a block farà il trucco.
holyghostgym,

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.