首頁 >web前端 >css教學 >為什麼 z-index 在轉換元素上失敗以及如何修復?

為什麼 z-index 在轉換元素上失敗以及如何修復?

DDD
DDD原創
2024-12-15 05:19:11840瀏覽

Why Does z-index Fail on Transformed Elements and How Can It Be Fixed?

z-index 由於轉換而取消

在您提供的程式碼中,CSS 屬性z-index 在應用於元素時會失去功能。應用變換屬性後進行測試。出現此問題的原因是轉換屬性為元素建立了新的堆疊上下文。

堆疊上下文決定重疊元素的顯示順序。通常,在同一堆疊上下文中,具有較高 z-index 值的元素會出現在具有較低 z-index 值的元素之上。但是,z-index 僅適用於 單一堆疊上下文。

在您的場景中,具有轉換屬性的 .test 元素已建立自己的堆疊上下文。偽元素 .test:after 雖然是 .test 的子元素,但仍保留在這個新的堆疊上下文中。因此,在 .test:after 上設定 z-index: -1 只會將其放置在 .test 的堆疊上下文中,但不會將其放置在 .test 後面。

要解決此問題,您可以 **建立一個新的透過將 .test 和 .test:after** 包裝在容器元素中來堆疊上下文。這種方法確保它們共享相同的堆疊上下文,從而允許 z-index` 按預期運行。

這是修改後的程式碼:

.wrapper {
    -webkit-transform: rotate(10deg);
}
.test {
       width: 150px;
       height: 40px;
       margin: 30px;
       line-height: 40px;
       position: relative;
       background: white;
}
.test:after {
       width: 100px;
       height: 35px;
       content: "";
       position: absolute;
       top: 0;
       right: 2px;
       -webkit-box-shadow: 0 5px 5px #999; /* Safari and Chrome */
       -webkit-transform: rotate(3deg); /* Safari and Chrome */
       transform: rotate(3deg);
       z-index: -1;
}

透過為 .wrapper 建立單獨的堆疊上下文,.test 和 .test:after 共享相同的上下文。這允許 z-index 正確地將 .test:after 定位在 .test 後面,同時保持所需的旋轉。

以上是為什麼 z-index 在轉換元素上失敗以及如何修復?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn