Disons que j'ai un bouton d'amorçage avec une icône de police géniale et du texte:
<div>
<i class='icon icon-2x icon-camera'></i>
hello world
</div>
Comment faire en sorte que le texte apparaisse centré verticalement? Le texte est maintenant aligné sur le bord inférieur de l'icône: http://jsfiddle.net/V7DLm/1/
EDIT: J'ai un possible solution: http://jsfiddle.net/CLdeG/1/ mais ça semble un peu féroce - introduit une balise p gauche et afficher: table. Peut-être que quelqu'un peut suggérer un moyen plus simple.
Après avoir examiné toutes les options suggérées, la solution la plus propre semble être de régler tout en hauteur et aligner verticalement:
Voir Jsfiddle Demo
CSS:
div {
border: 1px solid #ccc;
display: inline-block;
height: 50px;
margin: 60px;
padding: 10px;
}
#text, #ico {
line-height: 50px;
}
#ico {
vertical-align: middle;
}
Je devais juste le faire moi-même, vous devez le faire dans l'autre sens.
<div>
<span class="icon icon-2x icon-camera" style=" vertical-align: middle;"></span>
<span class="my-text">hello world</span>
</div>
Bien sûr, vous ne pouvez pas utiliser de styles inline et le cibler avec votre propre classe css. Mais cela fonctionne comme un copier-coller.
Voir ici: Alignement vertical du texte et de l’icône dans le bouton bootstrap
Si cela dépendait de moi cependant, je n'utiliserais pas l'icône-2x. Et spécifiez simplement la taille de la police moi-même, comme dans la suite
<div class='my-fancy-container'>
<span class='my-icon icon-file-text'></span>
<span class='my-text'>Hello World</span>
</div>
.my-icon {
vertical-align: middle;
font-size: 40px;
}
.my-text {
font-family: "Courier-new";
}
.my-fancy-container {
border: 1px solid #ccc;
border-radius: 6px;
display: inline-block;
margin: 60px;
padding: 10px;
}
pour un exemple de travail, s'il vous plaît voir http://jsfiddle.net/3GMjp/77/
J'utilise des icônes à côté du texte 99% du temps, donc j'ai apporté le changement globalement
.fa-2x {
vertical-align: middle;
}
Ajoutez 3x, 4x, etc. à la même définition si nécessaire.
si tout ne se passe pas comme prévu, un simple line-height: inherit;
via CSS sur des éléments i.fa spécifiques rencontrant des problèmes d'alignement pourrait suffire à faire l'affaire.
Vous pouvez également utiliser une solution globale qui, en raison d'une spécificité CSS légèrement supérieure, remplacera la règle .fa de FontAwesome qui spécifie line-height: 1
sans exiger !important
sur la propriété:
i.fa {
line-height: inherit;
}
Assurez-vous simplement que la solution globale ci-dessus ne pose aucun autre problème aux endroits où vous pourriez également utiliser les icônes FontAwesome.
une option flexbox - font awesome 4.7 et moins
div {
display: inline-flex; /* make element size relative to content */
align-items: center; /* vertical alignment of items */
line-height: 40px; /* vertically size by height, line-height or padding */
padding: 0px 10px; /* horizontal with padding-l/r */
border: 1px solid #ccc;
}
/* unnecessary styling below, ignore */
body {display: flex;justify-content: center;align-items: center;height: 100vh;}div i {margin-right: 10px;}div {background-color: hsla(0, 0%, 87%, 0.5);}div:hover {background-color: hsla(34, 100%, 52%, 0.5);cursor: pointer;}
<link href="http://netdna.bootstrapcdn.com/font-awesome/3.2.1/css/font-awesome.min.css" rel="stylesheet"/>
<div>
<i class='icon icon-2x icon-camera'></i>
hello world
</div>
violon
http://jsfiddle.net/Hastig/V7DLm/180/
en utilisant flex et font awesome 5
FA Hosted URL - https://use.fontawesome.com/releases/v5.0.8/js/all.js
div {
display: inline-flex; /* make element size relative to content */
align-items: center; /* vertical alignment of items */
padding: 3px 10px; /* horizontal vertical position with padding */
border: 1px solid #ccc;
}
.svg-inline--fa { /* target all FA icons */
padding-right: 10px;
}
.icon-camera .svg-inline--fa { /* target specific icon */
font-size: 50px;
}
/* unnecessary styling below, ignore */
body {display: flex;justify-content: center;align-items: center;height: 100vh; flex-direction: column;}div{margin: 10px 0;}div {background-color: hsla(0, 0%, 87%, 0.5);}div:hover {background-color: hsla(212, 100%, 63%, 1);cursor: pointer;}
<script src="https://use.fontawesome.com/releases/v5.0.8/js/all.js"></script>
<div class="icon-camera">
<i class='fas fa-camera'></i>
hello world
</div>
<div class="icon-clock">
<i class='fas fa-clock'></i>
hello world
</div>
violon
La méthode la plus simple consiste à définir la propriété css vertical-align sur middle
i.fa {
vertical-align: middle;
}
Cela a bien fonctionné pour moi.
i.fa {
line-height: 100%;
}
Essayez de définir votre icône comme height: 100%
Vous n'avez rien à faire avec le wrapper (par exemple, votre bouton).
Cela nécessite Font Awesome 5. Vous ne savez pas si cela fonctionne pour les anciennes versions de FA.
.wrap svg {
height: 100%;
}
Notez que l'icône est en réalité un graphique svg
.
Une autre option pour ajuster la hauteur de ligne d'une icône consiste à utiliser un pourcentage de la propriété vertical-align
. Habituellement, 0% est le bas et 100%, mais vous pouvez utiliser des valeurs négatives ou plus de cent pour créer des effets intéressants.
.my-element i.fa {
vertical-align: 100%; // top
vertical-align: 50%; // middle
vertical-align: 0%; // bottom
}
Je voudrais envelopper le texte dans un afin que vous puissiez le cibler séparément. Maintenant, si vous flottez à gauche et à droite, vous pouvez utiliser line-height pour contrôler l’espacement vertical des colonnes. Le régler à la même hauteur que le (30px) l’alignera au milieu. Voir ici: http://jsfiddle.net/F3KyK/4/
Nouveau balisage:
<div>
<i class='icon icon-2x icon-camera'></i>
<span id="text">hello world</span>
</div>
Nouveau CSS:
div {
border: 1px solid #ccc;
height: 30px;
margin: 60px;
padding: 4px;
vertical-align: middle;
}
i{
float: left;
}
#text{
line-height: 30px;
float: left;
}
Pour ceux qui utilisent Bootstrap 4, rien de plus simple:
<span class="align-middle"><i class="fas fa-camera"></i></span>
Lorsque vous utilisez une boîte souple, l’alignement vertical des superbes icônes de police à côté du texte peut être très difficile. J'ai essayé les marges et le rembourrage, mais cela a déplacé tous les éléments. J'ai essayé différents alignements flex comme centre, début, ligne de base, etc., en vain. Le moyen le plus simple et le plus propre de n’ajuster que l’icône était de définir le paramètre div contenant div à position: relative; top: XX;
.