Home > Web Front-end > CSS Tutorial > Why Does `transform` Cancel `z-index` and How Can I Fix It?

Why Does `transform` Cancel `z-index` and How Can I Fix It?

Linda Hamilton
Release: 2024-12-26 06:43:09
Original
616 people have browsed it

Why Does `transform` Cancel `z-index` and How Can I Fix It?

z-index Canceled by Transform: Understanding Stacking Contexts

In the provided code, the ".test" element's z-index is canceled when the transform property is applied. To comprehend this behavior, we must delve into the concept of stacking contexts.

Self-Contained Stacking Contexts:

transform creates a stacking context for the ".test" element. Stacking contexts determine the order of elements based on their z-index values. Elements within the same stacking context are layered according to their z-indices, with higher values appearing in front.

Inherited Stacking Contexts:

The ".test:after" pseudo-element has a negative z-index (-1). However, this value only affects its position within the ".test" element's stacking context. It does not place ".test:after" behind ".test" because z-index is only meaningful within individual stacking contexts.

Resolving the Problem:

To have z-index work as expected, ensure that ".test" and ".test:after" share the same stacking context. While rotating ".test" with transform creates its own stacking context, using a wrapper element and rotating it allows ".test:after" to inherit the same context.

Updated Code with Wrapper:

By enclosing ".test" in a ".wrapper" and applying the transform to it, we preserve the z-index hierarchy for ".test:after" while still rotating both ".wrapper" and ".test."

<div class="wrapper">
    <div class="test">z-index is canceled.</div>
</div>
Copy after login
.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;
}
Copy after login

The above is the detailed content of Why Does `transform` Cancel `z-index` and How Can I Fix It?. For more information, please follow other related articles on the PHP Chinese website!

source:php.cn
Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn
Latest Articles by Author
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template