Элемент с абсолютным позиционированием не отвечает

Я знаю, что было несколько вопросов по этому вопросу, но ни один из них полностью не отвечает на мою проблему... У меня есть 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;
}

Вот страница в Интернете для анимации, о которой я говорю, это анимация «Тетрис» для мобильных телефонов, поэтому, возможно, вам придется изменить размер браузера, чтобы увидеть ее хорошо...

Если у кого-нибудь есть идеи о том, как сделать его отзывчивым, я был бы очень благодарен.

Бенджамин

Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
0
48
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Вы смотрели на flexbox с направлением столбца? Элементы останутся центрированными по вертикали независимо от высоты экрана. Также я удалил ids, так как они больше не нужны.

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>

jsFiddle

Хорошее предложение, но в будущем, если длина шага увеличится, мы должны будем писать CSS с задержкой анимации для каждого шага.

Hassan Siddiqui 28.03.2019 00:26

@HassanSiddiqui Я скорректировал свой ответ, чтобы он динамически рос с элементами n через JavaScript.

Andy Hoffman 28.03.2019 00:38

Большое спасибо за вашу помощь, однако, похоже, это не работает для вертикального позиционирования... Я отредактирую вопрос, чтобы предоставить веб-страницу, чтобы каждый мог посмотреть

Benjamin Loubet 28.03.2019 10:16
Ответ принят как подходящий

Вы можете использовать медиа-запрос для решения проблемы с реагированием. Попробуйте это, я надеюсь, что это поможет вам. Спасибо

@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>

Я, вероятно, решу это, но я пытался избежать этого, потому что, если я сделаю это так, мне придется указать много ширины, поскольку мой код даже не реагирует с одного экрана компьютера на другой. Но спасибо за помощь :) Сейчас попробую и поставлю вопрос как решённый, если получится!

Benjamin Loubet 28.03.2019 20:16

Спасибо @BenjaminLoubet за ваш отзыв.

Hassan Siddiqui 28.03.2019 20:49

Извините за поздний ответ, я не мог сделать это в то время, когда думал, что смогу, но теперь мой элемент отзывчив, спасибо вам, @HassanSiddiqui!

Benjamin Loubet 30.03.2019 23:46

Другие вопросы по теме