16 x 16 网格无法正确显示
Posted
技术标签:
【中文标题】16 x 16 网格无法正确显示【英文标题】:16 x 16 grid does not display correctly 【发布时间】:2022-01-23 06:23:00 【问题描述】:这里是初学者。
从那时起,我就尝试构建一个包含 32 个盒子、16 列和 16 行的 etch-a-sketch 板。我最终得到的唯一结果是一行或一列中有 32 个框。我不知道错误在哪里,在脚本、css 或 html 中,所以我将这三个都包含在帖子中。
感谢任何帮助!
代码如下:
document.addEventListener('DOMContentLoaded', () =>
const grid = document.querySelector('.grid');
//const message = document.querySelector('#message');
//MAKE THE BOARD
function makeBoard()
for (let i = 0; i <= 16; i++ )
const squareCol = document.createElement('div');
squareCol.className = 'squareCol';
squareCol.setAttribute('data-id',i)
grid.appendChild(squareCol);
for(let j = 0; j <= 16; j++)
const squareRow = document.createElement('div');
squareRow.className = 'squareRow';
squareRow.setAttribute('data-id',j)
grid.appendChild(squareRow);
makeBoard();
)
body
margin: 0;
padding: 0;
.container
display: flex;
justify-content: center;
align-items: center;
height: 618px;
width: 618px;
.grid
display: flex;
justify-content: center;
align-items: center;
.squareRow, .squareCol
display: flex;
justify-content: center;
align-items: center;
height: 10px;
width: 10px;
border: solid black 1px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Etch-a-Sketch</title>
<script src="script.js" defer></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<span class="grid"></span>
</div>
<div id="message"></div>
</body>
</html>
【问题讨论】:
16x16 不是 32。:) 你需要在你的 CSS 中指定一个换行策略。这回答了你的问题了吗? Flexbox: 4 items per row 为什么要将单元格作为行和单元格作为列附加到网格中。列不应该在行中吗?使用 squareCol 将 16 个 div 添加到网格中,然后使用 squareRow 类添加 16 个 div。应该是for (i) make row for (j) make cols, append to row
@isherwood,你是对的,谢谢,我需要更好地了解 flexbox,必须查看链接并再次查看基础知识。
@epascarello 这更符合逻辑,谢谢。
【参考方案1】:
主要你需要包装网格列。请参阅我对容器和里面的项目应用的附加 CSS。
正如 epascarello 指出的那样,所有 flex 子项都应该是列。 container 是行。要么,要么你必须重组你的脚本来实际创建多个弹性行,带有单独的容器。
document.addEventListener('DOMContentLoaded', () =>
const grid = document.querySelector('.grid');
//const message = document.querySelector('#message');
//MAKE THE BOARD
function makeBoard()
for (let i = 0; i <= 16; i++)
const squareCol = document.createElement('div');
squareCol.className = 'squareCol';
squareCol.setAttribute('data-id', i)
grid.appendChild(squareCol);
for (let j = 0; j <= 16; j++)
const squareRow = document.createElement('div');
squareRow.className = 'squareRow';
squareRow.setAttribute('data-id', j)
grid.appendChild(squareRow);
makeBoard();
)
body
margin: 0;
padding: 0;
.container
display: flex;
justify-content: center;
align-items: center;
height: 618px;
width: 618px;
.grid
display: flex;
flex-wrap: wrap;
justify-content: center;
align-items: center;
.squareRow,
.squareCol
display: flex;
flex: 1 1 6.25%;
justify-content: center;
align-items: center;
height: 10px;
border: solid black 1px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Etch-a-Sketch</title>
<script src="script.js" defer></script>
<link rel="stylesheet" href="style.css">
</head>
<body>
<div class="container">
<span class="grid"></span>
</div>
<div id="message"></div>
</body>
</html>
【讨论】:
【参考方案2】:我将一个 div (.parent) 容器放入您的包装容器中。父类包含网格模板。
const grid = document.getElementById('c');
for (let i = 0; i < 32; i++)
const squareCol = document.createElement('div');
squareCol.className = 'squareCol';
squareCol.setAttribute('data-id',i)
squareCol.innerHTML = (i + 1)
grid.appendChild(squareCol);
body
margin: 0;
padding: 0;
.parent
display: grid;
grid-template-columns: repeat(16, 1fr);
grid-template-rows: repeat(16, 1fr);
grid-column-gap: 0px;
grid-row-gap: 0px;
.container
display: flex;
justify-content: center;
align-items: center;
height: 618px;
width: 618px;
.squareCol
.squareRow, .squareCol
justify-content: center;
align-items: center;
height: 20px;
width: 20px;
border: solid black 1px;
<body>
<div class="container">
<div id="c" class="parent"></div>
</div>
<div id="message"></div>
</body>
【讨论】:
以上是关于16 x 16 网格无法正确显示的主要内容,如果未能解决你的问题,请参考以下文章
无法点击 SwiftUI 网格图像以显示 DetailView