2010-06-23 26 views
17

Wie werden Symbole (links) und Text (rechts) oder der entgegengesetzte Text auf der linken Seite und das Symbol auf der rechten Seite am besten ausgerichtet?Symbole mit Text ausrichten

Muss das Symbol Bild und Text die gleiche Größe haben? Idealerweise möchte ich, dass sie anders sind, aber auf der gleichen vertikalen Ausrichtung sind.

Ich verwende Hintergrundposition CSS-Eigenschaft, um die Symbole von einem größeren Bild zu erhalten.

Hier ist, wie ich es jetzt mache, aber ich habe Probleme mit entweder sie auf der gleichen Linie oder vertikal nach unten ausgerichtet sein.

Text

Dies ist, was ich bekommen, nachdem ich Ihre Vorschläge versuchen.

Obwohl der Text jetzt mit dem Symbol ausgerichtet ist, wird er über das Symbol rechts neben dem gewünschten Symbol gelegt. Bitte beachten Sie, dass ich die Hintergrundposition verwende, um das Symbol aus einer größeren Anzahl von Bildern anzuzeigen.

Im Grunde bin ich immer

<icon><10px><text_and_unwanted_icon_to_the_right_under_it> 
<span class="group3_drops_icon group3_l_icon" style="">50</span> 

group3_drops_icon { 
background-position:-50px -111px; 
} 

.group3_l_icon { 
-moz-background-clip:border; 
-moz-background-inline-policy:continuous; 
-moz-background-origin:padding; 
background:transparent url(/images/group3.png) no-repeat scroll left center; 
height:35px; 
overflow:hidden; 
padding-left:55px; 
} 

Antwort

35

ich in der Regel background verwenden:

<style type="text/css"> 
.icon { 
background-image: url(path/to/my/icon.jpg); 
background-position: left center; 
background-repeat: no-repeat; 

padding-left: 16px; /* Or size of icon + spacing */ 
} 
</style> 

<span class="icon">Some text here</span> 
+0

+1 Dies ist, was ich benutze, mit Variationen. Nur so können Bilder in allen Browsern in Bezug auf die Textbasislinie ausgerichtet werden. – Robusto

+0

Danke, bitte lesen Sie die Änderungen für meine Kommentare. – badnaam

+0

Wenn Sie Ihre Hintergrundsymbole kacheln und der Text sich rechts befindet, sollten Sie Ihre Symbole vertikal und nicht horizontal kacheln. – rossipedia

23

Sie können es auf der gleichen Linie tun mit vertical-align und line-height

<p style='line-height: 30px'> 
    <img src='icon.gif' style='vertical-align: middle' />Icon Text 
</p> 

Alternativ können Sie den Hintergrund Ansatz mit no-repeat gehen und Positionierung:

span.icontext { 
    background: transparent url(icon.gif) no-repeat inherit left center; 
    padding-left: 10px /* at least the width of the icon */ 
} 

<span class="icontext"> 
    Icon Text 
</span> 
8

Leider ist keine dieser Antworten kugelsicher und jeder hat einen großen Fehler.

@rossipedia Ich verwendete alle meine Symbole auf diese Weise und es funktioniert ganz gut. Aber, und das ist ein großes, aber es funktioniert nicht mit Sprites, da Sie die background-position -Eigenschaft verwenden, um das Symbol innerhalb des Containers zu platzieren, der Ihren Text enthält. Und nicht Sprites verwenden, wo Sie können, ist schlecht für die Leistung und SEO, so dass sie unerlässlich für jede gute moderne Website.

@Jamie Wong Die erste Lösung hat zwei Markup-Fehler. Elemente semantisch korrekt zu verwenden, wird von einigen leider unterschätzt, aber Sie sehen die Vorteile in der Priorisierung von Form in Ihrer Suchmaschinen-Rangliste. Als erstes sollten Sie kein P-Tag verwenden, wenn der Inhalt kein Absatz ist. Verwenden Sie stattdessen span. Zweitens ist der img-Tag für Inhalt nur gemeint. In sehr speziellen Fällen müssen Sie diese Regel möglicherweise ignorieren, aber das gehört nicht dazu.

Meine Lösung: Ich werde dich nicht anlügen, ich habe viele Orte in meiner Zeit eingecheckt und IMHO gibt es keine optimale Lösung. Diese beiden Lösungen sind diejenigen, die am nächsten zu dem kommen, aber:

Inline-Block-Lösung

HTML: 
<div class="container"> 
    <div class="icon"></div> 
    <span class="content">Hello</span> 
</div> 

CSS: 
.container { 
    margin-top: 50px; 
} 

.container .icon { 
    height: 30px; 
    width: 30px; 
    background: #000; 
    display: inline-block; 
    vertical-align: middle; 
} 
.container .content { 
    display: inline-block; 
    vertical-align: middle; 
} 

"display: inline-block;" ist eine schöne Sache. Sie können so viel damit machen und es spielt sehr gut mit Responsive Design. Aber es hängt von Ihrem Kunden ab. Inline-Block funktioniert nicht gut mit IE6, IE7 und verursacht immer noch Probleme mit IE8. Ich persönlich unterstütze IE6 und 7 nicht mehr, aber IE8 ist immer noch da draußen. Wenn Ihr Kunde seine Website wirklich benötigt, um in IE8 verwendbar zu sein, ist Inline-Block leider keine Option. Bewerte dies zuerst. Ersetze den schwarzen Hintergrund des Icon-Elements mit deinem Sprite, platziere es, wirf dort keine Wiederholung und voilà, da hast du es. Oh ja, und als ein Plus, können Sie den Text beliebig ausrichten mit vertikal ausrichten.

PS .: Mir ist bewusst, dass dort ein leeres HTML-Tag ist, wenn jemand einen Vorschlag hat, wie man es füllt, wäre ich dankbar.

Feste Höhe Lösung

.clearfix:after { 
    content: "."; 
    display: block; 
    clear: both; 
    visibility: hidden; 
    line-height: 0; 
    height: 0; 
} 

.clearfix { 
    display: inline-block; 
} 

html[xmlns] .clearfix { 
    display: block; 
} 

* html .clearfix { 
    height: 1%; 
} 
.container { 
    margin-top: 50px; 
    border: 1px solid #000; 
} 

.container .icon { 
    height: 30px; 
    width: 30px; 
    background: #000; 
    float:left; 
} 
.container .content { 
    line-height: 30px; 
    float: left; 
    display: block; 
} 

Ich hasse diese. Es verwendet eine feste Zeilenhöhe für den Text, und wenn Sie die gleiche Höhe wie das Feld des Symbols wählen, wird der Text auf diese Höhe zentriert. Um den Text an der Spitze auszurichten, schneiden Sie die Zeilenhöhe ab, und an der Unterseite müssen Sie das mit Position: absolute und einer festen Breite und Höhe für den Container beheben. Ich werde mich nicht damit befassen, es sei denn jemand bittet darum, weil es ein ganzes Problem für sich selbst ist und viele Nachteile mit sich bringt. Der Hauptnachteil dieses Pfades ist die feste Höhe. Feste Höhen sind immer unflexibel und vor allem bei Text kann es zu einer Reihe von Problemen führen (Sie können den Text nicht mehr als Benutzer skalieren, ohne dass er abgeschnitten wird, und verschiedene Browser rendern Text anders). Stellen Sie also sicher, dass der Text in keinem Browser abgeschnitten ist und dass er innerhalb der Zeilenhöhe etwas Spielraum hat. S.S .: Vergessen Sie nicht den Clearfix für den Container. Und natürlich, ersetzen Sie den schwarzen Hintergrund mit Ihrem Sprite und der entsprechenden Position + keine Wiederholung.

Fazit

Inline-Block verwenden, wenn überhaupt möglich. ;) Wenn es nicht ist, atme tief durch und versuche die zweite Lösung.

+2

'Und nicht mit Sprites, wo Sie können, ist schlecht für die Leistung und SEO, so dass sie unerlässlich für jede gute moderne Website.' Die obigen Lösungen sind das perfekte Beispiel für eine Situation, in der Sie sich von Sprites lösen müssen (für nur ein paar Bilder). Zu sagen, es wird weh tun SEO ist eine Strecke. – JeremyE

+0

Sehr wahr! Ich benutze Icon Fonts fast ausschließlich, außer natürlich, ich muss mehrfarbige Icons verwenden. Es gibt auch einen Hack für Inline-Block, also ist das nicht das Problem, das ich dachte, es war. – Merritt6616