适于新手小白的CSS的学习讲解(四)
目录
- 1.1.静态定位( Static positioning)
- 1.2.什么是相对定位?( Relative positioning )
- 1.3.什么是绝对定位?(Absolute positioning)
- 1.5.粘滞定位( Sticky positioning )
这期主要讲BFC属性的作用
- BFC属性的作用
1.避免外边距重叠
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.cube:first-child{
width: 100px;
height: 100px;
margin-bottom: 10px;
background-color: red;
}
.cube:last-child{
width: 100px;
height: 100px;
margin-top: 20px;
background-color: blue;
}
.container{
/* 给父元素开启BFC */
overflow: hidden;
}
</style>
</head>
<body>
<div class="container">
<div class="cube"></div>
</div>
<div class="cube"></div>
</body>
</html>
2.清除浮动
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.parent{
border: 10px solid red;
/* 给父元素开启 BFC */
overflow: hidden;
}
.child{
width: 100px;
height: 100px;
background-color: blue;
float: left;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
<!-- 清除浮动 -->
<!-- <p style="clear:both"></p> -->
</div>
</body>
</html>
3.阻止元素被浮动元素覆盖
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.one{
width: 100px;
height: 100px;
background-color: red;
}
.two{
width: 200px;
height: 200px;
background-color: blue;
}
</style>
</head>
<body>
<div class="one"></div>
<div class="two"></div>
</body>
</html>
4.两行布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.left{
background-color: red;
width: 300px;
float: left;
}
.right{
background-color: blue;
overflow: hidden;
}
</style>
</head>
<body>
<div class="left">左侧定宽</div>
<div class="right">
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
右侧自适应右侧自适应右侧自适应右侧自适应
</div>
</body>
</html>
5.三列布局
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.left,.right{
width: 300px;
height: 300px;
background-color: red;
}
.left{
float: left;
}
.right{
float: right;
}
.center{
margin: 0 auto;
overflow: hidden;
height: 600px;
background-color: blue;
}
</style>
</head>
<body>
<div class="left"></div>
<div class="right"></div>
<div class="center"></div>
</body>
</html>
- 定位布局
- 定位流分类
1.1.静态定位
1.2.相对定位
1.3.绝对定位
1.4.固定定位
1.5.粘滞定位
1.6.z-index
- 1.1.静态定位( Static positioning)
是所有元素的默认定位方式。意味着将一个元素定位在默认文档流中。
position: static;
- 1.2.什么是相对定位?( Relative positioning )
相对定位就是相对于自己以前在标准流中的位置来移动
position: relative;
使用top,right,bottom,left来控制
- 相对定位注意点
-
相对定位是不脱离标准流的, 会继续在标准流中占用一份空间
-
在相对定位中同一个方向上的定位属性只能使用一个
-
由于相对定位是不脱离标准流的, 所以在相对定位中是区分块级元素/行内元素/行内块级元素
-
由于相对定位是不脱离标准流的, 并且相对定位的元素会占用标准流中的位置, 所以当给相对定位 的元素设置margin/padding等属性的时会影响到标准流的布局
- 相对定位应用场景
-
用于对元素进行微调
-
配合后面学习的绝对定位来使用
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div{
width: 100px;
height: 100px;
/* 静态定位 */
position: static;
}
div:first-child{
background-color: red;
}
div:nth-child(2){
background-color: blue;
/* 相对定位 relative 与定位配合的属性 top bottom left right
特点:不脱离文档流 参照自身在浏览器位置进行定位
注意:同一方向属性不可以同时设置 top bottom left right只设置其中一个
*/
position: relative;
top: 20px;
left: 20px;
}
div:last-child{
background-color: yellow;
}
</style>
</head>
<body>
<div></div>
<div></div>
<div></div>
</body>
</html>
- 1.3.什么是绝对定位?(Absolute positioning)
绝对定位就是相对于body来定位 position: absolute;
- 绝对定位参考点
1.规律 默认情况下所有的绝对定位的元素, 无论有没有祖先元素, 都会以body作为参考点
2.如果一个绝对定位的元素有祖先元素, 并且祖先元素也是定位流, 那么这个绝对定位的元素就会以定位流 的那个祖先元素作为参考点。
2.1只要是这个绝对定位元素的祖先元素都可以
2.2指的定位流是指绝对定位/相对定位/固定定位
2.3定位流中只有静态定位不行
3.如果一个绝对定位的元素有祖先元素, 并且祖先元素也是定位流, 而且祖先元素中有多个元素都是定位流, 那么这个绝对定位的元素会以离它最近的那个定位流的祖先元素为参考点。
-绝对定位注意点
1.绝对定位的元素是脱离标准流的
2.绝对定位的元素是不区分块级元素/行内元素/行内块级元素
3.如果一个绝对定位的元素是以body作为参考点, 那么其实是以网页首屏的宽度和高度作为 参考点, 而不是以整个网页的宽度和高度作为参考点
4.一个绝对定位的元素会忽略祖先元素的padding
- 绝对定位-子绝父相
相对定位弊端:
相对定位不会脱离标准流, 会继续在标准流中占用一份空间, 所以不利于布局界面 绝对定位弊端:
默认情况下绝对定位的元素会以body作为参考点, 所以会随着浏览器的宽度高度的变化而变化 子绝父相 子元素用绝对定位, 父元素用相对定位
-绝对定位水平居中
只需要设置绝对定位元素的left:50%;
然后再设置绝对定位元素的 margin-left: -元素宽度的一半px;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div.parent{
width: 100px;
height: 100px;
}
.parent:first-child{
background-color: red;
}
.parent:nth-child(2){
position:relative;
background-color: orange;
}
.child{
width: 50px;
height: 50px;
background-color: blue;
/* 绝对定位 position:absolute
特点:1.脱离文档流 原先位置不保留 飘在文档流上方
2.无论有没有父元素或者祖先元素 参照浏览器视口区域进行定位
3.如果父元素或者祖先元素也设置了定位 参照父元素或者祖先元素进行定位
*/
position: absolute;
top: 50px;
left: 50px;
}
.parent:last-child{
background-color: yellow;
}
</style>
</head>
<body>
<div class="parent"></div>
<div class="parent">
<div class="child"></div>
</div>
<div class="parent"></div>
</body>
</html>
水品垂直居中方案:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.parent{
width: 220px;
height: 260px;
background-color: red;
/* 水平居中 */
margin: 0 auto;
/* 1.2 */
/* border: 1px solid red; */
/* 2.1给父元素设置padding */
/* padding: 80px 60px; */
/* 2.2将父元素设置为border-box */
/* box-sizing: border-box; */
/* 3.1给父元素设置相对定位 */
/* position: relative; */
/* 4.1给父元素设置相对定位 */
position: relative;
}
.child{
width: 100px;
height: 100px;
background-color: blue;
/* 1.1通过margin挤压 父元素高-子元素高/2 上下外边距
父元素宽-子元素宽/2 左右外边距 */
/* margin:80px 60px; */
/* 3.2子元素绝对定位 配合属性全部为0 margin:auto */
/* position: absolute;
top: 0;
bottom: 0;
left:0;
right: 0;
margin: auto; */
/* 4.2给子元素绝对定位width height以子元素为准 top:50% left:50% margin-left:-width/2 margin-top:-height/2 */
position: absolute;
top: 50%;
left: 50%;
margin-left: -50px;
margin-top: -50px;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>
- 1.4.固定定位(Fixed positioning)
1.什么是固定定位?
position: fixed;
固定定位和前面学习的背景关联方式很像, 背景定位可以让背景图片不随着滚动条的滚动而滚动, 而固定 定位可以让某个盒子不随着滚动条的滚动而滚动。
注意点: 1.固定定位的元素是脱离标准流的, 不会占用标准流中的空间
2.固定定位和绝对定位一样不区分行内/块级/行内块级
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.fixBox{
width: 100px;
height: 100px;
background-color: yellow;
/* 固定定位 position:fixed
特点:
1.脱离文档流 原先位置不保留 飘在文档流上方
2.参考浏览器视口区域定位
*/
position: fixed;
bottom: 20px;
right: 20px;
}
.two{
width: 100px;
height: 100px;
background-color: blue;
}
</style>
</head>
<body>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div>段落标签</div>
<div class="fixBox">
<a href="#">回到顶部</a>
</div>
<div class="two"></div>
</body>
</html>
- 1.5.粘滞定位( Sticky positioning )
position: sticky;
结合了 position:relative 和 position:fixed 两种定位功能于一体的特殊定位,适用于一些特殊场景。
元素定位表现为在跨越特定阈值前为相对定位,之后为固定定位。
设置了position: sticky的元素并不脱离文档流,仍然保留元素原本在文档流中的位置。
当元素在容器中被滚动超过指定的偏移值时,元素在容器内固定在指定位置。
亦即如果设置了top: 50px,那么在sticky元素到达距离相对定位的元素顶部50px的位置时固定,不再向上
移动(此时相当于fixed定位)。
设置 position:sticky
同时给一个 (top,bottom,right,left)
之一即可
使用条件:
父元素不能overflow:hidden或者overflow:auto属性。
必须指定top、bottom、left、right4个值之一,否则只会处于相对定位
父元素的高度不能低于sticky元素的高度
sticky元素仅在其父元素内生效
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.container{
width: 1200px;
margin: 0 auto;
}
.container>div{
width: 1200px;
height: 700px;
}
.container>div:nth-child(odd){
background-color: pink;
}
.container>div:nth-child(even){
background-color: #fff;
}
aside.left,aside.right{
width: 200px;
height: 500px;
background-color: red;
/* 粘滞定位:position:sticky 不脱离文档流
relative + fixed组合 没有达到阈值前是相对定位 达到阈值后固定定位
*/
position: sticky;
top: 50px;
}
aside.right{
float: right;
}
</style>
</head>
<body>
<div class="container">
<div></div>
<!-- 侧边栏 -->
<aside class="right"></aside>
<aside class="left"></aside>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
<div></div>
</div>
</body>
</html>
- 1.6.z-index
1.什么是z-index属性?
默认情况下所有的元素都有一个默认的z-index属性, 取值是0.
z-index属性的作用是专门 用于控制定位流元素的覆盖关系的
2.默认情况下定位流的元素会盖住标准流的元素
3.默认情况下定位流的元素后面编写的会盖住前面编写的
4.如果定位流的元素设置了z-index属性, 那么谁的z-index属性比较大, 谁就会显示在上面
注意点:
1.从父现象
1.1如果两个元素的父元素都没有设置z-index属性, 那么谁的z-index属性比较大谁就显示在上 面。
1.2如果两个元素的父元素设置了z-index属性, 那么子元素的z-index属性就会失效, 也就是说 谁的父元素的z-index属性比较大谁就会显示在上面。
兄弟元素堆叠顺序:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
div:first-child{
width: 100px;
height: 100px;
background-color: red;
position: relative;
z-index: 10;
}
div:last-child{
width: 100px;
height: 100px;
background-color: blue;
margin-left: 50px;
margin-top: -50px;
position: relative;
z-index: -20;
}
</style>
</head>
<body>
<div></div>
<div></div>
</body>
</html>
父子元素堆叠顺序;
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
.parent{
width: 200px;
height: 200px;
background-color: red;
position: relative;
/* z-index:1000 ; */
}
.child{
width: 100px;
height: 100px;
background-color: blue;
position: relative;
z-index: 100;
}
</style>
</head>
<body>
<div class="parent">
<div class="child"></div>
</div>
</body>
</html>