Alineación vertical CSS de elementos en línea / bloque en línea


142

Estoy tratando de alinear varios componentes inliney inline-blockverticalmente en a div. ¿Cómo es que spanen este ejemplo insiste en ser empujado hacia abajo? He intentado ambos vertical-align:middle;y vertical-align:top;, pero nada cambia.

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

RESULTADO:
ingrese la descripción de la imagen aquí

VIOLÍN


Tenga en cuenta que esto no sucederá si <a>los elementos contienen un texto dentro de ellos ver este enlace
S.Serpooshan

Respuestas:


270

vertical-alignse aplica a los elementos que se alinean, no a su elemento padre. Para alinear verticalmente a los hijos del div, haga esto en su lugar:

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

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

NOTA : vertical-alignes relativo a la línea de texto actual, no a la altura total del elemento primario div. Si desea que el padre divsea ​​más alto y aún tenga los elementos centrados verticalmente, establezca la propiedad div's en line-heightlugar de su height. Siga el enlace jsfiddle anterior para ver un ejemplo.


Esto deja de funcionar si especifica una altura para el exterior div.
Abhranil Das

44
@AbhranilDas vertical-alignes relativo a la línea de texto actual, no al elemento padre. Para que esto funcione como desee, establezca el div en line-heightlugar de su height.
Diego


5

Simplemente flotando ambos elementos a la izquierda se obtiene el mismo resultado.

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

El problema con flotarlos hacia la izquierda es que pasarán a la siguiente línea cuando el navegador sea demasiado pequeño. A veces necesita elementos para mantenerse en línea incluso más allá de los límites del navegador y, por lo tanto, inline-blockes la única solución.
Jake Wilson

Si bien ese problema de envoltura puede ser un problema, diría que esta es una muy buena solución para aquellos casos en los que la envoltura está bien. Es elegante, habla del espíritu del efecto deseado y no requiere modificaciones para el padre.
Crispen Smith

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.