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


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.


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


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

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

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.