具有固定宽度和高度的项目的网格
A grid with items having fixed width and height
目前我使用这些设置创建了一个 10x10 网格:
/*
This code is easier than writing many lines of HTML code
*/
$(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 {
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>
单元格具有固定的高度和宽度。此网格可能比屏幕宽度大,但这并不重要。
我希望每行的所有单元格都并排放置我尝试了两种方法:
使用 display: flex
我得到上面的结果。但是当改变屏幕宽度时,单元格会被拉伸。
使用 display: inline-block
我得到这个结果:
$(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 {
margin-top: 1px;
}
.c {
width: 30px;
height: 30px;
display: inline-block;
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>
现在每行的底部间距都很奇怪。
如何创建一个网格,使其宽度和高度保持在每个单元格 1px 的间距?
尝试将此添加到您的第二个示例中
.p {
font-size:0;
}
显示 inline
元素根据其字体大小具有基础边距
尝试使用
#page {
font-size: 0;
}
弹性框
在你的 flex 版本中你说:
The cells have a fixed height and width.
不,他们没有。宽度不固定
弹性容器的初始设置是flex-shrink: 1
。这意味着 flex 项目可以 缩小 其初始大小以保留在其容器内。
属性沿主轴应用,也就是说在行向容器中,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>
网格
对于更简单的解决方案,请使用 CSS 网格布局。
$(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>
创建具有您想要的样式的网格的一种方法是使用 table
而不是一组 div
并为 [=15= 设置 min-width
属性 ]s.
const createGrid = (rows, columns) => {
const table = document.createElement('table');
document.body.appendChild(table);
for (let i = 0; i < rows; i++) {
let row = document.createElement('tr');
table.appendChild(row);
for (let j = 0; j < columns; j++) {
let cell = document.createElement('td');
row.appendChild(cell);
}
}
}
createGrid(10, 10);
table {
border-spacing: 1px;
}
td {
min-width: 30px;
height: 30px;
background: red;
}
目前我使用这些设置创建了一个 10x10 网格:
/*
This code is easier than writing many lines of HTML code
*/
$(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 {
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>
单元格具有固定的高度和宽度。此网格可能比屏幕宽度大,但这并不重要。
我希望每行的所有单元格都并排放置我尝试了两种方法:
使用 display: flex
我得到上面的结果。但是当改变屏幕宽度时,单元格会被拉伸。
使用 display: inline-block
我得到这个结果:
$(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 {
margin-top: 1px;
}
.c {
width: 30px;
height: 30px;
display: inline-block;
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>
现在每行的底部间距都很奇怪。
如何创建一个网格,使其宽度和高度保持在每个单元格 1px 的间距?
尝试将此添加到您的第二个示例中
.p {
font-size:0;
}
显示 inline
元素根据其字体大小具有基础边距
尝试使用
#page {
font-size: 0;
}
弹性框
在你的 flex 版本中你说:
The cells have a fixed height and width.
不,他们没有。宽度不固定
弹性容器的初始设置是flex-shrink: 1
。这意味着 flex 项目可以 缩小 其初始大小以保留在其容器内。
属性沿主轴应用,也就是说在行向容器中,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>
网格
对于更简单的解决方案,请使用 CSS 网格布局。
$(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>
创建具有您想要的样式的网格的一种方法是使用 table
而不是一组 div
并为 [=15= 设置 min-width
属性 ]s.
const createGrid = (rows, columns) => {
const table = document.createElement('table');
document.body.appendChild(table);
for (let i = 0; i < rows; i++) {
let row = document.createElement('tr');
table.appendChild(row);
for (let j = 0; j < columns; j++) {
let cell = document.createElement('td');
row.appendChild(cell);
}
}
}
createGrid(10, 10);
table {
border-spacing: 1px;
}
td {
min-width: 30px;
height: 30px;
background: red;
}