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

引导网格无法正确显示

尝试使用 flexbox 创建 16x16 网格,但由于某种原因 width: 100% 不起作用

地图未渲染。仅显示网格线

动态添加的元素无法在动态调整的网格中正确显示[重复]