¿Por qué la alineación vertical no funciona correctamente cuando se usa float en CSS?

4 minutos de lectura

avatar de usuario de user1355300
usuario1355300

¿Cómo puedo usar el vertical-align tanto como float en el div ¿propiedades? los vertical-align funciona bien si no uso el float. Pero si uso el flotador, entonces no funciona. Es importante para mí usar el float:right para la última 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

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

  • si configuras line-height con el mismo valor para todos los elementos vertical-align es inútil (jsfiddle.net/VBR5J/448)

    – Éderson T. Szlachta

    11 mayo 2015 a las 14:17


  • no funciona para <button> elementos. En vez de <span> es un <button>.

    – Verde

    1 de septiembre de 2015 a las 7:26

  • Esta respuesta es incorrecta. vertical-align pertenece al CONTENEDOR (el div) no los elementos individuales. La solución correcta, capaz de alinear verticalmente elementos flotantes, es poner ambos vertical-align y line-height en el CONTENEDOR: <div style="border: 1px solid red; vertical-align:middle; line-height: 38px;">. RETIRAR vertical-align:middle; line-height: 38px; de los estilos de tramo.

    – El fabricante de herramientas Steve

    14 de mayo de 2016 a las 0:08


  • 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).

    – El fabricante de herramientas Steve

    14 de mayo de 2016 a las 0:18

  • @ToolmakerSteve está mal, y esta respuesta está mal. 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’ convierte a un elemento en un elemento de bloque. Aún así, usar la altura de línea (e ignorar la alineación vertical) puede ser una solución.

    – commonpike

    21 de marzo de 2018 a las 14:56

Avatar de usuario de Ahsan Khurshid
Ahsan Khurshid

Editado:

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

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

  • se aplica a inline-block elementos también.

    – Rolf

    22 oct 2017 a las 12:20

  • Actualizado. He extrañado eso. Gracias por mencionar

    – Ahsan Khurshid

    7 de noviembre de 2017 a las 5:56

  • esto no es una respuesta

    – Serzhan Ajmetov

    6 de marzo de 2020 a las 1:57

Avatar de usuario de Gabriel
gabriel

De hecho, la alineación vertical no funciona con elementos flotantes. 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 transformación, visualización: tabla, posicionamiento absoluto, altura de línea, js (quizás como último recurso) o incluso la tabla html simple (quizás 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 puedes alinear verticalmente TUS 3 divisiones:

.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é necesitaba ancho fijo, pantalla: bloque en línea y flotante.

  • ¿Podría agregar algún código a su respuesta para mostrar cómo lograr la solución?

    – abarisona

    7 abr 2015 a las 10:09

  • Además, la “respuesta correcta” es tan fácil de descifrar… me hace preguntarme cómo demonios la votaron 19 personas.

    – gabriel

    10 de abril de 2015 a las 12:07

  • la pregunta decía “necesita el flotador: justo en el último elemento”, por lo que es posible que necesite que el último elemento esté en el lado derecho del contenedor. ¿Cómo lograr ese objetivo en tu respuesta?

    usuario4269941

    10 de agosto de 2016 a las 2:07

  • Buena respuesta, y además tan clara! Solo falta la opción Flexbox.

    – Luillyfe

    13 mayo 2017 a las 22:22

  • Esta solución no muestra el último elemento alineado a la derecha. Ver: jsfiddle.net/eprky4q1

    – Skrol29

    31 de marzo a las 6:52

¿Ha sido útil esta solución?