外边距的三个特征:
同级塌陷
嵌套传递
自动挤压
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style type="text/css">
.box {
width: 200px;
height: 200px;
background-color: lightcoral;
margin-bottom: 20px;
}
.box2 {
width: 200px;
height: 200px;
background-color: burlywood;
margin-top: 20px;
}
/* ********我是分割线******** */
.box3 {
width: 200px;
height: 200px;
background-color: lightgreen;
}
.box4 {
width: 100px;
height: 100px;
background-color: lightskyblue;
/* 设置BOX4小盒子的上边距 */
margin-top: 50px;
}
/* ********我是分割线******** */
.box5 {
width: 200px;
height: 200px;
background-color: lightseagreen;
/* 设置左右边距为自动,也可通过 margin:auto; 设置 */
margin-left: auto;
margin-right: auto;
}
</style>
<title>Margin外边距</title>
</head>
<body>
<!-- 同级塌陷 -->
<!-- 当box设置外下边距为20px,box2设置外上边距为20px 数值会覆盖,不会叠加,及只有20px的边距而不是40px -->
<!-- 当box2的数值大于BOX时,以数值大的为准 -->
<!-- 左右外边距不会塌陷 -->
<div class="box"></div>
<div class="box2"></div>
<hr>
<!-- 嵌套传递 -->
<!-- 设置BOX4小盒子的上边距为50px,发现不是box4小盒子向下移50px,而是box3和box4都向下移了50px。box4的边距数值会传递给父盒子box3 -->
<div class="box3">
<div class="box4"></div>
</div>
<hr>
<!-- 自动挤压 -->
<!-- 我们给box5设置margin-left:auto;,即设置box5左外边距为自动,box5会自动被挤压到最右面。当设置了margin-right:auto;后box5会居中显示。不会根据浏览器的缩放而改变位置 -->
<!-- 简写代码 margin:auto; -->
<div class="box5"></div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
同级塌陷
当box设置外下边距为20px,box2设置外上边距为20px 数值会覆盖,不会叠加,及只有20px的边距而不是40px
当box2的数值大于BOX时,以数值大的为准
左右外边距不会塌陷
嵌套传递
设置BOX4小盒子的上边距为50px,发现不是box4小盒子向下移50px,而是box3和box4都向下移了50px。box4的边距数值会传递给父盒子box3
自动挤压
我们给box5设置margin-left:auto;,即设置box5左外边距为自动,box5会自动被挤压到最右面。当设置了margin-right:auto;后box5会居中显示。不会根据浏览器的缩放而改变位置
简写代码 margin:auto;
内边距padding
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style type="text/css">
/* 第一种方式 */
.box {
width: 200px;
height: 200px;
background-color: burlywood;
padding: 50px;
}
img {
width: 100px;
}
.box {
width: 100px;
height: 100px;
}
/* 第二种方式,宽度分离 */
/* 这是利用了嵌套盒子之间,只有宽度可以继承的特征 */
.main {
width: 200px;
height: 200px;
}
.box2 {
background-color: coral;
padding: 50px;
}
/* box-sizing */
.box3 {
width: 200px;
background-color: lightpink;
/* 将父盒子的宽度作用到边框上,而不是内容上 */
box-sizing: border-box;
padding: 50px;
}
</style>
<title>CSSmargin外边距和padding内边距</title>
</head>
<body>
<!-- padding内边距 -->
<!-- 设置一个大盒子,里面嵌套一个小盒子。使小盒子垂直水平居中 -->
<!-- 第一种方式 -->
<div class="box">
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b9999_10000&sec=1562488375059&di=6d10ce831a0a8caf20b018383a4baad1&imgtype=0&src=http%3A%2F%2Fimg5q.duitang.com%2Fuploads%2Fitem%2F201503%2F28%2F20150328195759_zFcCk.jpeg" alt="小姐姐" srcset="">
</div>
<hr>
<!-- 第二种方式,宽度分离 -->
<div class="main">
<div class="box2">
<img src="https://ss2.bdstatic.com/70cFvnSh_Q1YnxGkpoWK1HF6hhy/it/u=829044612,3699393036&fm=26&gp=0.jpg" alt="小姐姐" srcset="">
</div>
</div>
<hr>
<!-- box-sizing -->
<div class="box3">
<img src="https://timgsa.baidu.com/timg?image&quality=80&size=b10000_10000&sec=1562478553&di=9034c0c380046404ca5640f47a4ed210&src=http://b-ssl.duitang.com/uploads/item/201511/04/20151104193513_QuYmc.jpeg" alt="小姐姐" srcset="">
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
当我们设置子盒子的内边距。父盒子会被撑大
下面有三个解决方案
第一种方式
设置完子盒子的内边距后,重新给父盒子设置一下宽度和高度
第二种方式,宽度分离
这是利用了嵌套盒子之间,只有宽度可以继承的特征
在盒子外面设置一个大盒子,来控制内部盒子的宽度
第三种方式,box-sizing
通过设置box-sizing属性
将父盒子的宽度作用到边框上,而不是内容上
相对定位和绝对定位
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style type="text/css">
/* 相对定位 */
.box {
width: 100px;
height: 100px;
background-color: rebeccapurple;
/* 设置圆角 */
border-radius: 50px;
position: relative;
left: 100px;
}
.box1 {
width: 100px;
height: 100px;
background-color: red;
border-radius: 50px;
position: relative;
left: 100px;
}
.box2 {
width: 100px;
height: 100px;
background-color: royalblue;
border-radius: 50px;
position: relative;
top: -100px;
}
.box3 {
width: 100px;
height: 100px;
background-color: rosybrown;
border-radius: 50px;
position: relative;
left: 200px;
top: -200px;
}
.box4 {
width: 100px;
height: 100px;
background-color:green;
border-radius: 50px;
position: relative;
left: 100px;
top: -200px;
}
.box5 {
width: 100px;
height: 100px;
background-color: goldenrod;
border-radius: 50px;
position: relative;
bottom: 230px;
left: 30px;
}
.box6 {
width: 100px;
height: 100px;
background-color: orchid;
border-radius: 50px;
position: relative;
left: 170px;
bottom: 330px;
}
/* 绝对定位 */
.main {
width: 300px;
height: 400px;
border: 1px dotted lightslategray;
/* 绝对定位, 它是脱离了文档流的, 所有必须要有一个定位父级做为参照物 */
/* 也可以使用绝对定位,但推荐使用相对定位,以防止一些兼容性问题 */
/*position: absolute;*/
position: relative;
left: 200px;
}
.box7 {
width: 100px;
height: 100px;
background-color: rebeccapurple;
/* 设置圆角 */
border-radius: 50px;
position:absolute;
left: 100px;
}
.box8 {
width: 100px;
height: 100px;
background-color: red;
border-radius: 50px;
position:absolute;
top: 100px;
}
.box9 {
width: 100px;
height: 100px;
background-color: royalblue;
border-radius: 50px;
position:absolute;
left: 200px;
top: 100px;
}
.box10 {
width: 100px;
height: 100px;
background-color: rosybrown;
border-radius: 50px;
position:absolute;
left: 100px;
top: 100px;
}
.box11 {
width: 100px;
height: 100px;
background-color:green;
border-radius: 50px;
position: absolute;
left: 100px;
top: 200px;
}
.box12 {
width: 100px;
height: 100px;
background-color: goldenrod;
border-radius: 50px;
position: absolute;
top: 270px;
left: 30px;
}
.box13 {
width: 100px;
height: 100px;
background-color: orchid;
border-radius: 50px;
position: absolute;
top: 270px;
left: 170px;
}
</style>
<title>Position:Relative 相对定位</title>
</head>
<body>
<!--
定位:将元素在页面中重新排列,分为四类
1.静态定位: 浏览器默认方式, 即文档流中的位置
2.相对定位: 元素并未脱离文档流,只是相对于它原来的位置,做相对移动
3.绝对定位: 元素脱离文档流重新排列,不论元素之前是什么类型,全部转为块元素,支持宽高
4.固定定位: 始终相对于浏览器的窗口做为定位父级,进行定位
-->
<!-- 使用相对定位做一个七彩小人-->
<!-- 相对定位, 是以元素在文档流中的原始位置为参照物进行定位的 -->
<h1>相对定位</h1>
<div class="box"></div>
<div class="box1"></div>
<div class="box2"></div>
<div class="box3"></div>
<div class="box4"></div>
<div class="box5"></div>
<div class="box6"></div>
<hr>
<h1>绝对定位</h1>
<!-- 使用绝对定位做一个七彩小人-->
<!-- 绝对定位, 它是脱离了文档流的, 所有必须要有一个定位父级做为参照物 -->
<!-- 默认以整个窗口进行绝对定位, 定位父级是<body> -->
<div class="main">
<div class="box7"></div>
<div class="box8"></div>
<div class="box9"></div>
<div class="box10"></div>
<div class="box11"></div>
<div class="box12"></div>
<div class="box13"></div>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
定位分为四类
1.静态定位: 浏览器默认方式, 即文档流中的位置
2.相对定位: 元素并未脱离文档流,只是相对于它原来的位置,做相对移动
3.绝对定位: 元素脱离文档流重新排列,不论元素之前是什么类型,全部转为块元素,支持宽高
4.固定定位: 始终相对于浏览器的窗口做为定位父级,进行定位
相对定位, 是以元素在文档流中的原始位置为参照物进行定位的
绝对定位, 它是脱离了文档流的, 所有必须要有一个定位父级做为参照物
默认以整个窗口进行绝对定位, 定位父级是<body>
遮罩+绝对定位和固定定位小案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style type="text/css">
body {
margin: 0;
background-image: url(images/php.png);
background-size: cover;
background-repeat: no-repeat;
}
.login img {
width: 360px;
height: 460px;
}
/* 设置遮罩 */
.shades {
position:absolute;
left: 0;
right: 0;
/* 设置遮罩铺满屏幕 */
width: 100%;
height: 100%;
/* 设置遮罩颜色 */
background-color: black;
opacity: 0.6;
}
/* 定位登录框位置垂直水平居中 */
.login {
position: absolute;
left: 50%;
top: 50%;
margin: -230px 0 0 -180px;
}
</style>
<title>绝对定位 遮罩(shade)</title>
</head>
<body>
<div class="shades"></div>
<div class="login"><img src="./images/login.png" alt="" srcset=""></div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<style type="text/css">
.box {
width: 300px;
height: 200px;
background-color: lightgray;
/* 适用固定定位 定位弹窗位置为右下角 */
position:fixed;
right: 0;
bottom: 0;
padding: 10px;
}
button {
float: right;
}
</style>
<title>绝对定位之弹窗广告</title>
</head>
<body>
<div class="box">
<button onclick="this.parentNode.style.display = 'none'">x</button>
<p style="padding: 10px;">你好PHP中文网!</p>
</div>
</body>
</html>点击 "运行实例" 按钮查看在线实例
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号