#javascript #css #css-grid
#javascript #css #css-grid
Вопрос:
Я создал квадратный контейнер div с переменным числом дочерних элементов square div. При использовании grid предполагалось, что эти divs должны были заполнить весь контейнер div, и они были рассчитаны с использованием column-template-columns: repeat(#divs per side of square, 1fr)
and grid auto rows: 1fr
, при этом всего было #divs на сторону квадрата ^ 2 дочерних элемента div.
Проблема возникает, когда в контейнер добавляется определенное количество divs. По сути, справа и внизу контейнера появляется странный пробел, так что divs не полностью заполняют контейнер, несмотря на то, что все размеры указаны с использованием единиц fr. Например, это происходит, когда в контейнер добавляется 71 ^ 2 divs.
Вот код:
const INITIAL_SIZE = 71;
const container = document.querySelector(".container");
for (let i = 0; i < INITIAL_SIZE * INITIAL_SIZE; i ) {
const newDiv = document.createElement("div");
newDiv.classList.add("drawing-div");
container.appendChild(newDiv);
}
.container {
display: inline-grid;
grid-template-columns: repeat(71, 1fr);
grid-auto-rows: 1fr;
align-content: stretch;
justify-content: stretch;
width: 10rem;
height: 10rem;
background-color: red;
}
.drawing-div {
box-sizing: border-box;
background-color: gray;
}
<div class="container">
</div>
Я уже проверил поля / отступы / границы / и т.д.: ни один из divs в контейнере не имеет ничего подобного — похоже, это проблема с размерами, поскольку ширина всех внутренних divs, сложенных вместе, не равна ширине контейнера div для определенного количества внутренних divs. Почему это так?
Комментарии:
1. удалите фиксированную ширину
2. Я ничего не вижу, когда запускаю ваш код.
3. @Barmar мой плохой — забыл его раскрасить
4. Я просто вижу серый квадрат без каких-либо пробелов.
5. @Barmar кажется, что он появляется и исчезает в зависимости от размера области просмотра и масштабирования.
Ответ №1:
const INITIAL_SIZE = 71;
const container = document.querySelector(".container");
for (let i = 0; i < INITIAL_SIZE * INITIAL_SIZE; i ) {
const newDiv = document.createElement("div");
newDiv.classList.add("drawing-div");
container.appendChild(newDiv);
}
.container {
display: grid;
grid-template-columns: repeat(71, 1fr);
grid-auto-rows: 1fr;
grid-gap:2px;
align-content: stretch;
justify-content: stretch;
border-radius: 1.5rem;
background-color: RGB(255, 255, 255);
}
.drawing-div {
box-sizing: border-box;
transition: background-color 0.15s;
background:blue;
padding-top:100%;
}
<div class="container">
</div>
Комментарии:
1. Не могли бы вы помочь уточнить, что было не так с моим исходным фрагментом?
2. @tqtqtwtw ты не проверяешь его css?
3. @tqtqtwtw вы определяете фиксированную ширину / высоту, и я удалил их, чтобы получить адаптивный блок
4. @MisterJojo Я сделал, просто не уверен, как это решает проблему концептуально. Я неправильно понимаю, как работает fr, или есть какой-то другой пробел в моем понимании?
5. @ничего, я это понимаю, но по разным причинам блок должен быть такой высоты и ширины, и все изменения размера должны выполняться в подразделениях внутри.