2015-01-23 9 views
12

Ich habe ein seltsames Problem bei der Verwendung einer benutzerdefinierten Schriftart auf einer neuen Webanwendung, an der ich gerade arbeite.Fix benutzerdefinierte Schriftart line-height mit CSS

Diese benutzerdefinierte Schriftart (FF DIN) Seem natürlich vertikale außer-line-Höhe zu haben, die mich zwingen, einige Padding-Top-Hack setzen, um den oberen Platz auf Element wie Schaltfläche und Eingabe zu kompensieren.

Beispiel: die Schriftart in grün (Helvetica Neue) korrekt ausgerichtet, wo die benutzerdefinierte Schriftart wir (FF DIN) verwenden vertikal außermittig:

enter image description here

Gibt es eine bekannte Art und Weise um dieses Zentrierungsproblem auf der CSS natürlich zu beheben, irgendwie das Schriftart-Grundlinienverhalten zu erzwingen?

Vielen Dank.

+1

Hierbei handelt es sich nicht um Linienhöhe, sondern um vertikale Platzierung von Glyphen. –

+0

Eine andere plausible Lösung? Abgesehen von der akzeptierten Lösung? Ich möchte die Schriftart nicht manuell bearbeiten –

Antwort

1

Das ist etwas, auf das ich in letzter Zeit gestoßen bin. Die Grundlinie der Schriften, die ich aus irgendeinem Grund verwendete, passte nicht zusammen, sodass ich nach unten ausgerichtet war und die Höhe der Linie erhöhte, anstatt das Padding hinzuzufügen.

So habe ich mein Problem gelöst, wenn Sie einen Link zu einem Code-Stift haben, kann ich überprüfen, ob es für Sie funktioniert, oder ob eine andere Lösung besser wäre.

p { 

    vertical-align: text-bottom; 
    line-height: 1.5; 

} 
+0

Ich habe versucht, aber das hat nichts geändert, ich kann nicht wirklich einen Code-Up, da diese Schriftart geschützt ist – kirkas

6

Das Problem ist hier nicht die Zeilenhöhe, sondern die vertikale Platzierung von Glyphen, insbesondere die Position der Textgrundlinie. Das hat der Schriftdesigner entschieden; Der Designer zeichnet Glyphen und platziert sie in das em-Quadrat, das konzeptionelle Gerät, dessen Höhe der Schrifthöhe entspricht (oder definiert ist). Insbesondere entscheidet der Designer, wie viel Platz sich einerseits unter der Grundlinie und andererseits über der Höhe von Großbuchstaben befindet. Typischerweise sind diese Räume gleich oder fast gleich, müssen aber nicht sein. Wenn sie sich wesentlich unterscheiden, ist die beabsichtigte Verwendung der Schriftart wahrscheinlich speziell und beinhaltet keine Verwendung wie die im Bild gezeigte. Dies legt nahe, dass die Schriftartwahl neu überdacht werden sollte, aber nehmen wir an, dass es behoben ist.

Es gibt mehrere Möglichkeiten, mit dem Problem umzugehen. Wenn unter den Buchstaben zu viel Platz ist, verringert das Reduzieren von line-height es, aber es wirkt sich auch auf den Raum darüber aus. Die obere Polsterung hilft in gewissem Sinne, erhöht jedoch die Gesamthöhe des Elements. Sie können auch mit vertical-align spielen, aber es beeinflusst die Höhe der Zeilenfelder.

Wahrscheinlich ist der einfachste Ansatz relative Positionierung zu verwenden, vorausgesetzt, dass das Problem mit einem einlinigen Text befasst ist. Bei der relativen Positionierung wird der Inhalt nur auf eine bestimmte Weise verschoben, ohne dass das Layout dadurch beeinträchtigt wird. Sie würden hierfür einen Wrapper benötigen, d. H. Ein Element, das den Text enthält, so dass Sie nur den Text und nicht den Hintergrund verschieben können.

Die folgende Demo verwendet eine Google-Schrift Candal, die ein ähnliches Problem hat, aber in einer anderen Richtung: die Basislinie ist zu niedrig. Modifikationen dieses Ansatzes, um das ursprüngliche Problem zu lösen, sollten offensichtlich sein, aber der genaue Betrag der Verschiebung muss empirisch bestimmt werden (oder aus Informationen, die aus der Schriftartdatei unter Verwendung eines Schriftart-Inspektors extrahiert werden). Natürlich sollte die Einheit em hier verwendet werden, auch wenn Sie die Schriftgröße in Pixel oder Punkten festlegen (so dass der Code nicht geändert werden muss, wenn die Schriftgröße eines Tages geändert wird).

<link href='http://fonts.googleapis.com/css?family=Candal' rel='stylesheet'> 
 
<style> 
 
div { font-family: Candal } 
 
div { background: lightgreen; font-size: 200%} 
 
</style> 
 
<p>What we have got initially: 
 
<div>BRAKE HOSE AND AIR CHAMBER</div> 
 
<p>Reducing line height (even “setting solid”) does not really help: 
 
<div style="line-height: 1">BRAKE HOSE AND AIR CHAMBER</div> 
 
<p>But displacing the text upwards by 0.1em does: 
 
<div><span style="position: relative; bottom: 0.1em"> 
 
BRAKE HOSE AND AIR CHAMBER</span></div>

+0

Das funktioniert, aber ich bin auf der Suche nach einem skalierbaren Weg Um dies über alle meine Elemente (Schaltfläche/Eingabe) zu ändern, kann ich keine Spanne in jede Schaltfläche einfügen, und das wird nicht die Eingabe ausrichten. – kirkas

+0

Für Schaltflächen funktioniert die Auffüllmethode wahrscheinlich gut genug. Wenn jedoch eine Schriftart Probleme wie diese verursacht, sollte im Allgemeinen eine andere Schriftart gewählt werden. –

1

Ich habe dieses Problem als gut in Vergangenheit hatten auch verschiedene Browser unterschiedliche Zeilenhöhen gab! Ich denke, es passiert, wenn ich den Webfont-Generator benutze und kann nur so weit wie ich weiß, mit einer anderen Zeilenhöhe behoben werden.

Haben Sie fontsquirrel probiert? Es gibt einige Optionen mit unterschiedlichen Ergebnissen.

http://everythingfonts.com/font-face

http://www.font2web.com/

http://www.fontsquirrel.com/tools/webfont-generator

https://www.web-font-generator.com/

+0

Fontsquirrel hat eine Option zum Ändern von x-height, außer dass font von fontshop geschützt ist. – kirkas

1

In Chrome habe ich festgestellt, dass wenn Sie eine Schriftart-Gesichtserklärung verwenden. Sie können das Problem mit der Zeilenhöhe lösen, indem Sie entweder den HTML-Code aufrufen oder einfach die Zeilenhöhe NACH der Font-Deklaration in Ihrem CSS deklarieren.

Ich denke Chrome weiß einfach nicht, wie man die Zeilenhöhe berechnet, bis es die benutzerdefinierte Schriftart gerendert hat.