#html #css
#HTML #css
Вопрос:
Я знаю, что было несколько вопросов на эту тему, но ни один из них не дает полного ответа на мою проблему… У меня есть 13 SVG-файлов, наложенных один на другой (я использую JS-скрипт, чтобы один появлялся, а другой исчезал, создавая таким образом эффект «анимации», когда что-то перемещается из одной позиции в другую), и я расположил их как абсолютные, чтобы они были сложены. Проблема в том, что я работаю на 17-дюймовом экране, и когда я смотрю с помощью screenfly, как выглядит моя страница на больших экранах (24 дюйма), мои элементы больше не расположены должным образом.
Я уже пробовал позиционировать его со всеми известными мне блоками (px, %, vw / vh, em, rem), но в моем случае ничего из этого не работает…
Вот схематичный HTML-код:
<svg id="step1">Lots of stuff</svg>
<svg id="step2">Same here</svg>
.
.
.
<svg id="step13">Some more stuff</svg>
И вот правила CSS, которые я использую:
#step1, #step2, #step3, #step4, #step5, #step6, #step7, #step8, #step9, #step10, #step11, #step12, #step13 {
position: absolute;
top: 1vh;
left: 8.5vw;
margin: 0 auto;
visibility: hidden; /*They are hidden by default and I use JS to make them visible alternatively.*/
height: 150px;
}
Вот веб-страница анимации, о которой я говорю, это анимация «Тетрис» для мобильных телефонов, поэтому, возможно, вам придется изменить размер вашего браузера, чтобы хорошо ее видеть…
Если у кого-нибудь есть идея о том, как сделать его адаптивным, я был бы очень благодарен.
Бенджамин
Ответ №1:
Вы смотрели на flexbox
со столбчатым направлением? Элементы будут оставаться по центру по вертикали независимо от высоты экрана. Кроме того, я удалил id
s, поскольку они больше не нужны.
const steps = document.querySelectorAll('.step');
let delay = .25;
steps.forEach(step => {
step.style.animationDelay = `${delay}s`;
delay = .25;
});
body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
min-height: 100vh;
margin: 0;
}
.step {
visibility: hidden;
opacity: 0;
border: 1px solid;
animation-name: makeVisible;
animation-duration: 1s;
animation-fill-mode: forwards;
padding: 1em;
}
@keyframes makeVisible {
to {
opacity: 1;
visibility: visible;
border-color: transparent;
}
}
<div class="step">One</div>
<div class="step">Two</div>
<div class="step">Three</div>
<div class="step">Four</div>
<div class="step">Five</div>
Комментарии:
1. Хорошее предложение, но в будущем, если длина шага увеличится, нам придется писать CSS с анимационной задержкой для каждого шага.
2. @HassanSiddiqui Я скорректировал свой ответ, чтобы он динамически расширялся с помощью
n
элементов черезJavaScript
.3. Большое вам спасибо за вашу помощь, однако, похоже, это не работает для вертикального позиционирования… Я отредактирую вопрос, чтобы предоставить веб-страницу, чтобы любой мог посмотреть
Ответ №2:
Вы можете использовать медиа-запрос для решения проблемы с адаптивностью. Попробуйте это, я надеюсь, это вам поможет. Спасибо
@media only screen and (max-width: 768px) {
.step {
position: static;
display: block;
}
}
.step {
position: absolute;
top: 1vh;
left: 8.5vw;
margin: 0 auto;
visibility: hidden; /*They are hidden by default and I use JS to make them visible alternatively.*/
height: 150px;
}
@media only screen and (max-width: 768px) {
.step {
position: static;
display: block;
}
}
<svg class="step" id="step1">Lots of stuff</svg>
<svg class="step" id="step2">Same here</svg>
.
.
.
<svg class="step" id="step13">Some more stuff</svg>
Комментарии:
1. Я, вероятно, решу это, но я пытался избежать этого, потому что, если я сделаю это таким образом, мне придется указывать много ширины, поскольку мой код даже не реагирует с одного экрана компьютера на другой. Но спасибо вам за вашу помощь 🙂 Я попробую это сейчас и поставлю вопрос как решенный, если это сработает!
2. Спасибо @BenjaminLoubet за ваш отзыв.
3. Извините за поздний ответ, я не мог этого сделать в то время, когда думал, что сделаю, но теперь мой элемент реагирует, благодаря вам @HassanSiddiqui!