使用JavaScript创建16x16网格

vca*_*ble 15 html javascript css

我正在尝试用JavaScript创建一个16x16的网格。我尝试使用的方法是div在HTML中创建一个空白,然后将其他div附加到其上,并勾勒出边框。我似乎无法完成这项工作,并且将我的代码放在下面。

HTML:

<!DOCTYPE html>

<head>
    <title>Etch-a-Sketch</title>
    <link rel="stylesheet" type="text/css" href="style.css">
    <script type="text/javascript" src="app.js"></script>
</head>

<body>
    <div id="container">
    </div>

</body>
Run Code Online (Sandbox Code Playgroud)

JavaScript:

// Sets important constants and variables

const container = document.getElementById("container");
let rows = document.getElementsByClassName("gridRow");
let cells = document.getElementsByClassName("cell");

// Creates a default grid sized 16x16
function defaultGrid() {
    makeRows(16);
    makeColumns(16);
}

// Takes (rows, columns) input and makes a grid
function makeRows(rowNum) {

    // Creates rows
    for (r = 0; r < rowNum; r++) {
        let row = document.createElement("div");
        container.appendChild(row).className = "gridRow";
    };
};

// Creates columns
function makeColumns(cellNum) {
    for (i = 0; i < rows.length; i++) {
        for (j = 0; j < cellNum; j++) {
            let newCell = document.createElement("div");
            rows[j].appendChild(newCell).className = "cell";
        };

    };
};

Run Code Online (Sandbox Code Playgroud)

CSS:

.gridRow {
    border: 1px solid black;
}

.cell {
    border: 1px solid black;
}
Run Code Online (Sandbox Code Playgroud)

Nid*_*eph 22

使用CSS变量CSS网格创建动态行和列会更加干净。

const container = document.getElementById("container");

function makeRows(rows, cols) {
  container.style.setProperty('--grid-rows', rows);
  container.style.setProperty('--grid-cols', cols);
  for (c = 0; c < (rows * cols); c++) {
    let cell = document.createElement("div");
    cell.innerText = (c + 1);
    container.appendChild(cell).className = "grid-item";
  };
};

makeRows(16, 16);
Run Code Online (Sandbox Code Playgroud)
:root {
  --grid-cols: 1;
  --grid-rows: 1;
}

#container {
  display: grid;
  grid-gap: 1em;
  grid-template-rows: repeat(var(--grid-rows), 1fr);
  grid-template-columns: repeat(var(--grid-cols), 1fr);
}

.grid-item {
  padding: 1em;
  border: 1px solid #ddd;
  text-align: center;
}
Run Code Online (Sandbox Code Playgroud)
<div id="container">
</div>
Run Code Online (Sandbox Code Playgroud)


Kam*_*ski 6

尝试

let n=16, s='';

for(let i=0; i<n; i++) {
  s+= '<div class="row">'
  for(let j=0; j<n; j++) s+= `<div class="cell"> ${(i*n+j).toString(16)} </div>`;
  s+= '</div>'
}

container.innerHTML = s;
Run Code Online (Sandbox Code Playgroud)
.row { display: flex; font-size: 9.5px; text-align: center; color: red }
.cell { width: 10px; height: 10px; margin: 1px; border: 1px solid black;}
Run Code Online (Sandbox Code Playgroud)
<div id="container"></div>
Run Code Online (Sandbox Code Playgroud)