Как создать js и html css

#javascript #html #css

#javascript #HTML #css

Вопрос:

Адаптивная ширина и высота для группы квадратов

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

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

 setInterval(() => {
  console.log(document.getElementsByClassName('square-container')[0]);
  document.getElementsByClassName('square-container')[0].innerHTML  = (" <div class = 'square' > < /div>");
}, 1000);  
 .square-container {
  display: flex;
  flex-wrap: wrap;
}

.square {
  position: relative;
  flex-basis: calc(33.333% - 10px);
  margin: 5px;
  box-sizing: border-box;
  background: red;
  transition: background 1s;
}

.square::before {
  content: "";
  display: block;
  padding-top: 100%;
}  
 <div class="square-container">
  <div class="square"></div>
</div>  

Я не использую никаких библиотек пользовательского интерфейса, таких как bootstrap, только ванильный html, css и javascript.

Комментарии:

1. как насчет добавления высоты и с помощью поля в css?

Ответ №1:

Одним из способов было бы автоматически прокручивать экран вниз по мере добавления каждого квадрата. Я добавил эту строку window.scrollTo(0,document.body.scrollHeight); в ваш код, который заставляет его прокручиваться вниз при создании новой строки.

 setInterval(() => {
  //console.log(document.getElementsByClassName('square-container')[0]);
  document.getElementsByClassName('square-container')[0].innerHTML  = (" <div class = 'square' > < /div>");
  window.scrollTo(0,document.body.scrollHeight);
}, 1000);  
 .square-container {
  display: flex;
  flex-wrap: wrap;
}

.square {
  position: relative;
  flex-basis: calc(33.333% - 10px);
  margin: 5px;
  box-sizing: border-box;
  background: red;
  transition: background 1s;
}

.square::before {
  content: "";
  display: block;
  padding-top: 100%;
}  
 <div class="square-container">
  <div class="square"></div>
</div>  

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