
本文介绍如何使用纯 CSS 实现一个自适应视口、严格保持正方形比例、单元格等宽等高的 ,特别适合 crossword(填字游戏)等网格类应用。
本文介绍如何使用纯 css 实现一个自适应视口、严格保持正方形比例、单元格等宽等高的 `
占据均等网格区域; ? 推荐 CSS 实现(含注释)/* 重置基础样式,确保一致渲染 */
* {
box-sizing: border-box;
}
body {
margin: 0;
padding: 0;
display: flex;
justify-content: center;
align-items: center;
min-height: 100vh;
background-color: #f5f5f7;
}
.table-container {
/* 容器:居中 + 保留四周安全边距(如 1rem)*/
padding: 1rem;
width: 100%;
max-width: calc(100vw - 2rem);
max-height: calc(100vh - 2rem);
}
table.crossword {
width: 100%;
height: 0; /* 配合 aspect-ratio 触发高度计算 */
aspect-ratio: 1 / 1;
table-layout: fixed; /* 关键:使列宽由 CSS 决定,而非内容 */
border-collapse: separate;
border-spacing: 2px;
background-color: #252627;
margin: 0;
}
table.crossword td {
width: calc(100% / var(--dim)); /* 动态按维度均分宽度 */
height: calc(100% / var(--dim)); /* 同样均分高度 */
background-color: whitesmoke;
text-align: center;
vertical-align: middle;
font-family: 'Segoe UI', system-ui, sans-serif;
font-weight: 600;
font-size: clamp(0.75rem, 4.5vw, 1.5rem); /* 响应式字号 */
text-transform: uppercase;
transition: background-color 0.2s;
}
table.crossword td:empty {
background-color: #252627;
}
/* 可选:悬停反馈 */
table.crossword td:hover:not(:empty) {
background-color: #e0e0e0;
}
? HTML 结构(配合 Jinja2 模板)<div class="table-container">
<table class="crossword" style="--dim: {{ dimensions }};">
{% for row in range(dimensions) %}
<tr>
{% for column in range(dimensions) %}
<td>{{ grid[row][column] or '' }}</td>
{% endfor %}
</tr>
{% endfor %}
</table>
</div>
|
前端入门到VUE实战笔记:立即使用
在学习笔记中,你将探索 前端 的入门与实战技巧!











