CSS 美化页面(三)
一、盒模型
盒模型本质上是一个盒子,封装周围的HTML元素 。包含: 外边距,边框,填充,和实际内容
一个盒子由四个区域组成:内容(Content)、内边距(Padding)、外边距(Margin)以及边框(Border)。
有五个属性分别是:width、height、padding、border和margin。具体来说,width和height用于定义内容区域的宽度和高度,而非盒子的整体尺寸
二、盒模型模式
CSS盒模型存在两种不同的模式:标准盒模型与IE盒模型(亦被称为怪异盒模型或替代盒模型)。
1、标准盒模型
所设定的元素宽度和高度仅涵盖内容区域,而内边距、边框以及外边距则被视为额外添加到内容尺寸上的部分。
2、IE盒模型
所设定的宽度和高度理解为包含内容、内边距及边框在内的总和,但并不包含外边距。
height=content_height+padding_height+border_left
width=content_width+padding_width+border_bottom
总之:可以使用 box-sizing
CSS 属性来控制盒模型的选择,从而影响元素的布局计算。
box-sizing: content-box
指定使用标准盒模型;
box-sizing: border-box
则指定使用IE盒模型;
三、border
、margin
和 padding
的区别
属性 | 作用 | 位置 | 示例 |
---|---|---|---|
border | 定义元素的边框,位于内容和外边距之间。 | 位于内容(或内边距)和外边距之间,包裹元素内容和内边距。 | border: 2px solid #000; 表示一个宽度为 2px 的黑色实线边框。 |
margin | 定义元素与其他元素之间的外部间距,用于控制元素之间的距离。 | 位于元素的边框外部,影响元素与其他元素之间的距离。 | margin: 10px; 表示元素与其他元素之间的距离为 10px。 |
padding | 定义元素内容与边框之间的内部间距,用于控制内容与边框的距离。 | 位于内容和边框之间,增加内容与边框的距离。 | padding: 10px; 表示内容与边框之间的距离为 10px。 |
四、边框border
1、简写语法:
border
是border-width
(宽度)、border-style
(样式)、border-color
(颜色),顺序可自由组合,用空格分隔。
border:2px solid black;
2、进阶用法:
单独控制各方向边框
通过 border-top
、border-right
、border-bottom
、border-left
分别设置不同边的样式。
圆角边框
使用 border-radius
实现圆角效果,值越大圆角弧度越明显。
透明边框
通过 transparent
隐藏边框但保留占位空间,适用于布局调整。
<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Document</title><style>#name {/* 设置输入框的大小 */width: 200px;height: 30px;/* 设置输入框的边框和圆角 */border-radius: 5px;/* 设置输入框的边框颜色和样式 4个方向 */border-bottom: 5px solid #4CAF50;border-left: 5px solid #6e408d;border-top: #4CAF50 solid 5px;border-right: #6e408d solid 5px;}form{border: 2px solid #d0e9a3;/* 内边距 */padding: 10px;}div{width:300px;height: 200px;border: 2px solid #a59ace;/* margin: 50px ; *//* 水平居中 */margin: 50px auto; }</style>
</head><body><div><form action="" method="post" id="form1">姓名:<input type="text" name="name" id="name"><br><br>密码:<input type="password" name="password" id="password"><br><br><input type="submit" name="remember" id="remember"></form></div>
</body>
五、内边距padding
1、简写语法:
它是用于设置元素内容与边框(border
)之间的内边距,支持 1~4 个值,有padding-top、padding-right、padding-bottom、padding-left 遵循顺时针方向(上→右→下→左),如图所示:
/* 统一四边内边距 */
.element { padding: 20px; }/* 上下10px + 左右20px */
.element { padding: 10px 20px; }/* 上10px + 右20px + 下30px + 左20px */
.element { padding: 10px 20px 30px; }/* 单独设置四边 */
.element { padding: 10px 20px 5px 15px; } /* 上 右 下 左 */
2、常见使用场景
1. 内容与边框留白
。。。 <style>.box {width: 300px;border: 2px solid #6f4caf; /* 边框 */padding: 30px; /* 内边距 */background-color: #f0f8ff; /* 背景颜色 */font-size: 16px;}</style>
</head>
<body><div class="box">这是展示内容与边框之间的留白(padding)。</div>
</body>
</html>
2. 按钮/图标内间距
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Padding 示例</title><style>.box {width: 300px;border: 2px solid #6f4caf; /* 边框 */padding: 30px; /* 内边距 */background-color: #f0f8ff; /* 背景颜色 */font-size: 16px;margin-bottom: 20px; /* 与按钮的间距 */}/* 按钮样式 */.button {padding: 10px 20px; /* 上下内边距10px,左右内边距20px */font-size: 16px; /* 字体大小 */color: #fff; /* 字体颜色 */background-color: #6f4caf; /* 按钮背景颜色 */border: none; /* 去掉边框 */border-radius: 5px; /* 圆角 */cursor: pointer; /* 鼠标悬停时显示手型 */transition: background-color 0.3s; /* 背景颜色过渡效果 */}/* 按钮悬停效果 */.button:hover {background-color: #90c3cc; /* 悬停时背景颜色变深 */}/* 图标按钮样式 */.icon-button {padding: 10px; /* 内边距 */font-size: 20px; /* 图标大小 */color: #fff; /* 图标颜色 */background-color: #6f4caf; /* 按钮背景颜色 */border: none; /* 去掉边框 */border-radius: 50%; /* 圆形按钮 */cursor: pointer; /* 鼠标悬停时显示手型 */display: inline-flex; /* 使内容居中 */align-items: center; /* 垂直居中 */justify-content: center; /* 水平居中 */transition: background-color 0.3s; /* 背景颜色过渡效果 */}/* 图标按钮悬停效果 */.icon-button:hover {background-color: #be4a84; /* 悬停时背景颜色变深 */}</style>
</head>
<body><div class="box">这是展示内容与边框之间的留白(padding)。</div><!-- 普通按钮 --><button class="button">提交</button><!-- 图标按钮 --><button class="icon-button">★</button>
</body>
</html>
3、 响应式布局适配
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Padding 百分比示例</title><style>.container {width: 80%; /* 容器宽度为父容器的 80% */margin: 0 auto; /* 居中对齐 */padding: 10%; /* 内边距为容器宽度的 10% */background-color: #f0f8ff; /* 浅蓝色背景 */border: 2px solid #4CAF50; /* 绿色边框 */}</style>
</head>
<body><div class="container">这是一个示例,展示使用百分比设置内边距(padding: 10%;)。</div>
</body>
</html>
4、与背景的关系
背景色/图会覆盖
padding
区域,但可通过background-clip
控制
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>background-clip 示例</title><style>.box {width: 300px;padding: 20px; /* 内边距 */border: 5px solid #4CAF50; /* 边框 */background-color: #f0f8ff; /* 浅蓝色背景 */margin-bottom: 20px;}/* 默认值:背景覆盖到边框区域 */.border-box {background-clip: border-box;}/* 背景覆盖到 padding 区域,不覆盖边框 */.padding-box {background-clip: padding-box;}/* 背景仅覆盖内容区域 */.content-box {background-clip: content-box;}</style>
</head>
<body><div class="box border-box">背景覆盖到边框区域(background-clip: border-box)。</div><div class="box padding-box">背景覆盖到 padding 区域(background-clip: padding-box)。</div><div class="box content-box">背景仅覆盖内容区域(background-clip: content-box)。</div>
</body>
</html>
注意:内边距不能是负数哦!!!
六、外边距margin
1、简写语法:
它是用于控制元素与其他元素之间的外边距,支持 1~4 个值,有margin-top、margin-right、margin-bottom、margin-left 遵循顺时针方向(上→右→下→左)如图同上(内边距)
/* 统一四边外边距 */
.box { margin: 20px; }/* 上下20px + 左右40px */
.box { margin: 20px 40px; }/* 上20px + 右40px + 下60px + 左40px */
.box { margin: 20px 40px 60px; }/* 单独设置四边 */
.box { margin: 10px 20px 30px 40px; } /* 上 右 下 左 */
2、核心特性与特殊场景
1. 百分比值基准
<!DOCTYPE html>
<html lang="zh-cn">
<head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><title>Margin 百分比示例</title><style>.box {width: 50%; /* 容器宽度为父容器宽度的 50% */height: 100px; /* 固定高度 */margin: 10%; /* 上下左右外边距为父容器宽度的 10% */background-color: #4CAF50; /* 绿色背景 */}.parent {width: 80%; /* 父容器宽度为视口宽度的 80% */margin: 0 auto; /* 父容器居中 */background-color: #474b4e; /* 浅蓝色背景 */padding: 20px; /* 内边距 */}</style>
</head>
<body><div class="parent"><div class="box"></div></div>
</body>
</html>
2. 负值效果
margin-top: -10px
:元素向上移动,可能覆盖上方内容margin-left: -20px
:元素向左移动,常用于微调布局margin-right: -15px
:右侧元素左移,自身宽度不变
原始位置
右侧内容左移
向上移动
向左移动
3. auto
自动分配
用于水平居中布局,需配合
width
使用
.parent {width: 80%; /* 父容器宽度为视口宽度的 80% */margin: 0 auto; /* 父容器居中 */background-color: #474b4e; /* 浅蓝色背景 */padding: 20px; /* 内边距 */}
4. 外边距合并(Margin Collapse)
- 相邻块级元素:上下外边距取较大值(非相加)
示例:元素 Amargin-bottom: 30px
,元素 Bmargin-top: 20px
→ 实际间距为 30px。- 父元素与子元素:若父元素无
padding
或border
,子元素的垂直外边距会穿透到父元素外部
七、综合应用
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><meta name="viewport" content="width=, initial-scale=1.0"><title>Document</title><style>.card {width: 300px;margin: 20px auto; /* 水平居中 */padding: 15px;border: 2px solid #c97575;}.card img {margin-bottom: -10px; /* 图片与下方文字重叠*/}.card p {margin-top: 15px; /* 实际间距为15px(合并后) */}</style>
</head>
<body><div class="card"><img src="2.jpg" alt="bear" width="60%" height="auto"><p>图片描述文字</p></div></body>
</html>