引用:
notes
- 网格是一组相交的水平线和垂直线,它定义了网格的列和行。
- CSS 提供了一个基于网格的布局系统,带有行和列,可以让我们更轻松地设计网页,而无需使用浮动和定位。
- 网格布局由一个父元素及一个或多个子元素组成。
- 当一个 HTML 元素将
display属性设置为grid或inline-grid后,它就变成了一个网格容器,这个元素的所有直系子元素将成为网格元素。 - 我们通过
grid-template-columns和grid-template-rows属性来定义网格中的行和列。 - 这些属性定义了网格的轨道,一个网格轨道就是网格中任意两条线之间的空间。
grid-template-columns定义列数grid-template-rows定义每一行的高度- 轨道可以使用任何长度单位进行定义。
- 网格引入了
fr单位来帮助我们创建灵活的网格轨道。一个fr单位代表网格容器中可用空间的一等份。 - 一个网格单元是在一个网格元素中最小的单位, 从概念上来讲其实它和表格的一个单元格很像。
- 一旦一个网格元素被定义在一个父级元素当中,那么他的子级元素将会排列在每个事先定义好的网格单元中。
- 网格元素可以向行或着列的方向扩展一个或多个单元,并且会创建一个网格区域。
- 网格区域的形状应该是一个矩形 - 也就是说你不可能创建出一个类似于”L”形的网格区域。
- 网格元素的垂直线方向称为列(Column)
- 网格元素的水平线方向称为行(Row)
- 网格间距(Gap)指的是两个网格单元之间的网格横向间距(Column Gap)或网格纵向间距(Row Gap)
- 调整间隙大小
grid-column-gapgrid-row-gapgrid-gap
- 列与列,行与行之间的交接处就是网格线。
- 使用网格线
grid-column-startgrid-column-endgrid-row-startgrid-row-end
demo 数字输入框
练习 grid 布局

<!DOCTYPE html><html><head><meta charset="utf-8"><title>test 数字输入框</title><link rel="stylesheet" href="./index.css"></head><body><input type="text" id="numberInput"><div class="grid-container" id="grid"><div class="btn num1">1</div><div class="btn num2">2</div><div class="btn num3">3</div><div class="btn clear">清空</div><div class="btn num4">4</div><div class="btn num5">5</div><div class="btn num6">6</div><div class="btn cancel">取消</div><div class="btn num7">7</div><div class="btn num8">8</div><div class="btn num9">9</div><div class="btn confirm">确定</div><div class="btn num0">0</div><div class="btn backspace">退格</div></div><script>const input = document.getElementById("numberInput");const grid = document.getElementById("grid");grid.addEventListener("click", function (e) {input.focus()const target = e.target;const currentVal = input.value;if (target.classList.contains("btn")) {if (target.classList.contains("num1") || target.classList.contains("num2") ||target.classList.contains("num3") || target.classList.contains("num4") ||target.classList.contains("num5") || target.classList.contains("num6") ||target.classList.contains("num7") || target.classList.contains("num8") ||target.classList.contains("num9") || target.classList.contains("num0")) {// 添加数字到输入框input.value = currentVal + target.textContent;} else if (target.classList.contains("clear")) {// 清空输入框input.value = "";} else if (target.classList.contains("backspace")) {// 删除最后一个字符input.value = currentVal.slice(0, -1);} else if (target.classList.contains("cancel")) {// 按需进行其他操作,例如关闭数字键盘} else if (target.classList.contains("confirm")) {// 按需进行其他操作,例如提交表单}}});</script></body></html>
.grid-container {display: inline-grid;grid-template-columns: 100px 100px 100px 100px;grid-template-rows: 100px 100px 100px 100px;grid-gap: 10px;background-color: rgba(0, 0, 0, .2);padding: 10px;.btn {background-color: #eee;text-align: center;font-size: 30px;text-align: center;line-height: 100px;border-radius: 15px;cursor: pointer;}.confirm {grid-area: 3 / 4 / 5 / 4;line-height: 200px;}.confirm {color: #fff;background-color: #f40;}.cancel {color: #fff;background: gray;}.num0 {grid-area: 4 / 1 / 4 / 3;}}

