这里有一个指向3个正方形网格3 square grid的链接
这里有一个指向4个正方形网格4 square grid的链接
这里有一个指向5方形网格5 square grid的链接

正如你在图片中看到的,当方格数超过4x4时,网格溢出了容器.请帮我解决这个问题.

以下是该应用程序的HTML、CSS和Java脚本.

function squares() {
  const square = document.querySelector('#grid');
  const n = prompt("Enter number of squares for the grid");
  console.log(n);
  const c = document.querySelector("#container");
  const x = 400 / n;
  c.style.width = (x * n) + 10 + "px";
  c.style.height = (x * n) + 10 + "px";
  square.style.width = x * n + "px";
  square.style.height = x * n + "px";
  for (let j = 0; j < n; j++) {
    const row = document.createElement("div");
    row.style.width = x * n + "px";
    row.style.height = x + "px";
    for (let i = 0; i < n; i++) {
      const sq = document.createElement('div');
      sq.style.border = "3px solid black";
      sq.style.backgroundColor = "blue";
      sq.style.width = x + "px";
      sq.style.height = x + "px";
      sq.classList.add('row');
      row.appendChild(sq);
    }
    row.classList.add('square');
    square.appendChild(row);
  }
}
#container {
  margin: auto;
  padding: 14px 14px 14px;
  position: fixed;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  border: 4px solid black;
  border-radius: 10px;
  background-color: white;
  display: flex;
}

#grid {
  flex: 1;
  display: flex;
}
<div id="container">
  <div id="grid"></div>
</div>
<div id="input_div">
  <button id="submit" onclick="squares()">Enter Number of Squares</button>
</div>

我认为问题出在Java脚本代码中,其中需要创建一个名为"row"的div元素,以防止所有正方形占据顶部的一行.我创建了一个名为‘x’的变量,只是为了根据创建的方块数量来保持每个方块的大小.当我在浏览器中判断这个网站时,我发现问题出在每个正方形的尺寸上,因为无论网格和容器的大小如何,它都会集体溢出.请告知是否可以以任何方式完成,以及是否需要创建‘x’.

我知道代码看起来有点复杂.一个更简单、更容易理解的版本如果能像预期的那样运行,将会有很大的帮助.

推荐答案

下面是我使用CSS网格的实现.

const container = document.getElementById('container');
const input = document.querySelector('input');

/* Creates and inserts boxes into container
@param count - number of boxes to create
*/
function addBoxes(count) {
  let element;
  for (let i = 0; i < count; i++) {
    element = document.createElement('div');
    element.classList.add('box');
    container.appendChild(element);
  }
}

function clearGrid() {
  container.textContent = '';
}

function updateGrid(number) {
  clearGrid();
  addBoxes(number * number)

  container.style.gridTemplateRows = `repeat(${number}, 1fr)`;
  container.style.gridTemplateColumns = `repeat(${number}, 1fr)`;
}

input.addEventListener('input', () => {
  // Convert input value to a number, if becomes NaN if it contains a character that  is not an integer
  let number = +input.value;

  // Do nothing if the value is not a number
  if (!Number.isInteger(number)) {
    return;
  }

  // Negative numbers to positive
  number = Math.abs(number);

  // Max number to avoid freezing the browser and prevent overflow
  if (number > 20) {
    number = 20;
    input.value = number;
  }

  updateGrid(number);
})
#container {
  height: 410px;
  width: 410px;
  border: 3px solid black;
  padding: 3px;
  gap: 3px;
  display: grid;
}

.box {
  border: 3px solid black;
  background: blue;
}
<div id="container"></div>
<input type="number" max="50" placeholder="Enter a number">

Javascript相关问答推荐

仅在React和JS中生成深色

JavaScript文本区域阻止KeyDown/KeyUp事件本身上的Alt GR +键组合

使用复选框在d3.js多折线图中添加或删除线条

我不知道为什么setwritten包装promise 不能像我预期的那样工作

如何在Obsidian dataview中创建进度条

处理时间和字符串时MySQL表中显示的日期无效

屏幕右侧屏障上的产卵点""

无法检测卡片重叠状态的问题

如何通过将实例方法的名称传递给具有正确类型的参数的继承方法来调用实例方法?

如何在每次单击按钮时重新加载HighChart/设置HighChart动画?

从页面到应用程序(NextJS):REST.STATUS不是一个函数

检索相加到点的子项

覆盖加载器页面避免对页面上的元素进行操作

如何在JAVASCRIPT中合并两组对象并返回一些键

如何在FastAPI中为通过file:/URL加载的本地HTML文件启用CORS?

如何更改Html元素S的 colored颜色 ,然后将其褪色为原始 colored颜色

P5JS-绘制不重叠的圆

如果查询为空,则MongoDB将所有文档与$in匹配

无法向甜甜圈图表上的ChartJSImage添加可见标签

CSS网格使页面自动滚动