学习前端3件套
display:grid
display:grid是怎么用
display: grid; 是 CSS 中的一个属性值,用于创建一个二维布局系统,允许你通过行和列来组织页面上的元素。以下是如何使用 display: grid; 的基本步骤:
1. 设置容器
首先,你需要选择一个容器元素,并将其 display 属性设置为 grid 或 inline-grid。grid 会使容器占据整个宽度,而 inline-grid 会使容器仅占据必要的宽度。
| 1 | .container { | 
2. 定义网格模板
接下来,你需要定义网格的行和列。这可以通过 grid-template-columns 和 grid-template-rows 属性来完成。
| 1 | .container { | 
3. 放置子元素
现在,你可以将子元素放置在网格中。你可以使用 grid-column 和 grid-row 属性来指定子元素的位置。
| 1 | .item1 { | 
4. 完整示例
以下是一个完整的示例,展示了如何使用 display: grid; 创建一个简单的网格布局。
| 1 | 
 | 
在这个示例中,我们创建了一个包含四个子元素的网格布局。每个子元素都有一个类名为 item,并且通过 grid-column 和 grid-row 属性放置在网格中的特定位置。
5. 更多属性
除了基本的 grid-template-columns 和 grid-template-rows 属性外,CSS Grid 还提供了许多其他属性来控制网格的布局和样式,例如:
- grid-column-gap和- grid-row-gap:设置列和行之间的间距。
- gap:设置列和行之间的间距(简写属性)。
- grid-template-areas:通过命名区域来定义网格布局。
- grid-auto-columns和- grid-auto-rows:定义自动生成的列和行的大小。
- justify-items和- align-items:控制子元素在网格单元格中的对齐方式。
- justify-self和- align-self:控制单个子元素在网格单元格中的对齐方式。
通过这些属性,你可以创建出非常复杂和灵活的网格布局。
详细解释参数
grid-template-columns: 1fr 1fr; 是 CSS Grid 布局中用于定义列宽的一种方式。这里的 fr 是 “fraction”(分数)的缩写,表示将容器可用空间划分为等份,每一份称为一个 fr 单位。
在这个例子中:
- grid-template-columns: 1fr 1fr;表示将容器的宽度分为两份相等的部分。
- 第一个 1fr表示第一列占据容器宽度的 1/2。
- 第二个 1fr表示第二列也占据容器宽度的 1/2。
因此,这种设置会使得两列各占容器宽度的一半,无论容器的实际宽度是多少。
示例
假设你有一个容器,其宽度为 600px:
| 1 | .container { | 
在这种情况下,第一列和第二列各占 300px(即 600px 的一半)。
其他用法
你还可以使用 fr 单位来创建不等宽的列:
| 1 | .container { | 
在这个例子中,第一列占据容器宽度的 1/3,而第二列占据容器宽度的 2/3。
总结
grid-template-columns: 1fr 1fr; 表示将容器的宽度分为两份相等的部分,每一列各占一半。这种设置非常适合创建等宽的列布局。
如果想要实现自适应怎么办
在使用display: grid的布局中实现多列自适应通常涉及到设置grid-template-columns属性为一个或多个响应式单位,如百分比、fr单位(等分剩余空间)或auto-fit/minmax()函数。以下是一些实现多列自适应的方法:
使用百分比
通过将grid-template-columns设置为百分比,可以让列根据容器的宽度自适应。
| 1 | .container { | 
在这个例子中,repeat(auto-fit, minmax(200px, 1fr))表示创建多个列,每列的最小宽度为200px,最大宽度为等分剩余空间(1fr)。auto-fit会根据容器的宽度自动调整列的数量。
使用fr单位
fr单位代表网格容器中的剩余空间份数。通过设置grid-template-columns为1fr,可以让列等分剩余空间。
| 1 | .container { | 
在这个例子中,minmax(200px, 1fr)确保每列至少有200px宽,并且会等分剩余空间。
使用auto-fit和minmax()
auto-fit和minmax()函数结合使用可以创建自适应的列布局。
| 1 | .container { | 
在这个例子中,auto-fit会根据容器的宽度自动调整列的数量,而minmax(200px, 1fr)确保每列至少有200px宽,并且会等分剩余空间。
使用媒体查询
你也可以使用媒体查询来根据不同的屏幕尺寸设置不同的列数。
| 1 | .container { | 
在这个例子中,当屏幕宽度大于等于600px时,列数变为2;当屏幕宽度大于等于900px时,列数变为3。
通过这些方法,你可以实现多列自适应的display: grid布局。
JavaScript
展开运算符
展开运算符(Spread Operator)是 JavaScript 中的一个语法特性,用于将可迭代对象(如数组、对象等)展开为单个元素或属性。它在 ES6(ECMAScript 2015)中被引入,极大地简化了代码书写,提高了开发效率。
展开运算符的基本语法
- 对于数组:使用 ...将数组元素展开。
- 对于对象:使用 ...将对象的属性展开。
展开运算符的用途
1. 在数组中使用展开运算符
合并数组
| 1 | const arr1 = [1, 2, 3]; | 
复制数组
| 1 | const original = [1, 2, 3]; | 
在函数调用中使用
| 1 | function sum(a, b, c) { | 
2. 在对象中使用展开运算符
合并对象
| 1 | const obj1 = { a: 1, b: 2 }; | 
复制对象
| 1 | const original = { a: 1, b: 2 }; | 
在函数调用中使用
| 1 | function greet({ name, age }) { | 
在 Vue.js 中的应用
在你之前提到的 Vuex mapGetters 示例中,展开运算符用于将 mapGetters 返回的对象合并到组件的 computed 属性中:
| 1 | computed: { | 
等同于:
| 1 | computed: { | 
如果不使用展开运算符,你需要手动为每个 getter 定义一个计算属性。而使用展开运算符,可以一次性将多个 getter 映射为组件的计算属性,简化代码。
注意事项
- 浅拷贝:展开运算符执行的是浅拷贝,对于嵌套的对象或数组,内部的引用仍然指向原来的对象。 - 1 
 2
 3
 4- const original = { a: 1, b: { c: 2 } }; 
 const copy = { ...original };
 copy.b.c = 3;
 console.log(original.b.c); // 3
- 不可用于不可迭代对象:展开运算符只能用于可迭代对象(如数组、字符串、Map、Set 等)和对象字面量。 
总结
展开运算符是一种强大的语法工具,能够简化数组和对象的操作,提高代码的可读性和简洁性。无论是在函数调用、数组操作还是对象合并中,展开运算符都提供了便捷的方式来处理数据。
如果你有更多关于展开运算符或其他 JavaScript 语法的问题,欢迎继续提问!
