【发布时间】:2017-05-16 10:58:51
【问题描述】:
我在 Firefox 中遇到了一个 CSS 故障,该故障在 IE 和 Chrome 中运行良好。
下面的示例显示了多个a 标签,它们都应该是尽可能小的尺寸,并且带有.first-capitalized 的a 标签的第一个字母应该大写。但是使用伪选择器::first-letter 进行更改会破坏这种行为。是否有一个 css hack,所以它的行为就像在 Chrome 和 IE 中一样?
(如果您停用并响应.first-capitalized 选择器集中的font-size 规则,您可以在Firefox 中显示正确的表示。)
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>
这些修复不可靠,大约 20 次刷新后,它们似乎失去了功能!
编辑:
我刚刚在 js 中写了一个“修复”,它的工作原理与 @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)
)
}
}
}
【问题讨论】:
-
似乎带有第一个字母伪元素的元素占用的空间与整个单词的字体大小一样多。然后,当在开发人员工具中切换时,firefox 修复了这个(正如 OP 所提到的)在我看来就像一个 firefox 错误
-
@Danield 正是我所想的 :( 你对如何解决这个问题有任何想法吗?
标签: css firefox pseudo-element