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

调整font-size致Grid布局Div变大的井字棋开发问题

井字棋Grid布局单元格尺寸问题解决方案

问题根源

当前代码里两个关键问题导致单元格随字体大小变化:

  • #board的grid-template-columns设为auto,Grid会根据单元格内容(字体宽度)自动调整列宽;
  • .square用了max-width/max-height而非固定宽高,无法强制限制单元格尺寸。

修复方案(文字版X/O)

修改CSS代码,固定Grid列宽和单元格尺寸:

body{
    margin: 0;
    background-color: #E1D9D1;
}

#board{
    display: grid;
    /* 用repeat(3,1fr)让3列平分容器宽度,不受内容影响 */
    grid-template-columns: repeat(3, 1fr);
    position: absolute;
    left: 50%;
    top: 50%;
    transform: translate(-50%, -50%);
    width: 30vw;
    height: 30vw;
    gap: 1vmin;
}

.square{
    font-family: 'Nunito', sans-serif;
    background-color: #252525;
    color: white;
    display: flex;
    justify-content: center;
    align-items: center;
    /* 用width/height:100%占满Grid分配的单元格空间 */
    width: 100%;
    height: 100%;
    /* 用clamp适配不同屏幕,字体大小不影响单元格尺寸 */
    font-size: clamp(2rem, 8vw, 6rem);
}

修改后,无论怎么调整font-size,单元格宽高都会保持Grid分配的固定尺寸,不会随内容变化。

图片替代X/O的实现思路

如果想用自定义图片替换文字,有两种简洁方案:

方案1:背景图+动态类

通过JS给单元格添加x/o类,用背景图显示图标:

/* 新增样式 */
.square.x {
  background-image: url('x-icon.png');
  background-repeat: no-repeat;
  background-position: center;
  background-size: 70% 70%; /* 控制图标大小,不撑大单元格 */
}
.square.o {
  background-image: url('o-icon.png');
  background-repeat: no-repeat;
  background-position: center;
  background-size: 70% 70%;
}

HTML里只需给对应单元格加类:<div class="square x"></div>,JS动态切换类即可。

方案2:伪元素+动态类

无需修改HTML,用伪元素承载图片:

/* 新增样式 */
.square.x::after {
  content: '';
  display: block;
  width: 70%;
  height: 70%;
  background-image: url('x-icon.png');
  background-size: 100% 100%;
}
.square.o::after {
  content: '';
  display: block;
  width: 70%;
  height: 70%;
  background-image: url('o-icon.png');
  background-size: 100% 100%;
}

这种方式更简洁,JS只需操作单元格的类名即可切换图标。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 11:35:34