IE9错误,css内容字体大小增加
我在IE9中发现了一个bug,但谷歌搜索它并没有帮助我找到任何解决方案 以下代码在FF3+4、Chrome、Opera甚至IE8中都可以正常工作,但在IE9中却不行 HTML:IE9错误,css内容字体大小增加,css,internet-explorer-9,Css,Internet Explorer 9,我在IE9中发现了一个bug,但谷歌搜索它并没有帮助我找到任何解决方案 以下代码在FF3+4、Chrome、Opera甚至IE8中都可以正常工作,但在IE9中却不行 HTML: <div class="outer"> <p class="inner">Lorem ipsum dolor</p> </div> IE9中的“sit amet”是巨大的,因为它似乎一次又一次地增加字体大小。不可能用“!important”或其他增加特异性的方法覆
<div class="outer">
<p class="inner">Lorem ipsum dolor</p>
</div>
IE9中的“sit amet”是巨大的,因为它似乎一次又一次地增加字体大小。不可能用“!important”或其他增加特异性的方法覆盖它(例如,“div.outer”应该已经这样做了)。甚至似乎它在同一个声明中得到了相乘,也就是说,div.outer p:after,div p.inner:after
不会乘以3,而是乘以9
(请注意,“内部”和“外部”类在这里是不必要的。通过反复声明divp{}
也会发生同样的情况。但这仅在类作为实际示例时才有意义。)
这是一个测试页面:
有什么解决办法吗
编辑:
澄清两个误解:
em
时子元素乘以其父元素字体大小的常见行为。错误在于生成内容中的字体大小不能被覆盖,并且在尝试覆盖时会成倍增加。也就是说,在div p:after
中设置字体大小一次有效,但是再次设置字体大小会倍增而不是覆盖字体大小您可以尝试使用
rem
而不是em
,然后您的大小将相对于基本字体大小,而不是相乘
我想这里的区别在于IE9将生成的内容视为子元素,而其他浏览器则不是,因此倍增。在Firefox 4.0.1中,我看到测试页面“sit amet”非常大。你确定这只是IE而不是实际的规范行为吗
编辑:还有safari。我在Mac电脑上。我不认为这是一个IE bug。我在使用ems的其他版本的IE中也看到过类似的情况。尝试设置
HTML {
font-size: 100%;
}
应该修好它 这可能与从IE8到IE9解析的DOM树之间的差异有关
Internet Explorer 8:
- 文本-Lorem ipsum dolar
- 文本-空文本节点
- 文本-空文本节点
- 文本-Lorem ipsum dolar
- 文本-空文本节点
- 文本-空文本节点
em
或%
):添加另一个类,使用伪元素字体大小
减小大小
我已经编写了一个基本代码,但基本代码如下:
<p class="one">Test (1.25em = 20px)</p>
<p class="one two">Test (2em = 32px but 2.5em = 40px in IE)</p>
<p class="one one-ie two">Test (2em = 32px)</p>
大多数浏览器将使用
.two::before
覆盖.one ie::before
选择器,ie的组合将基本上否定先前的字体大小。如果IE修复了这个错误,允许伪元素样式覆盖而不是复合,那么黑客行为就会像其他浏览器一样被覆盖。哇,我还没有听说过rem
。这肯定能解决问题!:)如果IE9真的将生成的内容视为子元素,这是否意味着它的DOM(至少部分)被(再次)破坏了?@selfthinker可能是这样的-我还没有检查它到底应该如何工作,如果你问的话,你会得到一个明确的答案。请记住:这并不能解决真正的问题,但是一个足够好的解决方法。如果父字体大小应可调整,以便每个子字体自动增长到相同的比例,则此解决方案不起作用。也就是说,每当父字体大小增加或减少时,具有rem
值的子字体都会保留其(错误的)字体大小。实际上,在IE中,生成的内容从自身继承字体大小,而不是从父元素继承字体大小。这会导致递归字体大小计算,导致结果失控。令人惊讶的是,微软在三个完整的版本(9-11)中都没有解决这个问题。不,“sit amet”应该在任何地方都很重要(即3em),但在IE9中它要大得多(即11.7em!)。请看一下IE9,你会明白我的意思。我只是在问题中添加了两个截图来澄清这一点。不,关键是生成内容中的字体大小不能被覆盖。这就是问题所在。如果你不能覆盖它,字体大小:100%
也帮不上忙。嗯,说得好。但这意味着删除空格可以解决问题,但事实并非如此。当我删除空白时,它看起来像IE8示例(即,中间没有“文本-空文本节点”),错误仍然存在。这种anwsers类型是黑客最喜欢的!做了另一个我觉得更容易理解的JSFIDLE,但那可能就是我:)是的-我应该解释一下,。一个ie
字体大小是1/。一个字体大小
(因此1/1.25=0.8)
<p class="one">Test (1.25em = 20px)</p>
<p class="one two">Test (2em = 32px but 2.5em = 40px in IE)</p>
<p class="one one-ie two">Test (2em = 32px)</p>
body {
font-size: 16px;
}
.one::before {
content: "::before";
font-family: monospace;
font-size: 1.25em;
margin-right: 10px;
}
.one-ie::before {
font-size: 0.8em;
}
.two::before {
font-size: 2em;
}