一、margin
1.1 盒子塌陷
-
结构关系:嵌套,一个大盒子包裹一个小盒子
-
问题描述:当父元素没有上内边距或上边框时如果给子元素设置了上外边距,其结果不是子元素上面距父元素上面有距离而是父元素距上面有距离。也就是说给子盒子设置上外边距其值会给到父元素。如果子元素和父元素都设置了上外边距,如果是正值会取两者中较大值作用于父元素,如果是负值会取绝对值较大的值作用于父元素。
-
表现:父子元素公用一个上外边距
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.warp{
width: 300px;
height: 300px;
background: #f67000;
margin: 0 auto;
}
.inner{
width: 200px;
height: 200px;
background: #ff0000;
margin-top: 100px;
}
</style>
</head>
<body>
<div class="warp">
<div class="inner"></div>
</div>
</body>
</html>
-
解决方法
-
给父元素设置边框或内边距(慎用)
-
给父元素设置overflow: hidden;改变规则
-
1.2、盒子重叠
-
结构关系:相邻元素垂直外边距合并
-
问题描述:当两个块级兄弟元素垂直方向上的margin值直接相遇,会发生合并,最终结果是正值取两者中的较大值,负值取绝对值较大的值
-
表现:两个外边距合并成一个
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
body{
background: #009cf6;
}
.box1{
width:100px;
height:100px;
background-color:red;
margin-bottom:100px;
}
.box2{
width:100px;
height:100px;
background-color:green;
margin-top:100px;
}
</style>
</head>
<body>
<div class="box1"></div>
<div class="box2"></div>
</body>
</html>
-
解决方法
-
尽量只定义其中一个的margin值
-
给其中一个盒子加父元素
overflow:hidden
,改变渲染规则
-
-
其他情况同上【简单带过如后代元素出现同类问题等】
1.3 总结
-
设问通过对盒模型的实际使用对比出它与快递盒子的不同之处
-
总结盒子模型占位的计算:width/height + padding +border+ margin
-
提示学生注意实际开发的过程中要明确测量的宽高是内容宽还是包括了padding的占位宽高
-
垂直方向上相遇的margin值出现折叠问题
二、CSS显示模式
概述:显示模式是指元素以什么方式显示,如div默认独占一行,span默认可以多个在一行排列,了解它们的特点与分类可以更好的布局网页。HTML元素一般分为块级元素与行内元素、行内块元素三大显示模式。
2.1、元素默认显示模式与元素特性总结
-
本身属性为
display:block
的元素称为块级元素-
常见块级元素 div,h1-h6,p,ul,li,dl,dt,ol
-
-
本身属性为
display:inline
的元素称为行级元素-
常见行级元素:span,strong,em,i,a,b
-
-
本身属性为
display:inline-block
的元素称为行级块元素-
常见行内块元素:img,input
-
2.2、块级元素特性总结
-
独占一行,可以设置宽高
-
在不设置宽度的情况下,块级元素的宽度是撑满整个父元素宽度
-
在不设置高度的情况下,块级元素的高度是它本身内容的高度
-
可以设置上下左右的内外边距,边框
2.3、行内元素特性总结
-
默认并排,不可以设置宽高,宽高取决于内容
-
行内元素只能容纳文本或者其他内联元素(此处请注意,不要在内联元素中嵌套块级元素)
-
行标签之间有间隙,不可以设置上下外边距,可以设置内边距但上下内边距对布局没影响
2.4、行内块元素特性总结
-
默认并排,可以设置宽高,宽高取决于内容
-
可以设置任意方向的内边距和外边距
-
并排时中间有间距
2.5、元素类型转换
特殊情况下我们需要进行元素的模式转换,改变默认元素模式使其拥有另一种元素模式的特性,使用display属性能够将三者任意转换。
-
display: inline;转换为行内元素 【不常用】
-
display: block;转换为块状元素 【常用】
-
display: inline-block;转换为行内块状元素 【比较常用】