【问题标题】:Transformed elements with generated content/pseudo element don't adhere to z-index具有生成内容/伪元素的转换元素不遵守 z-index
【发布时间】:2012-08-11 08:02:23
【问题描述】:

基本上,如果您查看this,您会发现我有一个应用了转换的元素,它已经生成了内容。 :after 元素应该出现在 div 后面,但事实并非如此。再多的!important-ing 也没有任何效果。

如何让伪元素出现在div 后面?

我不关心 IE 8 或更低版本。

【问题讨论】:

    标签: css z-index pseudo-element css-transforms


    【解决方案1】:

    虽然这是一种奇怪且经常是不受欢迎的行为,但它也是意料之中的。本质上,转换一个元素会创建一个新的堆叠上下文,对于伪元素来说,这意味着它们不能再位于它们所基于的元素后面。

    查看这篇文章了解更多信息:https://daneden.me/2012/04/22/css-transforms-and-z-index/

    目前,解决此问题的唯一方法是在父元素上创建新的堆叠上下文(即创建一个包装器元素并对其进行转换)。这是一个例子:http://jsfiddle.net/joshnh/GzWnb/

    HTML:

    <div class="wrapper">
        <div id="box"></div>
    </div>
    

    CSS:

    .wrapper {
        -moz-transform: rotate(10deg);
        -webkit-transform: rotate(10deg);
        transform: rotate(10deg);
    }
    #box{
        width: 200px; 
        height: 200px;
        left: 100px;
        top: 100px;
    
        background:blue; 
        position: absolute;
        &:after{
            content: "";
            width: 100px;
            background: orange;
            height: 100px;
            position: absolute;
            left: 120px;
            top: 120px;
            z-index: -2!important;
        }
    }
    

    【讨论】:

    • 是的,我在研究时看到了那篇文章,但我希望它可能已经被处理了。我知道这是“预期的”,但几乎没有预期。我知道它应该创建一个“新的”堆叠上下文,但是堆叠上下文应该完全基于预先存在的堆叠上下文。或者,如果没有,用户应该有办法修改所述新的堆叠上下文。
    • 是的,我同意你的看法。我不完全理解为什么会做出这个决定,并希望有办法绕过它。请记住,在基础元素上设置 z-index(就像您当前所做的那样)将做同样的事情,将不透明度设置为小于 1。
    • 希望我能再次投票。有同样的问题并用谷歌搜索,最后在这里:)也许我应该吸取教训
    • 文章链接失效,请访问web archive
    猜你喜欢
    • 2014-03-19
    • 1970-01-01
    • 2013-04-06
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2011-12-10
    • 2012-09-09
    相关资源
    最近更新 更多