L'allineamento verticale CSS non funziona con float


86

Come posso utilizzare il vertical-aligncosì come floatnelle divproprietà? Il vertical-alignbene funziona se io non uso il float. Ma se uso il galleggiante, allora non funziona. È importante per me utilizzare il float:rightper l'ultimo div.

Sto provando a seguire, se rimuovi il float da tutti i div, funzionerebbe bene:

<div class="wrap">
    <div class="left">First div, float left,  has more text.</div>
    <div class="left2">Second div, float left </div>
    <div class="right">Third div, float right</div>
</div>

CSS:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    float:left;
    vertical-align: middle;  
    display:inline-block

}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua;
    float:left;
    vertical-align: middle;   
    display:inline-block
}

.right{
    width: 150px;
    background: orange;
    float:right;
    vertical-align: middle;
    display:inline-block
}

JSFiddle

Risposte:


90

Devi impostare l'altezza della linea.

<div style="border: 1px solid red;">
<span style="font-size: 38px; vertical-align:middle; float:left; line-height: 38px">Hejsan</span>
<span style="font-size: 13px; vertical-align:middle; float:right; line-height: 38px">svejsan</span>
<div style="clear: both;"></div>

http://jsfiddle.net/VBR5J/


32
se si imposta lo line-heightstesso valore per tutti gli elementi vertical-alignè inutile. ( jsfiddle.net/VBR5J/448 )
Éderson

Non funziona per gli <button>elementi. Invece di <span>è un file <button>.
Verde

15
Questa risposta è sbagliata. vertical-align appartiene al CONTAINER (il div) non ai singoli elementi. La soluzione corretta - capace di verticale-allineamento elementi galleggiava - è quello di mettere sia vertical-aligne line-heightsul contenitore: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. RIMUOVI vertical-align:middle; line-height: 38px;dagli stili di campata.
ToolmakerSteve

1
Ho appena scoperto che ciò che suggerisco funziona per gli intervalli flottanti nel violino della risposta, ma non per alcuni elementi (fallito per un ingresso radio flottante).
ToolmakerSteve

1
@ToolmakerSteve è sbagliato e questa risposta è sbagliata. L'allineamento verticale si applica solo agli elementi in linea, ai blocchi in linea o alle celle di tabella (quest'ultimo è semplicemente strano). L'aggiunta di un 'float' rende l'elemento en un elemento block. Tuttavia, usare l'altezza della linea (e ignorare l'allineamento verticale) può essere una soluzione.
commonpike

15

Modificato:

Il vertical-align proprietà CSS specifica l'allineamento verticale di una linea, inline-block o elemento table-cell.

Leggi questo articolo per comprendere l'allineamento verticale


1
Si applica anche agli inline-blockelementi.
Rolf

1
Aggiornato. Mi è mancato. Grazie per la menzione.
Ahsan Khurshid

4
questa non è una risposta
Serzhan Akhmetov

Sebbene questo collegamento possa rispondere alla domanda, è meglio includere le parti essenziali della risposta qui e fornire il collegamento come riferimento. Le risposte di solo collegamento possono diventare non valide se la pagina collegata cambia. - Dalla recensione
Utsav Patel

8

L'allineamento verticale non funziona con gli elementi flottati, infatti. Questo perché float solleva l'elemento dal normale flusso del documento. Potresti voler utilizzare altre tecniche di allineamento verticale, come quelle basate su trasformazione, visualizzazione: tabella, posizionamento assoluto, altezza di riga, js (ultima risorsa forse) o anche la semplice vecchia tabella html (forse la prima scelta se il contenuto è effettivamente tabulare). Scoprirai che c'è un acceso dibattito su questo tema.

Tuttavia, ecco come allineare verticalmente i TUOI 3 div:

.wrap{
    width: 500px;
    overflow:hidden;    
    background: pink;
}

.left {
    width: 150px;       
    margin-right: 10px;
    background: yellow;  
    display:inline-block;
    vertical-align: middle; 
}

.left2 {
    width: 150px;    
    margin-right: 10px;
    background: aqua; 
    display:inline-block;
    vertical-align: middle; 
}

.right{
    width: 150px;
    background: orange;
    display:inline-block;
    vertical-align: middle; 
}

Non sono sicuro del motivo per cui hai bisogno sia di larghezza fissa, display: inline-block che floating.


Potresti aggiungere del codice alla tua risposta per mostrare come ottenere la soluzione?
abarisone

Inoltre, la "risposta corretta" è così facile da infrangere ... mi chiedo come mai 19 persone la abbiano votata.
Gabriel

3
la domanda diceva "ha bisogno del galleggiante: proprio sull'ultimo elemento", quindi potrebbe aver bisogno che l'ultimo elemento si trovi lungo il lato destro del contenitore. come raggiungere questo obiettivo nella tua risposta?
fly

Buona risposta, e inoltre così chiara! Manca solo l'opzione Flexbox.
Luillyfe
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.