Я пытаюсь реализовать эффект перехода. В начальном переходном состоянии четыре элемента расположены горизонтально на расстоянии друг от друга - с помощью flexbox
.parent {
display: flex
justify-content: space-between
align-items: center
padding-left: 7.5%
padding-right: 7.5%
}
Во втором переходном состоянии родительский контейнер сворачивается вертикально, и все элементы выдвигаются к правому краю. Итак, представьте себе ситуацию, подобную этой
/////////////////////
xx xx xx xx
xx xx xx xx
/////////////////////
переход к:
/////////////////////
xxxx
/////////////////////
Я попытался решить эту проблему, вручную проверив все 4 элемента на предмет их левой / правой координат DOM относительно краев контейнера и равномерно распределил их по следующим правилам:
.abs-ico-co1 {
left: 7.194%;
}
.abs-ico-co2 {
left: 30.325%;
}
.abs-ico-co3 {
left: 58.55143%;
}
.abs-ico-co4 {
left: 82.09201%;
}
Я применяю второй класс, который анимирует все объекты в правой части экрана, регулируя их left
проценты, которые ссылаются на процент от общей ширины родительского контейнера:
* {
width: 125px
transition: 0.8s left ease-out
}
.co1-move {
left: calc(100% - 500px - 7.5% + 50px);
}
.co2-move {
left: calc(100% - 375px - 7.5% + 50px);
}
.co3-move {
left: calc(100% - 250px - 7.5% + 50px);
}
.co4-move {
left: calc(100% - 125px - 7.5% + 50px);
}
(Это перемещает каждый контейнер на 100% за пределы экрана, настраивает 125px для самого правого элемента, добавляет 125px для каждого последующего, чтобы сместить ранее настроенный значок и т. Д., 7.5% - это смещение отступа всей страницы, а 50px смещает полосу прокрутки)
Но здесь есть проблема: переход left
и изменение размера контейнера не производительны, а использование transition: TranslateX()
сделает анимацию немного менее изменчивой. Однако - я не могу понять, как использовать% измерения родительского контейнера в TranslateX()
Когда я делаю TranslateX(100%)
- он перемещает объект влево только на 125 пикселей - я не могу использовать проценты так же, как я использую их для left
, потому что я ожидаю, что он будет переведен на 100% родительское измерение, в то время как оно использует дочернее.
Есть ли способ решить это? Это приложение React, я могу попытаться передать ширину родительского Ref как расчет CSS-in-JS
Вы можете увидеть анимацию здесь: http://still -beach-13809.herokuapp.com / - Происходит, когда вы прокручиваете липкий контейнер (сейчас все очень сломано на мобильном телефоне ...)
Может быть, было бы лучше просто изменить размер родительского контейнера и оставить интервал с пробелом, и просто выровнять родительский элемент по правому краю экрана? `
Редактировать: попытался использовать vw вместо%, но он все еще кажется глючным