【问题标题】:16 x 16 grid does not display correctly16 x 16 网格无法正确显示
【发布时间】: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 这更符合逻辑,谢谢。

标签: javascript css flexbox


【解决方案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>

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-12-23
      • 2013-03-19
      • 1970-01-01
      • 2013-04-30
      • 2014-06-22
      • 1970-01-01
      • 2012-01-01
      • 2021-10-22
      相关资源
      最近更新 更多