2012-05-03 10 views
8

Ich möchte, dass meine Links und Schaltflächen gleich aussehen, aber ich konnte den Text innerhalb eines "a" -Tags nicht auf die gleiche Weise ausrichten wie der "Knopf" -Tag. Es ist wichtig zu beachten, dass die Tags in der Lage sein müssen, mehrere Textzeilen zu verarbeiten (so dass die Zeilenhöhe nicht funktioniert).Vertikale Ausrichtung in der Mitte eines Inline-Block-Anchor-Tags

a,button { 
    display: inline-block; 
    -moz-box-sizing: border-box; 
    width: 150px; 
    height: 150px; 
    vertical-align: middle; 
    border: 1px solid #000; 
    text-align: center; 
} 

Siehe jsfiddle unter:

http://jsfiddle.net/bZsaw/3/

Wie Sie sehen können, ich kann es mit einer Kombination aus einem span-Tag innen und Einstellung zur Arbeit "display: table", um die "a" und Einstellung "display: table-cell" und "vertical-align: middle" zur Spanne, aber das funktioniert nicht in IE7.

a,button { 
    width: 150px; 
    height: 150px; 
    border: 1px solid #000; 
    text-align: center; 
} 

a { 
    display: table; 
    -moz-box-sizing: border-box; 
} 

a span, button span { 
    vertical-align: middle; 
    text-align: center; 
} 

a span { 
    display: table-cell; 
} 

Auf der Suche nach einer einfachen CSS-Lösung.

+0

Ich bin sehr traurig, dass Sie über IE7 kümmern :) –

+0

noch bei 20% in alle IE-Nutzung auf unserer Website. Ich fange mich an, diese Nummer wöchentlich zu sehen. :) – Travis

Antwort

11

Die einzige zuverlässige Art und Weise ich align Text vertikal gefunden habe und Verpackung des Textes ermöglichen, wenn sie zu lang ist mit einem 2-Behälter-Ansatz.

Der Außencontainer sollte eine Linienhöhe haben, die mindestens doppelt so hoch ist wie die des Innencontainers. In Ihrem Fall bedeutet, dass die folgenden:

a { 
    width: 150px; 
    height: 150px; 
    border: 1px solid #000; 
    text-align: center; 
    line-height: 150px; 
    display: block; 
} 

a span { 
    display:inline; 
    display:inline-table; 
    display:inline-block; 
    vertical-align:middle; 
    line-height: 20px; 
    *margin-top: expression(this.offsetHeight < this.parentNode.offsetHeight ? parseInt((this.parentNode.offsetHeight - this.offsetHeight)/2) + "px" : "0"); 
} 

float hinzufügen auf der einen Tag nach links, wenn Sie alles Inline wollen. Hier ist das aktualisierte Beispiel mit Langtext in dem A-Tag zu .. http://jsfiddle.net/bZsaw/13/

Sie die Zeilenhöhe auf der Spanne eingestellt werden, was auch immer Sie mögen und wenn es weniger als die Hälfte der Zeilenhöhe der Mutter ist, wird es center AND erlaubt Textumbruch, wenn Ihr Text die Größe des übergeordneten Containers überschreitet. Dies funktioniert bei allen modernen Browsern, soweit ich weiß.

+0

In der Nähe, um dies als die Antwort zu markieren. Können Sie die Kette der "Display" -Einstellungen erklären? – Travis

+0

Targets verschiedene Browser. – Gats

+0

Der Inline-Block wird verwendet, um hasLayout in IE7 auszulösen, was passieren muss, dass es keine Auswirkungen auf Mozilla hat. Es ist wirklich ziemlich fummelig, aber wir haben dies kürzlich für Eingabe-Labels durchgesehen, die sich an der Mitte ausrichten müssen und wo das Label zu lang wird. Funktioniert sehr gut. – Gats

4

Wenn Ihr Text nicht größer als die Breite der Box ist, können Sie die Zeilenhöhe gleich der Höhe der Box einstellen.

line-height:150px;

+0

Entschuldigung, ich hätte erwähnen sollen, dass die Schaltfläche und eine Tags in der Lage sein müssen, mehrere Textzeilen zu behandeln. Ich werde die Frage bearbeiten. – Travis

-2

Verwendenline-height:150px; und display-inline:block;