CSS 框阴影与伪元素冲突
CSS box shadow conflicting with pseudo-element
有什么方法可以关闭伪元素箭头所在部分的框阴影吗?
当前:
或者伪元素上没有负数z-index
:
想要的结果:
#element {
position: relative;
width: 100px;
height: 100px;
background-color: blue;
box-shadow: 5px 5px 5px #222;
}
#element::after {
content: "";
width: 25px;
height: 25px;
background-color: blue;
top: 40px;
left: 88px;
transform: rotate(45deg);
position: absolute;
z-index: -1;
-webkit-filter: drop-shadow(5px 5px 5px #222);
filter: drop-shadow(5px 5px 5px #222);
}
<div id="element"></div>
您无法控制渲染框阴影或阴影过滤器的哪些部分,至少不能直接控制。
根据您的布局,您可以通过在已有的伪元素上修补另一个伪元素来作弊。我将 ::after
替换为 ::before
以避免 z-index
的需要,因为具有相同堆栈级别的框从后向前堆叠(意味着 ::after
堆叠在 [= 前面13=]).
但是,如果您的元素中有任何内容,您将需要定位内容并给它 z-index: 1
以确保它将绘制在两个伪元素框的顶部,因为 ::after
出现在主要内容之后,因此也会堆叠在内容之前。请参阅以下示例中的 #element > p
规则。
#element {
position: relative;
width: 100px;
height: 100px;
background-color: blue;
box-shadow: 5px 5px 5px #222;
}
#element::before, #element::after {
content: "";
background-color: inherit;
position: absolute;
}
#element::before {
width: 25px;
height: 25px;
top: 40px;
left: 88px;
transform: rotate(45deg);
-webkit-filter: drop-shadow(5px 5px 5px #222);
filter: drop-shadow(5px 5px 5px #222);
}
#element::after {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#element > p {
position: relative;
z-index: 1;
}
<div id="element"><p>text</p></div>
有什么方法可以关闭伪元素箭头所在部分的框阴影吗?
当前:
或者伪元素上没有负数z-index
:
想要的结果:
#element {
position: relative;
width: 100px;
height: 100px;
background-color: blue;
box-shadow: 5px 5px 5px #222;
}
#element::after {
content: "";
width: 25px;
height: 25px;
background-color: blue;
top: 40px;
left: 88px;
transform: rotate(45deg);
position: absolute;
z-index: -1;
-webkit-filter: drop-shadow(5px 5px 5px #222);
filter: drop-shadow(5px 5px 5px #222);
}
<div id="element"></div>
您无法控制渲染框阴影或阴影过滤器的哪些部分,至少不能直接控制。
根据您的布局,您可以通过在已有的伪元素上修补另一个伪元素来作弊。我将 ::after
替换为 ::before
以避免 z-index
的需要,因为具有相同堆栈级别的框从后向前堆叠(意味着 ::after
堆叠在 [= 前面13=]).
但是,如果您的元素中有任何内容,您将需要定位内容并给它 z-index: 1
以确保它将绘制在两个伪元素框的顶部,因为 ::after
出现在主要内容之后,因此也会堆叠在内容之前。请参阅以下示例中的 #element > p
规则。
#element {
position: relative;
width: 100px;
height: 100px;
background-color: blue;
box-shadow: 5px 5px 5px #222;
}
#element::before, #element::after {
content: "";
background-color: inherit;
position: absolute;
}
#element::before {
width: 25px;
height: 25px;
top: 40px;
left: 88px;
transform: rotate(45deg);
-webkit-filter: drop-shadow(5px 5px 5px #222);
filter: drop-shadow(5px 5px 5px #222);
}
#element::after {
top: 0;
right: 0;
bottom: 0;
left: 0;
}
#element > p {
position: relative;
z-index: 1;
}
<div id="element"><p>text</p></div>