基于父元素转换伪元素
Transform pseudo-element based on parent
我正在制作一个 Material Design 网络应用程序,我制作它时抽屉只是一个元素,使用 :before
伪元素制作稀松布(使背景变暗)并将抽屉放在突出位置)。
#app-bar-drawer {
position: fixed;
top: 0;
left: 0;
bottom: 0;
width: 350px;
max-width: 85%;
background: #fff;
z-index: 1200;
box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);
opacity: 0;
pointer-events: none;
transform: translateX(-110%);
transition: opacity .1s, transform .3s;
}
#app-bar-drawer.in {
opacity: 1;
pointer-events: all;
transform: translateX(0%);
}
#app-bar-drawer:before {
background: rgba(0, 0, 0, 0.6);
position: absolute;
width: 10000%;
transform: translateX(350px);
top: 0;
left: 0;
right: 0;
bottom: 0;
content: "";
z-index: 700;
}
@media screen and (max-width: 400px) {
#app-bar-drawer:before {
transform: translateX(350px); /* this is what I can't figure out */
}
}
在较大的手机、平板电脑、台式机等设备上效果很好:
如您所见,稀松布位于抽屉边缘,整齐地覆盖了内容物。然而,对于较小的设备,它移动得太远,看起来像这样:
在这一个中,稀松布位于屏幕的最右边缘,因为 transform: translateX(350px)
将它推得太远了。我试过将它更改为使用百分比,但百分比是 :before
伪元素的,而不是父元素的。当我尝试使用像 200px
这样的像素测量时,它要么太远(并且不会覆盖内容)要么太近(并且覆盖抽屉)。
摘要
我不能使用百分比或像素度量。我宁愿在没有 JS 的情况下这样做,但如果有必要,我会这样做。这可能吗?它需要是单个元素。
另一种方法是在切换菜单时切换主体上的伪元素。您可以使用 position: fixed
和坐标将其设置为视口的全宽,这样可以避免处理变换。
确保菜单的z-index
高于伪元素
我正在制作一个 Material Design 网络应用程序,我制作它时抽屉只是一个元素,使用 :before
伪元素制作稀松布(使背景变暗)并将抽屉放在突出位置)。
#app-bar-drawer {
position: fixed;
top: 0;
left: 0;
bottom: 0;
width: 350px;
max-width: 85%;
background: #fff;
z-index: 1200;
box-shadow: 0px 8px 10px -5px rgba(0, 0, 0, 0.2), 0px 16px 24px 2px rgba(0, 0, 0, 0.14), 0px 6px 30px 5px rgba(0, 0, 0, 0.12);
opacity: 0;
pointer-events: none;
transform: translateX(-110%);
transition: opacity .1s, transform .3s;
}
#app-bar-drawer.in {
opacity: 1;
pointer-events: all;
transform: translateX(0%);
}
#app-bar-drawer:before {
background: rgba(0, 0, 0, 0.6);
position: absolute;
width: 10000%;
transform: translateX(350px);
top: 0;
left: 0;
right: 0;
bottom: 0;
content: "";
z-index: 700;
}
@media screen and (max-width: 400px) {
#app-bar-drawer:before {
transform: translateX(350px); /* this is what I can't figure out */
}
}
在较大的手机、平板电脑、台式机等设备上效果很好:
如您所见,稀松布位于抽屉边缘,整齐地覆盖了内容物。然而,对于较小的设备,它移动得太远,看起来像这样:
在这一个中,稀松布位于屏幕的最右边缘,因为 transform: translateX(350px)
将它推得太远了。我试过将它更改为使用百分比,但百分比是 :before
伪元素的,而不是父元素的。当我尝试使用像 200px
这样的像素测量时,它要么太远(并且不会覆盖内容)要么太近(并且覆盖抽屉)。
摘要
我不能使用百分比或像素度量。我宁愿在没有 JS 的情况下这样做,但如果有必要,我会这样做。这可能吗?它需要是单个元素。
另一种方法是在切换菜单时切换主体上的伪元素。您可以使用 position: fixed
和坐标将其设置为视口的全宽,这样可以避免处理变换。
确保菜单的z-index
高于伪元素