2013-10-17 8 views
7

Mein Absatz hat eine Höhe/Zeilenhöhe von 50px und text-align: center, die den Text zentriert. Aber p: before bewirkt, dass es in der Höhe/Zeilenhöhe ansteigt, wodurch der Text nach unten gedrückt wird. Ich möchte sowohl p als auch p: vorher vertikal zentriert sein.CSS :: vor Pseudo-Element Zeilenhöhe?

http://jsfiddle.net/MMAUy/

<p>Hover This</p> 

p { 
    background: red; 
    text-align: center; 
    height: 50px; 
    line-height: 50px; 
    font-size: 14px; 
} 

p:hover:before { 
    content: "icon"; 
    display: inline-block; 
    margin-right: 10px; 
    font-size: 3em; 
} 

Die Textlänge variiert, so glaube ich nicht, dass ich nur position: absolute für das Symbol verwenden kann ...

+0

Interessante Frage. Was variiert in der Länge? Der Text im Hover oder der eigentliche Text vor dem Hover? –

+0

Ich habe gerade gesagt, dass ich nicht position: absolute für das Symbol verwenden kann, weil der Text nicht immer der gleiche sein wird, und ich brauche das Symbol direkt neben dem Text. – Sunny

+0

Schauen Sie sich diese Geige, http://jsfiddle.net/MMAUy/1/ Ich entfernte die Höhe. Sieht so aus, als ob das Pseudo-Element der Box etwas Höhe hinzufügt ... Irgendwelche Ideen? – Sunny

Antwort

11

Der Grund dies geschieht, ist, weil line-height durch die geerbte wird :before Elemente, die auch ein inline-block Element ist.

Man könnte dies durch Floaten des :before Inhalt lösen, damit es von der Strömung zu entfernen, ist es unabhängig von der line-height machen.

jsFiddle here

HTML

<div> 
    <p>Hover This</p> 
</div> 

CSS

div { 
    background: red; 
    height: 50px; 
    line-height: 50px; 
    font-size: 14px; 
    text-align:center; 
} 

div:hover p:before { 
    content: "icon icon icon icon"; 
    margin-right: 10px; 
    font-size: 42px; 
    float:left; 
} 
p { 
    display:inline-block; 
    margin:0px; 
} 
+0

Gute Idee mit dem Schwimmer. Ich frage mich immer noch, ob es einen Weg gibt, dies zu erreichen, ohne zusätzliches Markup hinzuzufügen? – Sunny

Verwandte Themen