如何使网格适应容器的大小?

问题描述 投票:0回答:1

我试图让我的网格动态适应容器的预定大小,也就是说,即使网格中的单元格数量发生变化,它也会继续保持相同的大小。

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");
        container.appendChild(cell).className = "grid-item";
    };
};

makeRows(10, 10); 
:root {
    --grid-cols: 1;
    --grid-rows: 1;
}

#container {
    width: 400px;
    height: 400px;
    display: grid;
    grid-gap: 0;
    grid-template-rows: repeat(var(--grid-rows), 1fr);
    grid-template-columns: repeat(var(--grid-cols), 1fr);
}

.grid-item {

    padding: 1em;
    border: 1px solid #ddd;
}
<!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" />
    <link rel="stylesheet" href="styles.css" />
    <title>SketchPad</title>
</head>

<body>
    <div class="flex-container">
        <div class="title">
            <h1>SketchPad</h1>
        </div>
        <div class="mode">Mode: Coloring</div>
        <div class="content">
            <div id="container"></div>
            <div class="buttons">
                <button class="blackButton" onclick="changeColor('black')">
                    Black
                </button>
                <button class="erasorButton" onclick="changeColor('white')">
                    Erasor
                </button>
                <button class="grayButton" onclick="changeColor('gray')">Gray</button>
                <button class="randomButton" onclick="changeColor('random')">
                    Random
                </button>
            </div>
            <div>
                <input type="text" placeholder="Size of Board" value="16" onchange="changeSize(this.value)" />
                <button>Set Size</button>
            </div>
            <div class="error">Input must be between 2 and 100</div>
        </div>
    </div>
</body>
<script src="App.js"></script>

</html>

我正在尝试制作一个画板,但是当我更改网格中的单元格数量时,它会大于我的容器的大小,其想法是单元格的大小会自动适应

javascript html css grid
1个回答
0
投票

您正在尝试设置列数。相反,设置列的 width 并让 CSS 计算出网格中可以容纳多少个该宽度的列。

const makeChildren = (e, n) => { let a = [] for (let i = 0; i < Math.pow(n, 2); i++) { a.push('<div></div>') } e.innerHTML = a.join('') e.style.gridTemplateColumns = `repeat(auto-fit, calc(var(--size) / ${n}))` } makeChildren(document.getElementById('c1'), 2) makeChildren(document.getElementById('c2'), 5) makeChildren(document.getElementById('c3'), 10)
:root {
  --size: 200px;
}

body {
  margin: 1em;
}

.container {
  width: var(--size);
  display: grid;
  margin-bottom: 1em;
}

.container>* {
  border: 1px solid black;
  aspect-ratio: 1/1;
}
<div id="c1" class="container"></div>
<div id="c2" class="container"></div>
<div id="c3" class="container"></div>

© www.soinside.com 2019 - 2024. All rights reserved.