CSS:Safari 上的堆叠顺序问题
CSS: Stacking Order Issue on Safari
我正在尝试使用 CSS 创建形状,使用前后伪元素。该形状在 Chrome 和 Firefox 中的呈现方式与我预期的一样,但是在 Safari 中,:before 内容最终堆叠在 :after 内容之上,我不确定为什么。看起来它与我的 :before 元素中的转换有关,但我不确定我到底做错了什么,以及为什么它只是在 Safari 中有所不同,而且我不知道如何修复它。
This is what I get on Chrome/Firefox
and this is what I get in Safari
.outer {
position: absolute;
top: 50px;
left: 100px;
transform: rotate(27deg);
}
.shape {
position: absolute;
height: 100px;
width: 100px;
background-color: blue;
border-radius: 50%;
}
.shape:before {
content: '';
position: absolute;
left: 36px;
top: 26px;
width: 200px;
height: 48px;
background-color: inherit;
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
transform: perspective(200px) rotateY(70deg);
}
.shape:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 92px;
height: 92px;
border-radius: 50%;
background:
radial-gradient(blue 17%, transparent 19%),
radial-gradient(red 26%, transparent 28%),
radial-gradient(blue 40%, transparent 42%),
red;
}
<div class="outer">
<div class="shape"></div>
</div>
不确定到底是什么问题(而且我无法测试)但是您可以调整 :before
形状以考虑径向渐变以创建透明部分并避免重叠,即使元素在顶部。
这是一个示例,其中我明确地将 :before
放在顶部并且它有效。我也减少了一些代码。
.shape {
position: absolute;
top: 50px;
left: 100px;
height: 100px;
width: 100px;
transform: rotate(27deg);
}
.shape:before {
content: '';
position: absolute;
left: 36px;
top: 26px;
width: 200px;
height: 48px;
background: radial-gradient(25px 23px at left,transparent 98%, blue 100%);
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
transform: perspective(200px) rotateY(70deg);
z-index:1;
}
.shape:after {
content: '';
position: absolute;
top: 0;
left:0;
right:0;
bottom:0;
border-radius: 50%;
border:4px solid blue;
background:
radial-gradient(blue 17%, transparent 19%),
radial-gradient(red 26%, transparent 28%),
radial-gradient(blue 40%, transparent 42%),
red;
}
<div class="shape"></div>
我正在尝试使用 CSS 创建形状,使用前后伪元素。该形状在 Chrome 和 Firefox 中的呈现方式与我预期的一样,但是在 Safari 中,:before 内容最终堆叠在 :after 内容之上,我不确定为什么。看起来它与我的 :before 元素中的转换有关,但我不确定我到底做错了什么,以及为什么它只是在 Safari 中有所不同,而且我不知道如何修复它。
This is what I get on Chrome/Firefox and this is what I get in Safari
.outer {
position: absolute;
top: 50px;
left: 100px;
transform: rotate(27deg);
}
.shape {
position: absolute;
height: 100px;
width: 100px;
background-color: blue;
border-radius: 50%;
}
.shape:before {
content: '';
position: absolute;
left: 36px;
top: 26px;
width: 200px;
height: 48px;
background-color: inherit;
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
transform: perspective(200px) rotateY(70deg);
}
.shape:after {
content: '';
position: absolute;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
width: 92px;
height: 92px;
border-radius: 50%;
background:
radial-gradient(blue 17%, transparent 19%),
radial-gradient(red 26%, transparent 28%),
radial-gradient(blue 40%, transparent 42%),
red;
}
<div class="outer">
<div class="shape"></div>
</div>
不确定到底是什么问题(而且我无法测试)但是您可以调整 :before
形状以考虑径向渐变以创建透明部分并避免重叠,即使元素在顶部。
这是一个示例,其中我明确地将 :before
放在顶部并且它有效。我也减少了一些代码。
.shape {
position: absolute;
top: 50px;
left: 100px;
height: 100px;
width: 100px;
transform: rotate(27deg);
}
.shape:before {
content: '';
position: absolute;
left: 36px;
top: 26px;
width: 200px;
height: 48px;
background: radial-gradient(25px 23px at left,transparent 98%, blue 100%);
border-top-right-radius: 50%;
border-bottom-right-radius: 50%;
transform: perspective(200px) rotateY(70deg);
z-index:1;
}
.shape:after {
content: '';
position: absolute;
top: 0;
left:0;
right:0;
bottom:0;
border-radius: 50%;
border:4px solid blue;
background:
radial-gradient(blue 17%, transparent 19%),
radial-gradient(red 26%, transparent 28%),
radial-gradient(blue 40%, transparent 42%),
red;
}
<div class="shape"></div>