调整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
相关产品推荐
相关产品推荐

