为什么设置溢出:隐藏; 打破背面可见性声明?

Ric*_*ich 5 css overflow css3 css-transforms

我有一个"可翻转"的模态对话,由两个div(正面和背面)组成:

<div class="modal-dialogue">
    <div class="modal-content">
        <div class="front">
             <h1>Front</h1>
        </div>
        <div class="back">
             <h1>Back</h1>
        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

使用CSS转换我通过将"翻转"类添加到模态内容中来翻转模式以显示背面:

.modal-content.flipped {
    -webkit-transform: rotateY(180deg);
}
Run Code Online (Sandbox Code Playgroud)

这一切都很好...... 除非我添加溢出:隐藏; 属性到模态内容.突然,后部div不可见,而前部div的背面变得可见(即使背面可见性设置为隐藏).

这看起来很奇怪.为什么设置overflow属性会以这种方式改变背面可见性?

你可以在这个小提琴中看到它:https://jsfiddle.net/amxp02mx/.它工作正常,但如果你在CSS中注释掉第31行,使溢出:隐藏,它就会被破坏.

有谁能解释为什么?

Vic*_*adu 1

document.querySelector(".modal-content")
    .addEventListener("click", function () {
    this.classList.toggle("flipped");
});
Run Code Online (Sandbox Code Playgroud)
    .modal-dialogue {
        z-index: 1050;
        display: block;
        width: 25rem;
        min-height: 30rem;
        margin-left: -12.5rem;
        margin-top: -15rem;
        position: fixed;
        left: 50%;
        top: 50%;
        -webkit-perspective: 800px;
    }
    .modal-content {
        width: 25rem;
        min-height: 30rem;
        position: relative;
        background-color: transparent;
        border-radius: 10px;
        outline: none;
        transition: 0.8s ease;
        -webkit-transform-style: preserve-3d;
        -webkit-transition: -webkit-transform 1s;
        margin: 5rem auto 0 auto;
        
        /* With overflow:hidden; the back of the panel is 
        not visible and the backface-visibility:hidden 
        stops working. Why? */
        overflow: hidden;
        
        /* With overflow: visible; it works fine. */
        overflow: inherit;
    }
    .modal-content div {
        display: block;
        position: absolute;
        width: 100%;
        height: 100%;
        -webkit-backface-visibility: hidden;
        color: white;
        font-size: 140px;
        font-weight: bold;
        text-align: center;        
        overflow: hidden;
    }
    .modal-content .front {
        background: red;
        z-index:0;
    }
    .modal-content .back {
        background: blue;
        -webkit-transform: rotateY(180deg);
        z-index:-1;
    }
    .modal-content.flipped {
        -webkit-transform: rotateY(180deg);
    }
Run Code Online (Sandbox Code Playgroud)
<div class="modal-dialogue">
    <div class="modal-content">
        <div class="front">
             <h1>Front</h1>

        </div>
        <div class="back">
             <h1>Back</h1>

        </div>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

您可以在文档中看到解释: https://drafts.c​​sswg.org/css-transforms/#grouping-property-values

您的问题也可以通过添加轻松解决

overflow:hidden;
Run Code Online (Sandbox Code Playgroud)

到 .modal-content div 规则

https://jsfiddle.net/amxp02mx/4/