Я создаю веб-приложение 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, но при необходимости я сделаю это.Это возможно?Это должен быть один элемент.