用 linear-gradient 实现棋盘格最省事,需两层45°渐变配合精确的 background-size 和颜色停靠点(25%/75%),避免漏缝或变形;grid 适合语义化与可访问性场景;canvas 适用于动态交互但需手动处理像素对齐与重绘。

用 linear-gradient 画纯 CSS 棋盘格背景最省事
直接写两层 45° 渐变就能出效果,不依赖图片、不触发重排,缩放也清晰。关键在偏移量和重复尺寸的配合。
常见错误是只写一层渐变,结果出来是斜线或条纹,不是方格;或者 background-size 没配对,格子拉伸变形。
-
background-image必须包含两个方向的linear-gradient:一个横向主导,一个纵向主导(实际常都用 45° 配合偏移模拟) -
background-size要设成相同宽高,比如20px 20px,否则格子变菱形或压扁 - 颜色停靠点必须严格控制在
25%和75%附近,例如rgba(0,0,0,0.1) 25%, transparent 25%,少 1% 就漏缝 - IE10+ 支持,IE9 及以下需回退到
filter: progid:DXImageTransform.Microsoft.gradient或切图
body {
background-image:
linear-gradient(45deg, #000 25%, transparent 25%),
linear-gradient(-45deg, #000 25%, transparent 25%),
linear-gradient(45deg, transparent 75%, #000 75%),
linear-gradient(-45deg, transparent 75%, #000 75%);
background-size: 20px 20px;
background-position: 0 0, 0 10px, 10px -10px, -10px 0;
}
Canvas 绘制动态棋盘格适合需要响应式或交互的场景
当格子要随容器缩放、点击高亮某格、或叠加动画时,canvas 比 CSS 更可控。但注意它不自动响应父容器尺寸变化,得手动监听 resize。
容易踩的坑是没清空画布就重绘,导致旧格子残留;或用 fillRect 逐个画 8×8 时坐标算错,尤其起始偏移没对齐 canvas 像素边界,线条发虚。
- 获取 canvas 实际渲染尺寸要用
canvas.width/canvas.height,不是 CSS 设置的宽高 - 格子边长建议取整数,避免 subpixel 渲染模糊;可用
ctx.imageSmoothingEnabled = false强制硬边 - 绘制前务必调用
ctx.clearRect(0, 0, width, height),否则多次 resize 后越来越糊 - 如果格子数固定(如国际象棋 8×8),用双重
for循环比strokeRect+fillStyle切换更稳
Grid 布局生成 HTML 棋盘格适用于需要语义化或可访问性的场合
比如围棋/象棋棋盘要支持键盘导航、屏幕朗读,或后续要往格子里插棋子 DOM 节点,display: grid 是比绝对定位或 float 更现代的选择。
问题常出在 grid-gap 和边框共存导致尺寸错乱,或没设 grid-template-columns/rows 导致列数不固定。
- 用
repeat(8, 1fr)+aspect-ratio: 1保证正方形格子,比写死50px更灵活 - 黑白交替用
:nth-child(odd)不够——得结合行号,推荐用grid-row和grid-column计算奇偶性,或 JS 动态加类 - 若格子内容是文字(如 A1、H8),记得加
text-align: center和line-height居中,别只靠padding - 避免用
float布局棋盘——它已过时,且父子脱离文档流后高度塌陷,调试极难
用 table 实现棋盘格虽兼容性好但语义错误风险高
表格本意是展示二维数据,不是 UI 布局。面试时用 table 写棋盘会被质疑语义意识;生产环境若必须兼容 IE8,才考虑它。
典型问题是单元格宽高受 table-layout: auto 影响,格子大小不一致;合并单元格逻辑一加,整个结构就难维护。
- 强制等宽等高必须设
table-layout: fixed,并给td设width/height - 黑白交替只能靠 JS 算
(i + j) % 2加 class,CSS 里不能用伪类跨行判断 - 每个
td里再塞棋子元素时,vertical-align默认是 baseline,容易上下偏移,得显式设middle - 移动端缩放时,
border-collapse: collapse可能让边框消失,建议保留border-spacing: 0
linear-gradient 和 grid 是目前最值得优先验证的两条路。Canvas 适合有动态需求但得自己管像素对齐,table 则尽量避开——除非 legacy 系统明确要求。前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











