You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在单元格数量变化时保持Etch-a-Sketch网格尺寸固定?

如何让Etch-a-Sketch网格宽度固定,不受单元格数量影响

问题根源

你当前的实现通过手动计算单元格像素宽度来构建网格,但gap的存在会让网格总宽度变为单元格总宽度 + 间隙总宽度,导致单元格数量变化时总宽度波动;同时inline-grid会让容器宽度自适应内容,进一步加剧尺寸变化问题。

解决步骤

1. 给网格容器设置固定宽度

修改.grid的CSS,添加固定宽度,确保容器尺寸不随内容变化:

.grid{
    padding: 10px;
    display: grid;
    width: 200px; /* 设置你需要的固定宽度 */
    border: 1px solid black;
    gap: 1px;
}

2. 使用fr单位自动分配单元格空间

无需手动计算单元格宽度,改用1fr单位让每个单元格自动平分网格的可用空间(自动扣除间隙宽度),修改makeGrid函数:

function makeGrid(value){
    grid.style.gridTemplateColumns = `repeat(${value}, 1fr)`;
    grid.style.gridTemplateRows = `repeat(${value}, 1fr)`;
    for(let i = 0; i < value; i++){
        for(let j = 0; j < value; j++){
        const cell = document.createElement('div');
        cell.classList.add('cell');
        cell.addEventListener('mouseover', toBlack);
        grid.appendChild(cell);
        }
    }
}

3. 可选:保持单元格为正方形

如果需要单元格始终是正方形,给.cell添加aspect-ratio: 1属性:

.cell {
    aspect-ratio: 1;
}

完整修改后的代码

CSS部分

.grid{
    padding: 10px;
    display: grid;
    width: 200px;
    border: 1px solid black;
    gap: 1px;
}

.button-div{
    padding: 10px;
    display: flex;
    justify-content: center;
}

.cell {
    aspect-ratio: 1;
}

JavaScript部分

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

// 按钮容器
const buttonDiv = document.createElement('div');
buttonDiv.classList.add('button-div');
container.appendChild(buttonDiv);

// 重置按钮
const resetButton = document.createElement('button');
resetButton.textContent = 'Reset';
buttonDiv.appendChild(resetButton);

// 网格容器
const grid = document.createElement('div');
grid.classList.add('grid');
container.appendChild(grid);

// 创建网格函数
function makeGrid(value){
    grid.style.gridTemplateColumns = `repeat(${value}, 1fr)`;
    grid.style.gridTemplateRows = `repeat(${value}, 1fr)`;
    for(let i = 0; i < value; i++){
        for(let j = 0; j < value; j++){
        const cell = document.createElement('div');
        cell.classList.add('cell');
        cell.addEventListener('mouseover', toBlack);
        grid.appendChild(cell);
        }
    }
}

// 鼠标悬停变黑色
function toBlack(e){
    e.target.style.backgroundColor = 'black';
}

// 重置网格
function resetGrid(){
    const value = prompt('Input a number of Squares');
    grid.innerHTML = '';
    makeGrid(value);
}

resetButton.addEventListener('click',resetGrid);

window.onload = () => {makeGrid(16)};

内容的提问来源于stack exchange,提问作者ancxanas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.15 16:01:07