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

Yarin
fuente
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.

Diego
fuente
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;
}
Mantenga la línea
fuente
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
1

Para ajustar la posición de un inline-blockelemento, use la parte superior e izquierda:

  position: relative;
  top: 5px;
  left: 5px;

Gracias CSS-Tricks !

kslstn
fuente
translateTambién es posible.
user4642212