CSS Vertical align no funciona con float

85

¿Cómo puedo utilizar el vertical-alignasí como floaten las divpropiedades? El vertical-alignbien funciona si yo no uso el float. Pero si utilizo el flotador, entonces no funciona. Es importante para mí usar el float:rightpara el último div.

Estoy tratando de seguir, si elimina el flotador de todos los div, entonces funcionaría bien:

<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

usuario1355300
fuente

Respuestas:

92

Debe establecer la altura de la línea.

<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/

Anders B
fuente
31
si establece line-heightcon el mismo valor para todos los elementos, vertical-alignes inútil. ( jsfiddle.net/VBR5J/448 )
Éderson T. Szlachta
No funciona para <button>elementos. En lugar de <span>es un <button>.
Verde
14
Esta respuesta es incorrecta. vertical-align pertenece al CONTENEDOR (el div) no a los elementos individuales. La solución correcta - capaz de vertical de alineación flotaba elementos - es poner tanto vertical-aligny line-heighten el envase: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. QUITAR vertical-align:middle; line-height: 38px;de los estilos de tramo.
ToolmakerSteve
1
Acabo de descubrir que lo que sugiero funciona para los tramos flotantes en el violín de la respuesta, pero no para algunos elementos (falló para una entrada de radio flotante).
ToolmakerSteve
1
@ToolmakerSteve está equivocado y esta respuesta es incorrecta. La alineación vertical solo se aplica a elementos en línea, bloques en línea o celdas de tabla (este último es simplemente extraño). Agregar un 'flotante' hace que en element sea un elemento de bloque. Aún así, usar la altura de la línea (e ignorar la alineación vertical) puede ser una solución.
commonpike
15

Editado:

los vertical-align propiedad CSS especifica la alineación vertical de una línea, en línea-bloque o elemento-celda de la tabla.

Lea este artículo para comprender la alineación vertical

Ahsan Khurshid
fuente
1
También se aplica a los inline-blockelementos.
Rolf
1
Actualizado. Me he perdido eso. Gracias por mencionar.
Ahsan Khurshid
3
esto no es una respuesta
Serzhan Akhmetov
Si bien este enlace puede responder a la pregunta, es mejor incluir las partes esenciales de la respuesta aquí y proporcionar el enlace como referencia. Las respuestas de solo enlace pueden dejar de ser válidas si cambia la página enlazada. - De la crítica
Utsav Patel
8

La alineación vertical no funciona con elementos flotantes, de hecho. Eso es porque float levanta el elemento del flujo normal del documento. Es posible que desee utilizar otras técnicas de alineación vertical, como las que se basan en transformar, mostrar: tabla, posicionamiento absoluto, altura de línea, js (tal vez último recurso) o incluso la tabla html simple (tal vez la primera opción si el contenido es en realidad tabular). Descubrirá que hay un acalorado debate sobre este tema.

Sin embargo, así es como puede alinear verticalmente SUS 3 divs:

.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; 
}

No estoy seguro de por qué necesita tanto ancho fijo, pantalla: bloque en línea y flotante.

Gabriel
fuente
¿Podría agregar algún código a su respuesta para mostrar cómo lograr la solución?
abarisone
Además, la "respuesta correcta" es tan fácil de descifrar ... me pregunto cómo diablos la gente la votó a favor.
Gabriel
3
la pregunta decía "necesita el flotador: justo en el último elemento", por lo que puede necesitar que el último elemento esté en el lado derecho del contenedor. ¿Cómo lograr ese objetivo en tu respuesta?
fly.x
¡Buena respuesta, y además tan clara! Solo falta la opción Flexbox.
Luillyfe