前言
当你开发一个网页页面时,显然,只用html文件没办法做出像样的页面。这就需要CSS工具帮忙了!笔者将用三篇文章带你从文档流出发,彻底梳理CSS的基础知识。
CSS定位布局
我们从一段代码开始:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.box{
width: 100px;
height: 100px;
background-color: burlywood;
}
</style>
</head>
<body>
<div class="box"></div>
</body>
</html>
这是一个常规的html骨架。一般我们的CSS代码都写在title标签结尾下面,也就是style标签你可以观察到:我们已经创建了一个div对象为box,它在网页中长这样:
如果你看的更仔细点,会发现这个棕色的方块并没有挨着页面的边框!现在我想让这个方块挨着该怎么办?
- 不妨使用
margin。直接设置所有的属性为margin。
*{
margin:0;
}
确实可行,现在挨着了。我若再新建一个box2,设置属性如下:
.box2{
width: 200px;
height: 100px;
background-color: blue;
}
它和box的位置关系怎么样?
为什么排在了box的下面?CSS的位置关系是怎么设置的?这就要讲到html的文档流与三种元素。
文档流与三种元素
文档流
文档流(Normal Flow):是页面的默认排列方式,元素从上到下、从左往右一次排列,呈现一种流式的排列效果。
一个 HTML 就是一个文档,文档中的元素默认按照文档流的方式进行布局。
文档流的特性:
- 从上到下:块级元素依次垂直排列
- 从左到右:行内元素水平排列,宽度不够自动换行
- 自动填充:块级元素默认占满父容器宽度
上面那段代码的box与box2都是块级元素,因此都默认占一行,不会并在一起。于是你有点疑问:怎样的算块级元素?有哪些元素?
块级元素
块级元素:
- 默认占据父容器的一整行,可以设置宽高。
- 天生有display-block属性
行内块级元素
行内块级元素:
- 可以同一行排列,也可以设置宽高
- display - inline block 属性
行内元素
- 不可以设置宽高
三种元素的演示
.box{
width: 100px;
height: 100px;
background-color: burlywood;
display: inline-block;
}
.box2{
width: 200px;
height: 100px;
background-color: blue;
display: inline-block;
}
我们将box、box2都设置为 display: inline-block,也就是块级行内元素,于是这两块就可以并列在同一行了。
别忘了两个都设置为行内块级元素才能同列,否则会因为块级元素独占一行的特性而毫无变化。
接着来看看行内元素,我们插入一段网址,这是我写的上一篇文章地址,讲的是js基本类型。
<a href="https://juejin.cn/post/7639999260360523811">我的文章</a>
设置属性为
.a{
width: 100px;
height: 100px;
}
不会有任何变化。因为行内元素不能设置宽高
CSS的四种定位
CSS 提供了四种定位方式,通过position属性控制
相对定位
相对定位:是相对于元素自身在文档流中的原始位置进行偏移
- 不会脱离文档流,通过
position: relative来设置 请看代码:
.box{
width: 100px;
height: 100px;
background-color: burlywood;
/* display: inline-block; */
position: relative;
left: 50px;
top: 50px;
}
现在box就移动了位置。
相对定位后,原始位置的占位空间亦然保留,后续元素并不会顶上来!
绝对定位
绝对定位:相对最近的拥有定位属性的父级元素进行定位。
绝对定位会完全脱离文档流,如果找不到参考,最终会以
body为参考标准
定位属性:就是position的设置,例如:
position:relative
position:absolute
position:fixed
position:sticky
那么我们设定一个wrap作为box的子元素,属性这样设置:
width: 50px;
height: 50px;
background: #ee13c2;
position: absolute;
left: 20px;
top: 20px;
粉色色块就出现了。
脱离文档流:脱离之后,就好像这个元素从页面中漂浮起来,不占据任何空间、后续元素会填补它的位置。
利用 transform 可以实现完美居中
trap{
position: absolute;
left: 50%;
top: 50%;
transform: translate(-50%, -50%);
}
固定定位
固定点位:相对于浏览器可视区域进行定位,不随页面滚动而滚动。
.box{
width: 100px;
height: 100px;
background-color: red;
position: fixed;
bottom: 10px;
right: 10px;
}
那么右下角就有一个固定下来的红块
粘性定位
粘性定位可以看作 relative 和 fixed 的结合体,到达指定位置之前是相对定位,到达后就变成固定定位
.box{
width: 100px;
height: 100px;
background-color: burlywood;
position: relative;
}
.box2{
width: 200px;
height: 100px;
background-color: blue;
position: sticky;
top: 0;
}
.sticky-box {
width: 100px;
height: 50px;
background-color: #ee13c2;
position: relative;
}
可以看到,这样我们就实现了类似导航栏的效果。
层级控制:z-index
- 层级要生效,一定要配合定位属性
- 只能在兄弟元素之间进行比较
- 后设置的层级显示优先级高于先设计的
总结
CSS定位布局的核心在于理解文档流与参考对象
1.文档流是页面布局的基石,要和脱离的含义一起牢记
2.定位的核心是相对谁偏移
3.牢记三种元素的区别
4.层级元素控制靠z-index
如果本文对你有帮助,欢迎点赞、收藏、关注,一起学习、一起讨论。你的支持是我创作的动力!🌹🌹