【问题标题】:CSS3 does ::after inherit the height and margin of the origin element in IE9?CSS3 ::after 是否继承了 IE9 中原始元素的高度和边距?
【发布时间】:2011-08-23 07:38:55
【问题描述】:

我有这个 HTML:

<div class="demo">hello world</div>

还有这个 CSS:

 .demo { width: 100px; 
         height: 50px; margin-bottom: 50px; 
         background-color: red; position: relative;
         z-index:-1;
         filter: progid:DXImageTransform.Microsoft.gradient(GradientType=0,startColorStr=#40ffffff,EndColorStr=#12ffffff);zoom: 1;}
 .demo::after { 
         width: 95px; 
         height: 95px; 
         position: absolute; left: 0; top: 0; border: 5px solid blue; content:""; 
         background-color: yellow; opacity: .75;}

我希望伪元素完全覆盖原始元素(对于 IE7,8,它包含 50% 的渐变 - 因此高度:50%,边距底部:50%;)

但是在 IE9 中... ::after 元素仅覆盖 50%,尽管我特别将高度设置为 44px。这是因为使用了过滤器吗?知道如何覆盖它吗?

这是一个JSBin 的例子。

感谢您的帮助。

更新

这是整个事情的一个例子:

Example

注意事项:

  • 在 background.css 文件中查看 cmets
  • 我无法更改元素结构或将渐变分配给 .ui-icon 以外的任何其他元素
  • 渐变应覆盖页脚的 50%。页脚为 44 像素,因此渐变在 22 像素处停止
  • IE7+8 无法做到这一点(或颜色停止),所以我将 .ui-icon 高度设置为 22px 加上 filter-gradient
  • 使用 ::before 我为位于 .ui-icon 顶部的所有其他浏览器添加渐变

问题 1 = IE9+ 渲染 ::before - 我使用 z-index:-1,所以 .ui-icon 位于 ::before = OK

问题 2 = 在 IE9+ 上 ::before 背景被 .ui-icon 截断。

问题:如何避免 ::before 中的渐变被切断?

【问题讨论】:

    标签: css internet-explorer-9 pseudo-element


    【解决方案1】:

    这是因为使用了过滤器吗?知道如何覆盖它吗?

    是的,这是因为filter。使用filter 会导致overflow:hidden-esque 效果。

    您可能知道:after 在元素内部呈现,如下所示:

    <div class="demo">hello world<div:after></div:after></div>
    

    如果加上overflow: hidden,那么所有浏览器都一样坏:http://jsbin.com/otilux/3


    那么,如何解决呢?一种选择是使用::before 来处理绘制具有filter 的事物。

    见:http://jsbin.com/otilux/4

    这看起来和以前在 Chrome/Firefox 中一样,现在在 IE9 中也一样。

    由于使用::after 而不是:after,我可以看到您并没有尝试支持 IE8。因此,另一种选择是使用SVG gradient instead of filter

    【讨论】:

    • 谢谢!一些我不知道的东西。我正在尝试做一个 50% 自上而下的渐变跨浏览器(包括 IE7,8)。由于 IE 不会 50% 停止,我将 IE7,8 渐变放在原始元素中,将高度降低到 50% 并使用 IE-filter-gradient。然后我使用 ::before 在原始元素上方放置一个元素,该元素包含所有其他浏览器的渐变语法。 OK IE7,8 使用原始元素,OK FF、Opera、Chrome、Safari 使用 ::before 元素,BREAKS IE9+ 因为我的 ::before 渐变被切断。故问。检查您的输入...
    • 你能告诉我在 Chrome/Firefox 中工作的版本吗?
    • ..另外,如果您需要支持 IE7,为什么要使用 ::after:before/::before/:after/::after - 它们都不能在 IE7 中工作。
    • 我忘记了,抱歉。你还需要帮助吗?
    • 事实上...是的。这是刚刚完成的示例的链接:stokkers.mobi/valuables/bartender.html 如果你在 IE9 中打开它,你会看到按钮背景和图标背景不匹配,因为......(我猜)a).ui -icon::before 仅在 IE9+ 中继承 .ui-icon 的高度 b) .ui-icon 仅在 IE9+ 中位于 .ui-icon::before 前面
    猜你喜欢
    • 2011-09-29
    • 2011-11-01
    • 2012-08-20
    • 1970-01-01
    • 1970-01-01
    • 2016-01-14
    • 2014-06-07
    • 2012-05-09
    • 1970-01-01
    相关资源
    最近更新 更多