Alignement vertical CSS des éléments inline / inline-block

142

Je suis en train de faire plusieurs inlineet inline-blockcomposants alignés verticalement dans un div. Comment se fait-il que, spandans cet exemple, insiste pour être poussé vers le bas? J'ai essayé les deux vertical-align:middle;et vertical-align:top;, mais rien ne change.

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

RÉSULTAT:
entrez la description de l'image ici

VIOLON

Yarin
la source
notez que cela ne se produira pas si les <a>éléments contiennent du texte à l'intérieur voir ce lien
S.Serpooshan

Réponses:

270

vertical-aligns'applique aux éléments alignés, pas à leur élément parent. Pour aligner verticalement les enfants du div, procédez comme suit:

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

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

REMARQUE : vertical-alignest relatif à la ligne de texte actuelle, pas à la hauteur totale du parent div. Si vous vouliez que le parent divsoit plus grand et que les éléments soient toujours centrés verticalement, définissez la propriété div's line-heightau lieu de sa height. Suivez le lien jsfiddle ci-dessus pour un exemple.

Diego
la source
Cela cesse de fonctionner si vous spécifiez une hauteur pour l'extérieur div.
Abhranil Das
4
@AbhranilDas vertical-alignest relatif à la ligne de texte actuelle, pas à l'élément parent. Pour que cela fonctionne comme vous le souhaitez, définissez le div au line-heightlieu de son height.
Diego
24

Donnez vertical-align:top;à a& span. Comme ça:

a, span{
 vertical-align:top;
}

Vérifiez ceci http://jsfiddle.net/TFPx8/10/

sandeep
la source
5

Le simple fait de flotter les deux éléments vers la gauche permet d'obtenir le même résultat.

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;
}
Rester en ligne
la source
Le problème avec leur flottement vers la gauche est qu'ils vont passer à la ligne suivante lorsque le navigateur devient trop petit. Parfois, vous avez besoin d'éléments pour rester en ligne, même au-delà des limites du navigateur, et c'est donc inline-blockla seule solution.
Jake Wilson
Bien que ce problème d'emballage puisse être un problème, je dirais que c'est une très bonne solution pour les cas où l'emballage est acceptable. Il est élégant, parle de l'esprit de l'effet souhaité et ne nécessite aucune modification du parent.
Crispen Smith
1

Pour affiner la position d'un inline-blockélément, utilisez le haut et la gauche:

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

Merci CSS-Tricks !

kslstn
la source
translateest également possible.
user4642212