想要把的布局开启, 那就需要用到position属性。
开启相对布局:
position: relative;
相对布局的特点:
1.是元素在移动位置的时候, 他是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置)
2.原来的位置继续占有, 后面的盒子仍然保留在原来的位置。
我们上代码, 来看看效果:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box1{
width: 200px;
height: 200px;
background-color: skyblue;
/* 相对定位 */
/* position 开启定位 relative 开启相对定位 */
position: relative;
top: 100px;
/* 超出了浏览器屏幕范围, 而不是方块变小了 */
/* right: 100px; */
left: 0px;
}
.box2{
width: 200px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<!-- 1.是元素在移动位置的时候, 他是相对于自己原来的位置来移动的(移动位置的时候参照点是自己原来的位置) -->
<!-- 2.原来的位置继续占有, 后面的盒子仍然保留在原来的位置。 -->
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
运行结果:

我们可以看到上面淡蓝色的框, 把下面的深蓝色的框, 给覆盖掉了。这个就是遵循相对布局特点的第二条。
相对布局,是相对于自己原来的位置来移动的。参照物是自己, 不是浏览器。(相对布局的第一条特性)所以如果css里面设置right: 100px;的话, 则浅蓝色的方框会超出浏览器的范围, 因为它是按照自己的原来的位置来移动的。
绝对布局特点:
1.如果没有祖先元素或者祖先元素没有定位, 则以浏览器为准定位
2.当爷爷开启定位的时候, 儿子以爷爷作为参考点
3.当爸爸开启定位的时候, 儿子以爸爸作为参考点
第一种情况:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box1{
width: 400px;
height: 400px;
/* 爸爸现在没有开定位 */
background-color: green;
}
.box2{
width: 200px;
height: 200px;
background-color: red;
/* 开启绝对定位 */
/* 爸爸没有开启定位 那儿子就以浏览器为参考点 */
position: absolute;
bottom: 100px;
right: 500px;
}
</style>
</head>
<body>
<!-- 如果没有祖先元素或者祖先元素没有定位, 则以浏览器为准定位 -->
<div class="box1">
<div class="box2"></div>
</div>
</body>
</html>
我们可以看到祖先元素或者祖先元素没有定位, 则儿子元素以浏览器为准定位。
结果如图:

红色方框的位置以浏览器为准定位。
第二种情况:
当爷爷开启定位的时候, 儿子以爷爷作为参考点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.yeye{
width: 600px;
height: 600px;
background-color: palegreen;
/* 给爷爷开启相对定位 */
/* 当爷爷开启定位的时候, 儿子以爷爷作为参考点 */
position: relative;
}
.baba{
width: 400px;
height: 400px;
background-color: red;
}
.erzi{
width: 200px;
height: 200px;
background-color: pink;
/* 给儿子开启绝对定位 */
position: absolute;
/* 为儿子加偏移量 */
top: 100px;
right: 100px;
}
</style>
</head>
<body>
<!-- 如果祖先元素有定位(相对、绝对、固定定位), 则以最近一级的有定位的祖先元素为参考点移动位置 -->
<div class="yeye">
<div class="baba">
<div class="erzi"></div>
</div>
</div>
</body>
</html>
结果:

第三种情况:
3.当爸爸开启定位的时候, 儿子以爸爸作为参考点
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.yeye{
width: 600px;
height: 600px;
background-color: palegreen;
/* 给爷爷开启相对定位 */
/* 当爷爷开启定位的时候, 儿子以爷爷作为参考点 */
position: relative;
}
.baba{
width: 400px;
height: 400px;
background-color: red;
/* 为爸爸开启相对定位 */
/* 当爸爸开启定位的时候, 儿子以爸爸作为参考点 */
/* 当爷爷和爸爸开启定位的时候, 儿子以爸爸作为参考点(就近原则法) */
/* 当爷爷没有开启定位并且爸爸开启定位的时候, 儿子以爸爸作为参考点 */
position: relative;
}
.erzi{
width: 200px;
height: 200px;
background-color: pink;
/* 给儿子开启绝对定位 */
position: absolute;
/* 为儿子加偏移量 */
top: 100px;
right: 100px;
}
</style>
</head>
<body>
<!-- 如果祖先元素有定位(相对、绝对、固定定位), 则以最近一级的有定位的祖先元素为参考点移动位置 -->
<div class="yeye">
<div class="baba">
<div class="erzi"></div>
</div>
</div>
</body>
</html>
我们把爸爸的那个元素, 打开相对定位
结果:

儿子元素是绝对布局, 爸爸元素是相对布局
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box1{
width: 400px;
height: 400px;
background-color: red;
/* 给爸爸开相对定位 */
position: relative;
}
.box2{
width: 150px;
height: 150px;
background-color: yellow;
/* 给儿子1开绝对定位 */
position: absolute;
}
.box3{
width: 150px;
background-color: green;
/* 原来的为位置不再占有, 后面的盒子会占用位置 */
/* 我们这里把高度设置为200px, 这样看上去更直观一点, 是被覆盖了。 如果只设置150px的话, 就看不到box3方框了, 其实它是被覆盖了, 而不是消失了。 */
height: 200px;
}
.box11{
width: 500px;
height: 500px;
background-color: purple;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">我是黄色的盒子</div>
<div class="box3">我是绿色的盒子</div>
</div>
<div class="box11"></div>
</body>
</html>
结果:

子绝父绝的情况比较少, 但不代表没有。
下面是子绝父绝的情况:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box1{
width: 400px;
height: 400px;
background-color: red;
/* 给爸爸开绝对定位 */
position: absolute;
}
.box2{
width: 150px;
height: 150px;
background-color: yellow;
/* 给儿子1开绝对定位 */
position: absolute;
}
.box3{
width: 150px;
background-color: green;
/* 原来的为位置不再占有, 后面的盒子会占用位置 */
height: 200px;
}
.box11{
width: 500px;
height: 500px;
background-color: purple;
}
</style>
</head>
<body>
<div class="box1">
<div class="box2">我是黄色的盒子</div>
<div class="box3">我是绿色的盒子</div>
</div>
<div class="box11"></div>
</body>
</html>
结果:

特点:
1.无论窗口怎么滑动, 元素的位置始终固定
我们举个例子:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Document</title>
<style>
.box{
width: 100%;
height: 100px;
background-color: red;
/* 给红色盒子加上固定布局fixed */
position: fixed;
/* 固定到 距离下面的距离为0 */
/* 无论窗口怎么滑动, 红色盒子的位置始终固定 */
bottom: 0px;
}
.box1{
/* 让box1的盒子足够高, 以至于可以用上下滚动条来滑动, 通过上下滚动条滑动的实验来验证固定布局的特性 */
height: 3000px;
background-color: blue;
}
</style>
</head>
<body>
<div class="box"></div>
<div class="box1">我是一个盒子</div>
</body>
</html>
结果:


我们可以从两张图片看的出来, 无论滚动条怎么上下滑动, 红色的方框始终在最下方, 这就是固定布局的作用。
flex布局, 称之为弹性布局, 我们来学习下flex布局, 到底有哪些属性, 已经它的用法。
首先, 我们在css里面用到弹性布局, 需要用到display: flex;这句话。
display: flex;
我们简单举个列子, 上代码:
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box{
/* 弹性布局 */
display: flex;
}
.inner-box{
/* width: 200px; */
height: 200px;
border: 3px red solid;
/* 每个盒子占一份空间 */
flex: 1;
}
</style>
</head>
<body>
<div class="box">
<div class="inner-box"></div>
<div class="inner-box"></div>
</div>
</body>
</html>
结果:

我们可以从结果的图中发现, 有两个方框, 而且占用的宽度都是平均分, 这里面就和弹性布局有关了, 我们首先在box盒子里面设置了弹性布局, 然后再inner-box盒子里面设置了一个flex: 1;这个属性, 这个属性代表着两个inner-box,它们两占领的空间都是一份, 所以一个inner-box就占用了总共大小的二分之一。当然这里我要提醒下, 如果把flex值设置为2的话, 结果也是一样的, 因为第一个inner-box占比2, 第二个inner-box占比也是2, 那这样的话, 它们两占比大小, 还是一样不变的, 相当于都是4份里面占其中2份, 也就是说四分之二同时又等于二分之一。
那我们试着想一下, 如果第一个盒子的flex值设置为2, 第二个盒子的flex值设置为1, 那么呈现出来的效果又会是如何呢?
我们举个例子, 就一目了然了。
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
.box{
/* 弹性布局 */
display: flex;
}
.inner-box1{
/* width: 200px; */
height: 200px;
border: 3px red solid;
/* inner-box1盒子占一份空间 */
flex: 1;
}
.inner-box2{
/* width: 200px; */
height: 200px;
border: 3px red solid;
/* inner-box2盒子占两份空间 */
flex: 2;
}
</style>
</head>
<body>
<div class="box">
<div class="inner-box1"></div>
<div class="inner-box2"></div>
</div>
</body>
</html>
结果:

我们不难看到, 第一个盒子宽度短些, 第二个盒子宽度长些。原因也很简单, 因为我们把第一个盒子的flex的值设置成了1, 而第一个盒子的flex的值设置成了2, 那么第一个盒子占比整个盒子的三分之一, 而第二个盒子占比整个盒子的三分之二。
flex布局里面的常见属性配置:
x轴的排列方式用到的属性:
justify-content: 属性值;
以x轴为排列方式, 通常的属性值有:
1.flex-start默认排列方式
2.center居中排列方式
3.flex-end末尾排列方式
4.space-between均匀排列方式, 首个元素放置于起点, 末尾元素放置于终点
5.space-evenly均匀排列方式, 每个元素之间的间隔相等
6.space-around均匀排列方式, 每个元素周围分配相同的空间
这里需要注意下:
运行出来蓝色背景, 背景大小为全屏, height: 100vh;的意思是占比视口高度为100, 相当于占满全屏。
1.flex-start默认排列方式
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title></title>
<style>
*{
margin: 0px;
padding: 0px;
}
.box{
width: 100%;
/* vh是视口高度 */
height: 100vh;
background-color: skyblue;
display: flex;
/* x轴的排列方式 */
/* flex-start默认排列方式 */
/* center居中排列方式 */
/* flex-end末尾排列方式 */
/* space-between均匀排列方式, 首个元素放置于起点, 末尾元素放置于终点 */
/* space-evenly均匀排列方式, 每个元素之间的间隔相等 */
/* space-around均匀排列方式, 每个元素周围分配相同的空间 */
justify-content: flex-start;
}
.inner-box{
width: 50px;
height: 30px;
border: 1px red solid;
}
/* 鼠标移入效果hover */
.inner-box:hover{
color: red;
}
</style>
</head>
<body>
<div class="box">
<div class="inner-box">1</div>
<div class="inner-box">2</div>
<div class="inner-box">3</div>
<div class="inner-box">4</div>
</div>
</body>
</html>
结果:

justify-content: flex-start; 通过这行代码,我们可以看到四个inner-box都在最左上方, 当然上下也有个参数叫做align-items属性, 这个一会儿我们会讲到,这里的关键是四个盒子都在最左边。
2.center居中排列方式
由于博客字数不能超过10000字, 这里字数已经差不多到10000字了, 咱们得下一个博客接着写, 可能会带来不便, 敬请谅解!!!