学习目标
- 能够认识 盒子模型 的组成部分
- 能够掌握盒子模型的 边框、内边距、外边距 的作用及简写形式
- 能够计算盒子的 实际大小
- 能够了解 外边距折叠现象,并知道如何解决 盒子塌陷问题
css三大特性
继承性 层叠性 优先级
优先级
不同选择器具有不同的优先级,优先级高的选择器样式会覆盖优先级低选择器样式
权重叠加
如果是复合选择器,此时需要通过权重叠加计算方法,判断最终哪个选择器优先级最高会生效
权重叠加公式:
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ZIG68WkA-1646824997703)(…/…/…/web81/day06/03-%E7%AC%94%E8%AE%B0/assets/1641634659053.png)]
权重叠加计算公式:(每一级之间不存在进位)
盒子模型组成
内容区 边框 内边距 外边距
网页的每个元素(标签)都可以理解为盒子.
内容区域
宽高设置内容区域的大小
width:50px;
height:60px;
边框(border)
边框粗细
border-width:5px;
边框样式
border-style:solid|dashed|dotted
边框颜色
border-color:red;
边框单方向
border-top:solid 1px red;
border-bottom:solid 1px red;
border-left:solid 1px red;
border-right:solid 1px red;
边框简写
border:solid 1px red;
内边距(padding)
上右下左
padding:10px;
上下 左右
padding:10px 20px;
上 左右 下
padding:10px 20px 30px;
上右下左
padding:10px 20px 30px 50px;
内边距单方向设置
padding-top:10px;
padding-bottom:10px;
padding-left:10px;
padding-right:10px;
盒子模型终极计算公式
盒子宽度=左右边框+左右padding+内容宽度
盒子高度=上下边框+上下padding+内容高度
边框 padding都会撑大盒子
1 手动内减
2 自动内减
自减盒子模型
css3盒子模型
box-sizing: border-box;
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-aYfb43AQ-1646824997704)(assets/1641723483106.png)]
外边距(margin)
上右下左
margin:10px;
上下 左右
margin:10px 20px;
上 左右 下
margin:10px 20px 30px;
上右下左
margin:10px 20px 30px 50px;
外边距单方设置
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OYakfEF6-1646824997704)(assets/1641723533598.png)]
清除内外边距
因为部分标签有默认的内外边距,如果不清除,会影响网页布局…
*{
margin:0;
padding:0;
}
版心
网页的可视区域.版心一定要固定的宽度.实际开发固定宽度一旦设置,不要轻易更改.
.w{
width:1226px;
margin:0 auto;
}
新闻案例
<div class="news">
<h2>最新文章/New Articles</h2>
<ul>
<li><a href="#">武汉招聘前端开发,vue.js,css</a></li>
<li><a href="#">武汉招聘网页设计,vue.js,css</a></li>
<li><a href="#">武汉招聘网页设计,vue.js,css</a></li>
<li><a href="#">武汉招聘网页设计,vue.js,css</a></li>
<li><a href="#">武汉招聘网页设计,vue.js,css</a></li>
</ul>
</div>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.news {
width: 500px;
height: 400px;
/* ps */
/* background-color: pink; */
margin: 50px auto 0;
padding: 40px 30px 0;
border: 1px solid #ccc;
}
.news h2 {
font-size: 30px;
color: #000;
border-bottom: 1px solid #ccc;
padding-bottom: 10px;
}
ul {
list-style: none;
}
.news ul li {
height: 50px;
line-height: 50px;
padding-left: 28px;
border-bottom: 1px dashed #ccc;
/* text-indent: 2em; */
}
.news a {
font-size: 18px;
color: #666;
text-decoration: none;
}
.news a:hover {
text-decoration: underline;
color: orange;
}
外边距折叠现象
外边距正常现象
<!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>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div {
display: inline-block;
width: 200px;
height: 300px;
}
.box1 {
background-color: pink;
margin-right: 20px;
}
.box2 {
background-color: green;
margin-left: 30px;
}
/*
水平布局的盒子,左右margin正常,互不相影响,
最终的距离为margin左右的和.
*/
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></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>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
div {
width: 200px;
height: 300px;
}
.box1 {
background-color: pink;
margin-bottom: 20px;
}
.box2 {
background-color: green;
margin-top: 60px;
}
/*
垂直布局 的 块级元素,上下的margin会合并
最终两者的距离为margin最大值
解决方案:实际开发避免即可,只给其中一个盒子设置margin即可
*/
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
外边距折叠-塌陷现象
互相嵌套 的 块级元素,子元素的 margin-top 会作用在父元素上
<!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>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
.father {
width: 600px;
height: 600px;
background-color: pink;
/* border-top: 1px solid #000; */
/* padding-top: 1px; */
/* overflow: hidden; */
}
.son {
float: left;
width: 200px;
height: 200px;
margin-top: 40px;
background-color: green;
}
/*
互相嵌套 的 块级元素,子元素的 margin-top 会作用在父元素上
导致父元素一起往下移动
解决方案
1 给父元素设置border-top;
2 给父元素设置padding-top
3 给父元素设置 overflow: hidden
4 转换为行内块元素
5 设置浮动
注意:浮动 绝对定位 固定定位的盒子不会有嵌套块级元素塌陷问题.
*/
</style>
</head>
<body>
<div class="father">
<div class="son"></div>
</div>
</body>
</html>
行内元素内外边距无效
<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>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
/* display: inline-block; */
/* 水平方向 有效 */
/* margin:0 20px; */
/* 垂直方向 无效*/
/* margin: 30px 0; */
padding: 50px 30px;
}
</style>
</head>
<body>
<a href="#">百度</a>|<a href="#">新浪</a>|<a href="#">谷歌</a><a href="#">小米</a>|
</body>
</html>
margin: 0;
padding: 0;
box-sizing: border-box;
}
a {
/* display: inline-block; */
/* 水平方向 有效 */
/* margin:0 20px; */
/* 垂直方向 无效*/
/* margin: 30px 0; */
padding: 50px 30px;
}
</style>
百度|
新浪|
谷歌
小米| ```