基于父变换伪元素

时间:2018-04-26 00:57:01

标签: css css-transforms pseudo-element

我制作了一个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 */
  }
}

在较大的手机,平板电脑,台式机等上运行正常: enter image description here

如您所见,稀松布位于抽屉的边缘,整齐地覆盖内容。但是,对于较小的设备,它移动太远,看起来像这样: enter image description here

在这个中,稀松布位于屏幕的最右边缘,因为transform: translateX(350px)将它推得太远。我尝试将其更改为使用百分比,但百分比是:before伪元素,而不是父元素。当我尝试使用像200px这样的像素度量时,它会走得太远(并且不会覆盖内容)或太近(并覆盖抽屉)。

概要

我无法使用百分比或像素度量。我宁愿在没有JS的情况下这样做,但如果有必要,我会这样做。这可能吗?它需要是一个单一元素。

1 个答案:

答案 0 :(得分:2)

另一种方法是在菜单切换时切换身体上的psueodoelement。您可以使用position: fixed和坐标将其设置为视口的整个宽度,这样可以避免处理转换。

确保菜单的z-index高于伪元素。