6.盒子模型、圆角及阴影
一、 盒子模型
盒子模型: 就是把 HTML 页面中的布局元素看做一个矩形盒子,也就是能装内容的容器。 css 盒子模型本质上时一个盒子,封装周围的 HTML 元素,它包括表框、内边距、外边距 和 实际内容。

注
去除无序列表前的小圆点:list-style: none;
1. 边框(border)
border: 可以设置元素的边框。 边框的大小会影响到盒子的大小
语法:
border: border-width | border-style | border-color;边框参数:
| 属性 | 作用 | 
|---|---|
| border-width | 定义边框的粗细,单位是 px | 
| border-style | 定义边框的样式 | 
| border-color | 定义边框的颜色 | 
样式参数:
| 参数 | 效果 | 
|---|---|
| none | 没有表框 | 
| hidden | 隐藏边框 | 
| solid | 实现边框 | 
| dashed | 虚线边框 | 
| dotted | 点线边框 | 
| groove | 3D 沟槽 | 
| ridge | 3D 凸起 | 
| inset | 3D 嵌入 | 
| outset | 3D 起始 | 
详情
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
		.bk1, .bk2,.bk3,.bk4,.bk5,.bk6{
			width: 100px;
			height: 30px;
			border-width: 10px;
			margin-top: 20px;
			border-color: green;
		}
		.bk1{border-style: solid;}
		.bk2{border-style: dashed;}
		.bk3{border-style: dotted;}
		.bk4{border-style: groove;}
		.bk5{border-style: ridge;}
		.bk6{border-style: inset;}
		.bk7{border-style: outset;}
	</style>
</head>
<body>
	<div class="bk1"></div>
	<div class="bk2"></div>
	<div class="bk3"></div>
	<div class="bk4"></div>
	<div class="bk5"></div>
	<div class="bk6"></div>
	<div class="bk7"></div>
</body>
</html>复合写法
语法:
border: 宽度 样式 颜色;详情
<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title></title>
	<style type="text/css">
		.bk1 {
			width: 300px;
			height: 100px;
			border: 10px solid blue;
			border-top-color: red;
		}
	</style>
</head>
<body>
	<div class="bk1"></div>
</body>
</html>相邻边框合并(border-collapse)
border-collapse: 可以使相邻的两个边框合并在一起
语法:
border-collapse: collapse;详情
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title></title>
		<style type="text/css">
			table {
				margin-top: 10px;
				width: 300px;
				height: 150px;
			}
			td,
			th {
				text-align: center;
				border: 1px solid pink;
			}
			/* 合并相邻的边框 */
			.b1 {
				border-collapse: collapse;
			}
		</style>
	</head>
	<body>
		<table class="b1" cellspacing="0">
			<th>姓名</th>
			<th>年龄</th>
			<th>职业</th>
			<tr>
				<td>刘德华</td>
				<td>18</td>
				<td>演员</td>
			</tr>
			<tr>
				<td>郭富城</td>
				<td>20</td>
				<td>歌手</td>
			</tr>
			<td>张学友</td>
			<td>19</td>
			<td>歌手</td>
		</table>
		<table class="b2" cellspacing="0">
			<th>姓名</th>
			<th>年龄</th>
			<th>职业</th>
			<tr>
				<td>刘德华</td>
				<td>18</td>
				<td>演员</td>
			</tr>
			<tr>
				<td>郭富城</td>
				<td>20</td>
				<td>歌手</td>
			</tr>
			<td>张学友</td>
			<td>19</td>
			<td>歌手</td>
		</table>
	</body>
</html>2. 内边距(padding)
padding:可以设置内容与边框之间的距离。 内边距也会影响盒子的大小,想要盒子大小不变时,需要先减去两边的内边距。
注意
如果盒子本身没有指定 height 或 width,那么 padding 不会撑开盒子的大小
属性:
| 属性 | 作用 | 
|---|---|
| padding-top | 上内边距 | 
| padding-right | 右内边距 | 
| padding-left | 左内边距 | 
| padding-bottom | 下内边距 | 
padding 简写
提示
padding 在简写值是,需要遵守 上 - 右 - 下 - 左 的顺序。
| 属性 | 值的个数 | 说明 | 
|---|---|---|
| padding: 5px | 1 个值 | 四个内边距都是 5px | 
| padding: 5px 10px | 2 个值 | 上下为 5px,左右为 10px | 
| padding: 5px 10px 20px | 3 个值 | 上为 5px, 左右为 10px, 下为 5px | 
| padding: 5px 10px 15px 20px | 4 个值 | 上为 5px,右为 10px,下为 15px,左为 20px | 
详情
<!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;
				border: 2px solid green;
				margin-top: 10px;
			}
			.d1 {
				padding: 5px;
			}
			.d2 {
				padding: 5px 10px;
			}
			.d3 {
				padding: 5px 10px 15px;
			}
			.d4 {
				padding: 5px 10px 15px 20px;
			}
		</style>
	</head>
	<body>
		<div class="d1">|四个内边距都是5px|</div>
		<div class="d2">上下为 5px,左右为 10px</div>
		<div class="d3">上为 5px, 左右为 10px, 下为5px</div>
		<div class="d4">上为5px,左为10px,下为15px,右为20px</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>
			.dchh {
				border-top: 3px solid #ff8500;
				border-bottom: 1px solid #edeef0;
				height: 41px;
				background-color: #fcfcfc;
			}
			.dchh a {
				display: inline-block;
				text-align: center;
				padding: 0 20px;
				line-height: 41px;
				text-decoration: none;
				color: #4c4c4c;
				font-size: 12px;
			}
			.dchh a:hover {
				background-color: #eee;
				color: #ff8500;
			}
		</style>
	</head>
	<body>
		<div class="dchh">
			<a href="#">设为首页</a>
			<a href="#">手机新浪网</a>
			<a href="#">移动客户端</a>
			<a href="#">博客</a>
			<a href="#">微博</a>
			<a href="#">关注我</a>
		</div>
	</body>
</html>3. 外边距(margin)
margin:用来控制盒子与盒子之间的距离。
提示
margin 的设置方法和 padding 是完全一致的。
1. 清除内外边距
为了防止某些元素自带的内外边距导致布局混乱,一般在网页开始时,同意清除所有元素的内外边距。 为了保证行内元素的兼容性,一般只设置左右的内外边距,转为块元素则不用考虑。
语法:
* {
	margin: 0;
	padding: 0;
}盒子水平居中
注意
- 要想盒子水平居中,则盒子必须设置了宽度;
- 设置盒子左右的 margin 为 auto即可;
- 行内元素或行内块元素需要水平居中时,给他的父元素增加 text-aling: center即可;
详情
<!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>
		.dchh {
			width: 300px;
			background-color: pink;
			height: 200px;
			margin: 0 auto;
		}
	</style>
</head>
<body>
	<div class="dchh">
	</div>
</body>
</html>外边距合并(嵌套块元素垂直外边距塌陷)
对于两个嵌套(父子关系)的块元素,父元素有上外边距同时子元素也有上外边距,此时父元素会塌陷较大的外边距值。
外边距塌陷的解决办法:
- 为父元素定义上边框:border: 1px solid transparent; (透明边框)
- 为父元素定义内边距:padding: 1px;
- 为父元素添加属性:<mark> overflow: hidden;</mark>
详情
<!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>
		.dchh {
			width: 300px;
			background-color: pink;
			height: 200px;
			margin-top: 20px;
			overflow: hidden;
		}
		.dchh div {
			margin-top: 30px;
			width: 150px;
			height: 150px;
			background-color: green;
		}
	</style>
</head>
<body>
	<div class="dchh">
		<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>
		* {
			margin: 0;
			padding: 0;
		}
		body {
			background-color: #f5f5f5;
		}
		.bnti {
			font-weight: 400;
			font-size: 18px;
			margin: 20px 160px 5px;
		}
		.jx {
			color: red;
			font-weight: 700;
			margin-left: 140px;
		}
		ul {
			width: 1600px;
			height: 500px;
			margin: 0 auto;
			overflow: hidden;
		}
		li {
			display: inline-block;
			width: 298px;
			height: 415px;
			margin-right: 10px;
			background-color: #fff;
		}
		img {
			width: 100%;
			height: 215px;
		}
		.jpuc {
			font-size: 14px;
			line-height: 1.8em;
			height: 70px;
			padding: 0 28px;
			margin-top: 30px;
		}
		.ldyr {
			font-size: 12px;
			color: #b0b0b0;
			padding: 0 28px;
			margin-top: 20px;
		}
		.mdmd p {
			display: inline-block;
		}
		.name {
			font-size: 14px;
			margin-top: 15px;
			padding: 0 28px;
		}
		.jxge {
			font-size: 16px;
			color: red;
			border-left: 2px solid rgb(217, 216, 218);
			padding-left: 10px;
		}
		a {
			text-decoration: none;
			display: block;
			color: black;
		}
	</style>
</head>
<body>
	<div class="dchh">
		<h3 class="bnti">热评产品</h3>
		<div class="jx">+</div>
		<ul>
			<li class="ip1">
				<a href="#">
					<div><img src="https://img.pupper.cn/img/6651596c01f7dc9c8b51b1acdbbcfbca-2021-11-18.jpeg" alt="">
					</div>
					<p class="jpuc">黑马程序员pink老师前端入门教程,零基础必看的移动端前端视频教程</p>
					<p class="ldyr">来自于 123456677888 的评价</p>
					<div class="mdmd">
						<p class="name">黑马程序员pink老师</p>
						<p class="jxge">99.9元</p>
					</div>
				</a>
			</li>
			<li>
				<a href="#">
					<div><img src="https://img.pupper.cn/img/c2627e804856411944e52485d97936d5-2021-11-18.jpeg" alt="">
					</div>
					<p class="jpuc">黑马程序员pink老师前端入门教程,零基础必看的移动端前端视频教程</p>
					<p class="ldyr">来自于 123456677888 的评价</p>
					<div class="mdmd">
						<p class="name">黑马程序员pink老师</p>
						<p class="jxge">99.9元</p>
					</div>
				</a>
			</li>
			<li>
				<a href="#">
					<div><img src="https://img.pupper.cn/img/da9e1f01a9f9c801404d86dfb7fbe79a-2021-11-18.jpeg" alt="">
					</div>
					<p class="jpuc">黑马程序员pink老师前端入门教程,零基础必看的移动端前端视频教程</p>
					<p class="ldyr">来自于 123456677888 的评价</p>
					<div class="mdmd">
						<p class="name">黑马程序员pink老师</p>
						<p class="jxge">99.9元</p>
					</div>
				</a>
			</li>
			<li>
				<a href="#">
					<div><img src="https://img.pupper.cn/img/e222bc7e43f5db72d00f4f49b925400c-2021-11-18.jpeg" alt="">
					</div>
					<p class="jpuc">黑马程序员pink老师前端入门教程,零基础必看的移动端前端视频教程</p>
					<p class="ldyr">来自于 123456677888 的评价</p>
					<div class="mdmd">
						<p class="name">黑马程序员pink老师</p>
						<p class="jxge">99.9元</p>
					</div>
				</a>
			</li>
		</ul>
	</div>
</body>
</html>案例二
注
消除无序列表中的小圆点:list-style: none;
详情
<!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 {
			width: 248px;
			height: 163px;
			border: 1px solid #ccc;
			overflow: hidden;
			margin: 10px auto;
			color: #666;
		}
		.bnti {
			font-weight: normal;
			padding: 0 25px;
			font-size: 14px;
			height: 32px;
			line-height: 32px;
			border-bottom: 1px dotted #ccc;
		}
		.tehv {
			font-size: 12px;
			height: 23px;
			line-height: 23px;
		}
		.tehv a {
			text-decoration: none;
			color: #666;
		}
		.kkbc {
			margin: 7px 0 0 23px;
			list-style: none;
		}
	</style>
</head>
<body>
	<div class="box">
		<h4 class="bnti">品优购快报</h4>
		<ul class="kkbc">
			<li class="tehv"><a href="#">【特惠】爆款耳机5折秒!</a></li>
			<li class="tehv"><a href="#">【特惠】爆款耳机5折秒!</a></li>
			<li class="tehv"><a href="#">【特惠】爆款耳机5折秒!</a></li>
			<li class="tehv"><a href="#">【特惠】爆款耳机5折秒!</a></li>
		</ul>
	</div>
</body>
</html>二、 圆角及阴影
1. 圆角(border-radius)
border-radius:用于设置边框的圆角
语法:
border-radius: length;注
border-radius 可以分别设置四个角,顺序为 左上(border-top-left-radius) - 右上(border-top-right-radius) - 右下(border-bottom-left-radius) - 左下(border-top-right-radius)
- 如果想要一个圆形,border-radius = 正方形的边的一半 px 或 50% ;
- 如果想要一个矩形圆角,border-radius = 长方形的高的一半 px 或 高的 50%;
简写:
| 写法 | 值的个数 | 含义 | 
|---|---|---|
| border-radius: 10px; | 1 个值 | 四个角的弧度都是 10px | 
| border-radius: 10px 20px; | 2 个值 | 左上右下=10px,右上左下=20px | 
| border-radius: 10px 20px 30px; | 3 个值 | 左上=10px,右上左下=20px,右下=30px | 
| border-radius: 10px 20px 30px 40px; | 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>
		.box {
			width: 300px;
			height: 300px;
			background-color: pink;
			border-radius: 20px;
		}
	</style>
</head>
<body>
	<div class="box"></div>
</body>
</html>2. 盒子阴影(box-shadow)
box-shadow:用于设置盒子阴影
语法:
box-shadow: h-shadow v-shadow blur spread color inset;参数;
| 值 | 描述 | 
|---|---|
| h-shadow | 必填,水平阴影的位置,允许负值 | 
| v-shadow | 必填,垂直阴影的位置,允许负值 | 
| blur | 选填,模糊度 | 
| spread | 选填,阴影尺寸 | 
| color | 选填,阴影颜色 | 
| inset | 选填,将外部阴影改为内部阴影(默认为外阴影) | 
详情
<!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>
		.box {
			width: 300px;
			height: 300px;
			background-color: pink;
			border-radius: 20px;
			margin: 50px auto;
		}
		.box {
			box-shadow: 10px 20px 30px #bbb;
		}
	</style>
</head>
<body>
	<div class="box"></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>
		.box {
			width: 200px;
			height: 200px;
			background-color: burlywood;
			margin: 100px auto;
			border-radius: 5px;
		}
		.box:hover {
			box-shadow: 0 0 20px #111;
		}
	</style>
</head>
<body>
	<div class="box">鼠标滑过,阴影出现</div>
</body>
</html>3. 文字阴影(text-shadow)
text-shadow:用于设置文字阴影
语法:
/* 水平阴影位置(必填)、垂直阴影位置(必填)、模糊度、颜色 */
text-shadow: h-shadow v-shadow blur color;详情
<!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>
		.box {
			font-size: 30px;
			font-weight: 700;
			color: red;
			text-shadow: 5px 5px 10px #111;
	</style>
</head>
<body>
	<div class="box">你是阴影,我是火影</div>
</body>
</html>