Allineamento verticale CSS di elementi inline / inline-block


142

Sto cercando di allineare diversi componenti inlinee inline-blockverticalmente in a div. Come mai spanin questo esempio insiste per essere spinto verso il basso? Ho provato entrambi vertical-align:middle;e vertical-align:top;, ma non cambia nulla.

HTML:

<div>
  <a></a><a></a>
  <span>Some text</span>
</div>

CSS:

a {
    background-color:#FFF;
    width:20px;
    height:20px;
    display:inline-block;
    border:solid black 1px;
}

div {
    background:yellow;
    vertical-align:middle;
}
span {
    background:red;
}

RISULTATO:
inserisci qui la descrizione dell'immagine

VIOLINO


nota che questo non accadrà se gli <a>elementi contengono del testo al loro interno, vedi questo link
S.Serpooshan,

Risposte:


270

vertical-alignsi applica agli elementi da allineare, non al loro elemento principale. Per allineare verticalmente i figli del div, fai invece questo:

div > * {
    vertical-align:middle;  // Align children to middle of line
}

Vedi: http://jsfiddle.net/dfmx123/TFPx8/1186/

NOTA : vertical-alignè relativo alla riga di testo corrente, non all'altezza completa del genitore div. Se vuoi che il genitore divsia più alto e abbia ancora gli elementi centrati verticalmente, imposta la proprietà div's line-heightinvece che sua height. Segui il link jsfiddle sopra per un esempio.


Questo smette di funzionare se si specifica un'altezza per l'esterno div.
Abhranil Das,

4
@AbhranilDas vertical-alignè relativo alla riga di testo corrente, non all'elemento genitore. Per fare in modo che funzioni come preferisci, imposta i div line-heightanziché i suoi height.
Diego,


5

Il semplice spostamento di entrambi gli elementi a sinistra consente di ottenere lo stesso risultato.

div {
background:yellow;
vertical-align:middle;
margin:10px;
}

a {
background-color:#FFF;
width:20px;
height:20px;
display:inline-block;
border:solid black 1px;
float:left;
}

span {
background:red;
display:inline-block;
float:left;
}

Il problema con il loro spostamento a sinistra è che verranno spostati alla riga successiva quando il browser diventa troppo piccolo. A volte hai bisogno di elementi per rimanere in linea anche oltre i limiti del browser e quindi inline-blockè l'unica soluzione.
Jake Wilson,

Mentre quel problema di avvolgimento può essere un problema, direi che questa è davvero una buona soluzione per quei casi in cui il wrapping va bene. È elegante, parla allo spirito dell'effetto desiderato e non richiede modifiche al genitore.
Crispen Smith,

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.