据说IE9可以通过使用CSS3标准定义的border-radius
来处理圆角。
那么边框半径和背景渐变的支持情况如何呢?是的,IE9将分别支持它们两个,但如果你将这两个混合在一起,渐变会溢出圆角。
我还发现阴影在具有圆角的框下面显示为实心黑色线条。
这里是在IE9中显示的图片:
我该如何解决这个问题?
据说IE9可以通过使用CSS3标准定义的border-radius
来处理圆角。
那么边框半径和背景渐变的支持情况如何呢?是的,IE9将分别支持它们两个,但如果你将这两个混合在一起,渐变会溢出圆角。
我还发现阴影在具有圆角的框下面显示为实心黑色线条。
这里是在IE9中显示的图片:
我该如何解决这个问题?
我也遇到了这个问题。另一个“解决方案”是在具有渐变和圆角的项目周围添加一个div。使该div具有相同的高度、宽度和圆角值。将溢出设置为hidden。基本上这只是一个遮罩,但对我有效。
HTML:
<div class="mask roundedCorners">
<div class="roundedCorners gradient">
Content
</div>
</div>
CSS:
.mask
{
overflow: hidden;
}
.roundedCorners
{
border-radius: 5px;
-moz-border-radius: 5px;
-webkit-border-radius: 5px;
}
.gradient
{
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#0065a4', endColorstr='#a0cf67',GradientType=0 ); /* IE6-9 */
}
.mask
ж·»еҠ padding-bottom:1px
пјҢд»ҘйҳІжӯўChrome/WebkitеҲҮж–ӯеә•йғЁиҫ№жЎҶгҖӮ - Kevin Borders这里是一种解决方案,它添加了一个背景渐变,并使用数据URI创建半透明图像来覆盖任何背景颜色。我已经验证它在IE9中正确地剪裁为边框半径。这比基于SVG的建议更轻量级,但缺点是不具备分辨率独立性。另一个优点:适用于您当前的HTML/CSS,不需要包含其他元素。
我通过网页搜索获得了一个随机的20x20渐变PNG,并使用在线工具将其转换为数据URI。所得到的数据URI比所有SVG混乱的CSS代码要小得多,甚至要小于SVG本身!(您可以使用条件样式、特定于浏览器的css类等仅在IE9上应用此条件。)当然,对于按钮大小的渐变生成PNG非常有效,但对于整个页面的渐变就不太实用了!
HTML:
<span class="button">This is a button</span>
CSS:
span.button {
padding: 5px 10px;
border-radius: 10px;
background-color: orange;
background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABQAAAAUCAYAAACNiR0NAAAAvUlEQVQ4y63VMQrDMAyF4d/BGJ+rhA4dOnTo0Kn3P4ExxnSoXVQhpx0kEMmSjyfiKAF4AhVoqrvqjXdtoqPoBMQAPAZwhMpaYkAKwH1gFtgG0v9IlyZ4E2BVabtKeZhuglegKKyqsWXFVboJXgZQfqSUCZOFATkAZwEVY/ymQAtKQJ4Jd4VZqARnuqyxmXAfiAQtFJEuG9dPwtMC0zD6YXH/ldAddB/Z/aW4Hxv3g+3+6bkvB/f15b5gXX8BL0z+tEEtuNA8AAAAAElFTkSuQmCC);
background-size: 100% 100%;
border: 2px solid white;
color: white;
}
background-size: 100% 103%; background-position:center;
更好。两个值都为100%会在顶部和底部添加一些奇怪的边框。 - Morten Christiansen我认为值得一提的是,在许多情况下,您可以使用插入的盒阴影来“伪造”渐变效果,并避免IE9中的难看边缘。这在按钮上特别有效。
请查看此示例:http://jsfiddle.net/jancbeck/CJPPW/31/
box-shadow: inset 0 -8px 10px rgba(0,0,0,0.15), 0 1px 0 rgba(255,255,255, 0.3), inset 0 1px 0 rgba(255,255,255, 0.3);
。 - Volomike我也遇到了这个bug。我的建议是在ie9中使用重复的背景图片来创建渐变。IE9可以在圆角边框后正确平铺图像(RC1版本已经支持)。
我不明白为什么要写100行代码来替换1行CSS,这并不简单或优雅。SVG很酷,但为什么要通过所有这些方式来实现渐变背景,而多年来已存在更简单的方案呢。
只需使用一个包装 div(圆角和溢出隐藏)来剪辑 IE9 的半径。 简单易用,可跨浏览器使用。SVG、JS 和条件注释是不必要的。
<div class="ie9roundedgradient"><div class="roundedgradient">text or whatever</div></div>
.ie9roundedgradient {
display:inline-block; overflow:hidden; -webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;
}
.roundedgradient {
-webkit-border-radius: 8px; -moz-border-radius: 8px; border-radius: 8px;
/* use colorzilla to generate your cross-browser gradients */
}
我也遇到了同样的问题,发现IE无法同时渲染边框半径和渐变,二者会冲突。解决这个问题的唯一方法是删除滤镜,通过SVG代码使用渐变,仅限于IE浏览器。
您可以从 Microsoft 的这个网站(专门用于将渐变转换为SVG)获取SVG代码:
http://ie.microsoft.com/testdrive/graphics/svggradientbackgroundmaker/default.html
享受 :)
IE9能够正确地处理border-radius和gradients。问题在于,IE9渲染了滤镜属性以及gradient。解决此问题的正确方法是,在使用filter属性的样式声明中禁用filters。
以下示例是如何最好地解决此问题:
您在主样式表中有一个按钮类。
.btn {
background: linear-gradient(to bottom, #1e5799 0%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 );
}
.btn { filter: none; }
url()
调用中使用 SVG。只剩下一个不支持的了,因此,去掉所有条件语句并为所有支持它的背景提供 SVG。对于其他人,请提供栅格化图像。然后这个 hack 就变得可管理了。 - Kevin Peno.button{
position: relative;
overflow: hidden; /*make childs not to overflow the parent*/
border-radius: 5px; /*don't forget to make it cross-browser*/
z-index:2; /*just to be sure*/
}
.button:before{
content: " "; /*make it a node*/
display: block;
position: absolute;
top:0;left:0;bottom:0;right:0; /*same width and height as parent*/
z-index: -1; /*force it to NOT overlay the TEXT node*/
/*GRADIENT declarations...*/
background: -ms-linear-gradient(top, #ff3232 0%,#7db9e8 100%);
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#ff3232',endColorstr='#7db9e8',GradientType=0 );
}