介绍前端知识点——vh,vw是什么?宽度的默认行为?视口?文档流?margin :0 auto;实现块级元素水平居中的原理?
目录
一、介绍视口、vh和vw
1、视口(viewport)
2. vh(viewport height)
3. vw(viewport width)
4. vh 和 vw 的关系
5、与其他单位的对比
6. 实际应用
7. 注意事项
8. 性能优势
二、介绍文档流
文档流的特点
块级元素(Block-level Elements):
行内元素(Inline Elements):
混合元素(Inline-block Elements):
文档流的布局规则
三、宽度的默认行为
默认行为
示例
效果
为什么宽度会占满视口宽度?
如何控制宽度
1. 设置固定宽度
2. 设置百分比宽度
3. 使用 vw 单位
总结
四、margin :0 auto;水平居中的原理
1. 块级元素的默认行为
2. margin: 0 auto; 的原理
3. 实现水平居中的条件
4. 示例
效果
5. 注意事项
6. 性能优势
7、疑问解答 :为什么上下外边距要设为0?
4-7-1. 避免垂直方向上的额外间距
4-7-2. 防止元素的默认 margin 影响布局
4-7-3. 避免 margin 继承问题
4-7-4. 确保垂直方向上的对齐
4-7-5. 性能和可维护性
一、介绍视口、vh和vw
vh 和 vw 是 CSS 中的相对单位,分别代表视口高度(viewport height)和视口宽度(viewport width)的百分比。它们与视口的尺寸密切相关,用于创建响应式布局。以下是详细介绍:
1、视口(viewport)
-
定义:视口是用户在浏览器中看到的网页区域的大小。
-
尺寸:视口的宽度和高度取决于设备屏幕的大小和浏览器窗口的大小。
-
响应式设计:在响应式设计中,视口的尺寸会根据设备的不同而变化。
2. vh(viewport height)
-
定义:1vh 等于视口高度的 1%。
-
用途:用于根据视口高度设置元素的高度。
-
示例
.element { height: 100vh; /* 元素高度为视口高度的100% */ }
3. vw(viewport width)
-
定义:1vw 等于视口宽度的 1%。
-
用途:用于根据视口宽度设置元素的宽度。
-
示例
.element { width: 50vw; /* 元素宽度为视口宽度的50% */ }
4. vh 和 vw 的关系
-
独立性:vh 和 vw 是独立的单位,分别基于视口的高度和宽度。
-
响应性:当视口的尺寸发生变化时,vh 和 vw 的值也会相应变化。
-
灵活性:可以单独或组合使用 vh 和 vw 来创建灵活的布局。
5、与其他单位的对比
-
px(像素):固定单位,不随视口大小变化。
-
%(百分比):相对于父元素的高度,而不是视口。
-
vh:相对于视口的高度,不依赖于父元素。
6. 实际应用
-
全屏布局:使用 height: 100vh; 创建全屏的网页布局。
-
响应式设计:使用 vw 和 vh 确保元素在不同设备上保持一致的视觉效果。
-
动态调整:根据视口的尺寸动态调整元素的大小。
7. 注意事项
-
浏览器兼容性:vh 和 vw 在现代浏览器中得到了广泛支持,但在一些旧版本的浏览器中可能存在问题。
-
滚动条的影响:在某些浏览器中,100vh 或 100vw 可能会计算到滚动条的宽度,导致布局问题。可以通过以下方式解决
.element { height: 100vh; box-sizing: border-box; /* 包括边框和内边距在内 */ }
8. 性能优势
-
减少 JavaScript 依赖:使用 vh 和 vw 可以减少对 JavaScript 的依赖,简化布局代码。
-
提高用户体验:确保网页在不同设备上的表现更加一致,从而提高用户体验。
二、介绍文档流
在网页设计和开发中,文档流(Document Flow)是指网页元素在页面上按照默认的布局规则自动排列的方式。文档流是浏览器在没有额外样式干预的情况下,按照 HTML 元素的默认行为进行布局的一种机制。
文档流的特点
-
块级元素(Block-level Elements):
-
块级元素默认占据一行,从上到下垂直排列。
-
常见的块级元素包括:、
、
到
、
- 、
- 等。
-
块级元素的宽度默认为父容器的宽度,高度由内容决定。
-
行内元素(Inline Elements):
-
行内元素默认与相邻的元素在同一行排列,直到遇到块级元素或行内元素的宽度超出父容器。
-
常见的行内元素包括:、、
、、 等。
-
行内元素的宽度和高度由内容决定。
-
混合元素(Inline-block Elements):
-
行内块级元素结合了块级元素和行内元素的特性。
-
它们可以与其他元素在同一行排列,但可以设置宽度、高度和边距等块级属性。
-
常见的行内块级元素包括:、 等。
-
-
-
文档流的布局规则
-
垂直排列:块级元素按照从上到下的顺序垂直排列。
-
水平排列:行内元素按照从左到右的顺序水平排列。
-
父容器影响:子元素的排列方式受父容器的影响,父容器的宽度和高度会影响子元素的布局。
三、宽度的默认行为
默认行为
-
块级元素(如 div):默认情况下,块级元素会占据其父容器的全部可用宽度。
-
内联元素(如 span):默认情况下,内联元素的宽度由其内容决定,不会自动占满父容器。
示例
假设我们有一个 div 元素,我们只设置了 height: 100vh;:
.fullscreen { height: 100vh; /* 设置高度为视口高度的100% */ background-color: #f0f0f0; /* 设置背景颜色 */ }
效果
-
div 元素的高度将始终等于视口的高度。
-
div 元素的宽度将默认占满其父容器的宽度(通常是整个视口宽度)。
为什么宽度会占满视口宽度?
这是因为 div 是一个块级元素,其默认的 width 是 auto,这意味着它会尽可能地占据父容器的宽度。如果父容器的宽度是视口宽度(例如 body 的宽度默认是视口宽度),那么 div 的宽度也会占满视口宽度。
如何控制宽度
如果你希望明确设置宽度,可以使用以下方法:
1. 设置固定宽度
.fullscreen { height: 100vh; width: 500px; /* 设置固定宽度 */ margin: 0 auto; /* 水平居中 */ }
2. 设置百分比宽度
.fullscreen { height: 100vh; width: 80%; /* 设置宽度为父容器宽度的80% */ margin: 0 auto; /* 水平居中 */ }
3. 使用 vw 单位
.fullscreen { height: 100vh; width: 100vw; /* 设置宽度为视口宽度的100% */ }
总结
-
height: 100vh;:设置元素的高度为视口高度的 100%。
-
宽度行为:块级元素默认会占满父容器的宽度,这并不依赖于 height 的设置。
-
控制宽度:可以通过 width 属性或 vw 单位显式设置宽度。
四、margin :0 auto;水平居中的原理
margin: 0 auto; 是 CSS 中用于水平居中块级元素的一种常见方法。它通过设置元素的左右外边距为 auto,使元素在父容器中水平居中。以下是详细解释:
1. 块级元素的默认行为
-
块级元素(如 div、p 等)默认会占据其父容器的全部可用宽度。
-
内联元素(如 span、a 等)默认不会占据父容器的全部宽度。
2. margin: 0 auto; 的原理
-
margin 属性:用于设置元素周围的外边距。
-
auto 值:当左右外边距设置为 auto 时,浏览器会自动计算并分配相等的左右外边距,从而使元素水平居中。
3. 实现水平居中的条件
-
元素必须是块级元素。
-
元素的宽度不能是 auto(默认值),否则元素会占据父容器的全部宽度,无法居中。
4. 示例
假设我们有一个 div 元素,我们希望它在父容器中水平居中:
水平居中 .container { width: 800px; /* 父容器的宽度 */ height: 400px; /* 父容器的高度 */ background-color: #f0f0f0; /* 父容器的背景颜色 */ } .centered-box { width: 500px; /* 子元素的宽度 */ height: 300px; /* 子元素的高度 */ background-color: #d4b5d5; /* 子元素的背景颜色 */ margin: 0 auto; /* 水平居中 */ }
效果
-
centered-box 元素的宽度被设置为 500px。
-
margin: 0 auto; 将 centered-box 的上下外边距设置为 0,左右外边距设置为 auto。
-
浏览器会自动计算左右外边距,使 centered-box 在 container 中水平居中。
5. 注意事项
-
宽度必须明确:子元素的宽度不能是 auto,否则无法居中。
-
块级元素:这种方法只适用于块级元素。
-
响应式设计:在响应式设计中,可以结合 vw 单位或百分比宽度来实现更灵活的布局。
6. 性能优势
-
使用 margin: 0 auto; 是一种纯 CSS 的解决方案,不需要 JavaScript。
-
它使得布局代码简洁,提高了可维护性。
7、疑问解答 :为什么上下外边距要设为0?
在使用 margin: 0 auto; 实现水平居中时,上下边距设置为 0 是为了确保元素在垂直方向上没有额外的间距,从而保持布局的整洁和预期效果。以下是具体原因:
4-7-1. 避免垂直方向上的额外间距
-
默认行为:块级元素通常有默认的上下边距,这可能会导致元素在垂直方向上出现不必要的间距。
-
设置为 0:将上下边距设置为 0 可以消除这些默认的垂直间距,确保元素紧密贴合父容器的上下边缘。
4-7-2. 防止元素的默认 margin 影响布局
-
默认 margin:某些块级元素(如 h1、p 等)有默认的上下边距,这可能会干扰布局。
-
显式设置:通过显式地将上下边距设置为 0,可以确保这些默认值不会影响元素的垂直位置。
4-7-3. 避免 margin 继承问题
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-