IE 11边框半径问题(在IE 9和IE 10中未出现)

28
我已经搜索了与IE 11中的border-radius相关的类似问题,但在Microsoft IE Developer网站上只找到一个描述了我目前也遇到的情况。那个帖子的答案是确保DOCTYPE为HTML5,而不是Quirks。
我目前正在完成网站的重新设计,是HTML5并且有正确的DOCTYPE,但是我仍然遇到了border-radius的奇怪问题。几乎每个我应用border-radius的元素都有1像素的偏移。如果我取消border-radius,问题就消失了,一切都很正常,但令人震惊的是,在IE 9或IE 10中没有这个问题。只有在几天前使用IE 11之后才出现了这个问题。我在Windows 7和IE 11以及Windows 8.1和IE 11上进行了测试,两者都存在这个问题。
示例1:

我这里有一个 border-radius: 5px 0 0 5px,然后使用单独的伪元素 :before 和 :after 来得到尖角三角形,但是边框半径似乎会产生1像素的白线,因此它不再与元素的其余部分平齐。即使在IE 8中也可以正常工作,但在IE 11中现在已经出现问题。如果我删除边框半径,则伪元素三角形将再次与元素平齐。

示例2:

一个以行内块显示的链接按钮,背景使用线性渐变,蓝色1像素实线边框,同时具有border-radius: 4px属性。但是边框半径会在蓝色实线边框内部形成另一个1像素白色边框。无论如何修改边框半径,这个白色边框都会存在,除非将边框半径设置为0。

示例3:

三个链接元素<a>设置为display: inline-block,位于一个相对于另一个下方的<div>内。底部<div>具有border-radius: 4px,而上方<div>内的<a>元素在左上角和右上角具有边框半径(如图所示)。IE 11显示两个<div>元素之间有1像素的间隙(如上面链接的其他帖子中所示)。但是,如果底部<div>上的边框半径设置为0,则间隙消失。

同样,在IE 9和IE 10中都没有出现这种情况;只有自从IE 11以来,具有边框半径的元素才出现了“1像素间隙”。我不知道该怎么解决它。当然,其他浏览器都没有受到影响。Firefox,Safari,Opera和Chrome都显示正常。

任何帮助都将不胜感激。


欢迎来到本站。你有第三个例子的图片吗?如果有,请在评论中留下URL,我会为你插入到问题中。你还提到了别人的帖子,能否在这里提供链接? - BoltClock
当然,这里是第三个示例的图片:http://i5.photobucket.com/albums/y162/jrob007/ie11_radius2_zpsd64f5917.png,微软开发者网站文章的链接是:http://social.msdn.microsoft.com/Forums/ie/en-US/a7808c7d-0178-4b10-b8b1-fbb06dd6ee28/ie-11-div-with-borderradius-bug?forum=iewebdevelopment - jrob007
你做了什么来修复它?这是否与在IE11上呈现的所有圆角上出现白色像素有关? - GlennG
4
这明显是IE11中的一个bug,并且后来在我帖子中链接的微软IE开发者论坛线程中得到了其他用户的确认。目前的解决方案是进行亚像素精确定位。在示例1中,我将三角形偏移了right:-19px;,在除IE11之外的每个浏览器中都看起来很好(如上所示)。解决方案是将其修改为right:-18.99999px;,这样在该示例中似乎可以正常工作。 - jrob007
@jrob007 不错的解决方法,对我有用(但是我将左侧设置为99.9999%以使三角形位置更准确)。请发布一个“答案”,这样其他人也能注意到它。 - icem
3个回答

2
据我所知,IE11存在一个与border-radius相关的bug。您描述的问题可能是更大问题的一部分。更多信息

0

分数像素解决方案可能会导致Firefox将文本向右偏移1个像素,这是由于他们针对特定字体大小的清晰度问题进行的像素对齐解决方案。

此msdn线程中的overflow:hidden包装器解决方案可能不太容易出现兼容性问题。


-3

我认为你在CSS中忘记了重置锚点的属性。

实际上,IE会自动添加1像素的边框,你必须在CSS的img标签和a标签中写入重置属性border:none。

就像下面的代码一样:

img {border:none;outline:none}
a {border:none;outline:none}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接