Преобразование псевдоэлемента на основе родителя - PullRequest
0 голосов
/ 26 апреля 2018

Я создаю веб-приложение 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 голосов
/ 26 апреля 2018

Альтернативным подходом было бы переключение псевдоэлемента на теле при переключении меню.Вы можете установить его на всю ширину области просмотра, используя position: fixed и координаты, что позволяет избежать преобразования.

Убедитесь, что z-index меню выше, чем psuedoelement.

...