2017-01-02 3 views
2

Ich stieß auf einen CSS-Fehler in Firefox, der in IE und Chrome funktioniert. Das folgende Beispiel zeigt mehrere a Tags, die alle die kleinste mögliche Größe haben sollten und die a Tags mit .first-capitalized sollten ihren ersten Buchstaben groß geschrieben haben. Aber die Änderung mit dem Pseudo Selektor ::first-letter zerstört dieses Verhalten. Gibt es einen CSS-Hack, so verhält es sich in Chrome und IE?css erster Buchstabe Glitch in Firefox

(Sie können die korrekte Darstellung in Firefox angezeigt werden, wenn Sie die font-size Regel in der .first-capitalized Wählschalter deaktivieren und reaktiv.)

a{ 
 
    font-size: 14pt; 
 
    display: inline-block; 
 
} 
 
.first-capitalized{ 
 
    font-size: 9pt; 
 
} 
 
.first-capitalized::first-letter{ 
 
    font-size: 14pt; 
 
}
<a href="">LOREM</a> 
 
<a href="" class="first-capitalized">IPSUM</a> 
 
<a href="">DOLOR</a> 
 
<a href="" class="first-capitalized">SIT</a> 
 
<a href="">AMET</a> 
 
<a href="" class="first-capitalized">CONSETETUR</a> 
 
<a href="">SADIPSCING</a> 
 
<a href="" class="first-capitalized">ELITR</a>

Diese fixen nicht zuverlässig arbeiten Nach 20 Aktualisierungen scheinen sie ihre Funktionalität zu verlieren!

EDIT:

Ich schrieb ein "fix" in js, die ebenso wie die Korrektur funktioniert von @LukyVi

var continueFlag = true; 
for (var i = 0; continueFlag && i < document.styleSheets.length; i++) { 
    var sheet = document.styleSheets[i]; 
    for (var n = 0; continueFlag && n < sheet.cssRules.length; n++) { 
     var rule = sheet.cssRules[n]; 
     if (rule.selectorText == '.first-capitalized') { 
      var orig = rule.style['font-size']; 
      rule.style['font-size'] = '0px'; 
      continueFlag = false 
      window.requestAnimationFrame(function (rule) { 
       //font size = 0px gets rendered 
       window.requestAnimationFrame(function (rule) { 
        //font size = orig gets rendered 
        rule.style['font-size'] = orig; 
       }.bind(this, rule)) 
      }.bind(this, rule) 
      ) 
     } 
    } 
} 
+0

Es scheint so, als ob die Elemente mit dem Pseudonym-Element des ersten Buchstabens so viel Platz einnehmen, als wenn das ganze Wort die größere Schriftgröße hätte. Dann, wenn in Entwickler-Tools umgeschaltet Firefox korrigiert dies (wie OP erwähnt) Sieht aus wie ein Firefox-Fehler für mich – Danield

+0

@Danield genau was ich though :(Haben Sie irgendwelche Ideen, wie Sie dieses Problem beheben? – Feirell

Antwort

2

Also habe ich ein kleines Update für das Problem gefunden. Da das Problem beim Repaint der Seite behoben wurde, können Sie einfach ein kleines Keyframe hinzufügen, um das Repaint zu erzwingen.

Es ist wirklich hacky, aber es funktioniert. Bis Firefox das Problem behebt. Sie können sich auch dafür entscheiden, das ::first-letter Pseudo-Element nicht zu verwenden und etwas "fester codiertes" zu verwenden, wie den ersten Buchstaben Ihres Tags mit einem <span> zu umhüllen.

aber sagen, dass ich habe eine Lösung für Ihr Problem für eine Weile gesucht, und ein ähnlicher Beitrag Stackoverflow hat mir geholfen, zu dieser Lösung zu erhalten (dieses https://stackoverflow.com/a/7553176/1331432)

a{ 
 
    font-size: 14pt; 
 
    display: inline-block; 
 
    animation: fix 0.00000001s; 
 
} 
 
.first-capitalized{ 
 
    font-size: 9pt; 
 
    -moz-padding-end: 0; 
 
    font-stretch: condensed; 
 
} 
 
.first-capitalized::first-letter{ 
 
    font-size: 14pt; 
 
    color: red 
 
} 
 

 
@-moz-keyframes fix { 
 
    from { padding-right: 1px; } 
 
    to { padding-right: 0; } 
 
}
<a href="">LOREM</a> 
 
<a href="" class="first-capitalized">IPSUM</a> 
 
<a href="">DOLOR</a> 
 
<a href="" class="first-capitalized">SIT</a> 
 
<a href="">AMET</a> 
 
<a href="" class="first-capitalized">CONSETETUR</a> 
 
<a href="">SADIPSCING</a> 
 
<a href="" class="first-capitalized">ELITR</a>

Grüße,

Lucas.

+1

: D das ist perfekt Ich hatte eine ähnliche Idee und baute eine Lösung mit js. Aber Ihre ist so viel schöner! Vielen Dank für Ihre Mühe. – Feirell

+0

Froh, wenn dies hilft :) Aber alle Kredite geht an http://StackOverflow.com/ Benutzer/885556/Kizu – LukyVj

+1

BTW. Ich habe gerade eine js-Lösung hinzugefügt, die Ihrem (oder Kizus) sehr ähnlich ist. – Feirell