Wie kann ich Text vertikal an der Symbolschrift ausrichten?


71

Ich habe ein sehr einfaches HTML, das Klartext und Symbolschriftarten mischt. Das Problem ist, dass Symbole nicht genau auf derselben Höhe wie der Text gerendert werden:

<div class="ui menu">
  <a href="t" class="item"><i class="large home basic icon"></i><span class="nav-text"> Accueil</span></a>
  <a href="" class="item"><i class="large camera retro icon"></i><span class="nav-text"> Créations</span></a>
  <a class="item"><span class="nav-text">Qui-suis je </span><i class="large help basic icon"></i></a>
</div>

Geben Sie hier die Bildbeschreibung ein

Irgendwelche Vorschläge, um das Problem zu beheben?


URL-Inhalt funktioniert nicht jsfiddle.net/Fractaliste/caFk4/11
Rakesh Roy

Antworten:


87

In diesem Szenario können Sie, da Sie mit inlineElementen der Ebene arbeiten, vertical-align: middledie spanElemente für die vertikale Zentrierung hinzufügen :

.nav-text {
  vertical-align: middle;
}

Alternativ können Sie das Set displaydes Mutterelements flexund Satz align-itemsan centerfür vertikale Zentrierung :

.menu {
  display: flex;
  align-items: center;
}

1
Aus der Frage geht hervor, dass er die Symbole am Text ausrichten möchte, anstatt den Text an den Symbolen.
Arbel

3
@Arbel Ich bin mir nicht sicher - der Titel lautet: "Text an Symbolen ausrichten" . Es ist jedoch im Wesentlichen dasselbe.
Josh Crozier

@Arbel Gut, ich habe vergessen zu schreiben, wenn ich eine Grundlinie oder eine Ausrichtung in der Mitte benötigte, aber beide Vorschläge liefern ein viel saubereres Ergebnis als meine ursprüngliche Ansicht, sodass ich Ihre beiden Antworten als gut betrachte.
Fractaliste

51

Hier gibt es bereits einige Antworten, aber ich fand, dass Flexbox die sauberste und am wenigsten "hackige" Lösung ist:

parent-element {
  display: flex;
  align-items: center;
}

Um Safari <8, Firefox <21 und Internet Explorer <10 zu unterstützen (Verwenden Sie diese Polyfüllung , um IE8 + 9 zu unterstützen), benötigen Sie Herstellerpräfixe:

parent-element {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}

Sehr einfacher und unkomplizierter Weg
Zulkarnain Shah

Ist die Idee, diese Regeln auf das aElement anzuwenden ? Wenn dies der Fall ist, ändern Sie displaydie Verknüpfung, sodass ein Inline-Element in ein Blockelement konvertiert wird. Ich stimme nicht zu, dass dies die beste Lösung ist.
Gorzas

@ Gorzas In diesem Fall, glaube ich, könnten Sie inline-flexanstelle von nurflex
Moon Cheesez

28

vertical-align kann einen Einheitswert annehmen, sodass Sie bei Bedarf darauf zurückgreifen können:

{
  display:inline-block;
  vertical-align: 5px;
}

{
  display:inline-block;
  vertical-align: -5px;
}

3
Ich habe alle oben genannten Vorschläge ausprobiert, aber nur Ihr Vorschlag hat gut funktioniert. danke
HungNM2

5

Fügen Sie dies Ihrem CSS hinzu:

.menu i.large.icon,
.menu i.large.basic.icon {
    vertical-align:baseline;
}

DEMO


4

Um vertikal und horizontal zu zentrieren, verwenden Sie Folgendes:

position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%,-50%);

3

Stellen Sie line-heightdie vertikale Größe des Bildes ein und machen Sie es dann vertical-align:middlewie Josh.

Wenn das Bild ist 20px, hätten Sie

{
line-height:20px;
font-size:14px;
vertical-align:middle;
}

Soweit ich weiß, sollte ich Ihren CSS-Code auf die <a>Tags anwenden ?
Fractaliste

<span> ist ein Inline-Element. Möglicherweise möchten Sie ein Blockelement wie <div> verwenden, da <span> seltsam auf die Größe von CSS reagiert. Der Schlüssel hier ist, das Textelement auf die gleiche Größe wie Ihr Bild zu bringen, andernfalls wird die Mitte versetzt
Marian Udrea

sry misread, ja, Sie können es auch auf dem <a> -Tag tun, dasselbe gilt für, line-height = element height, dies wird alles perfekt ausrichten
Marian Udrea

1

Hinzufügen zu den Spannweiten

vertical-align:baseline;

Hat bei mir aber nicht funktioniert

vertical-align:baseline;
vertical-align:-webkit-baseline-middle;

hat funktioniert (auf Chrome getestet)


0

Sie können diese Eigenschaft verwenden: vertical-align:middle;

.selector-class { 
    float:left;
    vertical-align:middle; 
} 

0

Verwenden von CSS Grid

HTML

<div class="container">
    <i class="fab fa-5x fa-file"></i>
    <span>text</span>
</div>

CSS

.container {
  display: grid;
  grid-template-columns: 1fr auto;
  align-items: center;
}

Arbeitsbeispiel


0

Um die Antwort von Marian Udrea zu erweitern : In meinem Szenario habe ich versucht, den Text an einem Materialsymbol auszurichten. Materialsymbole haben etwas Seltsames, das verhindert hat, dass sie ausgerichtet werden. Keine der Antworten funktionierte, bis ich die hinzufügtevertical-align anstelle des übergeordneten Elements zum Symbolelement .

Wenn sich das Symbol 24pxin der Höhe befindet:

.parent {
    line-height: 24px; // Same as icon height

    i.material-icons {  // Only if you're using material icons
      display: inline-flex;
      vertical-align: top;
    }
}
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.