引用:
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-gap
grid-row-gap
grid-gap
- 列与列,行与行之间的交接处就是网格线。
- 使用网格线
grid-column-start
grid-column-end
grid-row-start
grid-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;
}
}