Flexbox
В вашей версии flex вы говорите:
Ячейки имеют фиксированную высоту и ширину.
Нет, они этого не делают.Ширина не фиксирована.
Начальная настройка гибкого контейнера: flex-shrink: 1
.Это означает, что гибкие элементы могут сжиматься от их первоначального размера, чтобы оставаться внутри своего контейнера.
Свойство применяется вдоль главной оси, что означает, что в контейнере в направлении строки, flex-shrink
влияет на ширину.
Вот ваш код с отключенным flex-shrink
:
$(document).ready(() => {
for (let i = 0; i < 10; i++) {
const parent = $("<div></div>");
parent.addClass("p");
for (let j = 0; j < 10; j++) {
const child = $("<div></div>");
child.addClass("c");
parent.append(child);
}
$("#page").append(parent);
}
});
.p {
display: flex;
margin-top: 1px;
}
.c {
flex-shrink: 0; /* new */
width: 30px;
height: 30px;
margin-left: 1px;
background: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="page"></div>
jsFiddle demo
Сетка
Для еще более простого решения используйте CSS Grid Layout.
$(document).ready(function() {
for (var i = 0; i < 100; i++)
$("#container").append("<div style='background-color:red'></div>");
});
#container {
display: grid;
grid-template-rows: repeat(10, 30px);
grid-template-columns: repeat(10, 30px);
grid-gap: 1px;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container"></div>
jsFiddle demo