title: 三、CSS学习笔记(盒子模型)
date: 2024/02/06
盒子模型
在实际开发中,页面布局主要使用的就是
盒子模型、浮动和定位
,盒子模型能够便捷的帮助我们布局页面
看透网页布局的本质
-
使用 div 元素将页面划分为大小不同的盒子
-
使用 CSS 为每个 div 元素设置对应的大小,再摆放到对应的位置
-
再将对应的内容元素放到对应的盒子中
盒子模型(Box Model)组成
盒子模型
的中心思想就是把整个页面看作一个大的盒子,然后再将大盒子分割成小盒子,以此类推,然后再将对应的内容放到对应的盒子中
-
border:边框,具有
宽度
-
content:内容
-
padding:内边距,
边框到内容
之间的距离 -
margin:外边距,
盒子与盒子
之间的距离
边框(border)
div {
border-width: 1px;
border-style: soled;
border-color: red;
/* 复合写法 border: border-width border-style border-color */;
border: 1px solide red;
}
边框的样式
属性 | 值 | 作用 |
---|---|---|
border-width | 像素(单位px) | 边框宽度 |
border-style | solid(实线)、dashed(虚线)、dotted(点线)等 | 边框样式 |
border-color | 颜色单词、十六进制、rgb | 边框颜色 |
边框的每个属性都分为
top、bottom、left、right
四个方向都可以单独设置样式,如border-top-color: blue;
复合写法也可以border-left: 1px solid green;
-
01-边框.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-Compatiable" content="ie=edge"> <title>边框</title> <style> div { width: 100px; height: 100px; border-width: 1px; border-style: solid; border-color: red; /* 复合写法 */ border: 1px solid red; } </style> </head> <body> <div></div> </body> </html>
合并边框
border-collapse
合并表格单元格边框
-
02-合并单元格边框.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-Compatiable" content="ie=edge"> <title>合并单元格边框</title> <style> table { width: 300px; height: 100px; } td { border: 5px solid red; border-collapse: collapse; } </style> </head> <body> <table> <tr> <td>边框</td> <td>边框</td> <td>边框</td> </tr> <tr> <td>边框</td> <td>边框</td> <td>边框</td> </tr> <tr> <td>边框</td> <td>边框</td> <td>边框</td> </tr> </table> </body> </html>
边框会影响元素的实际大小
当我们设置元素的宽高时,是不包含元素的边框宽度的,如果我们设置元素宽度为 100px, 边框为 10px,那么元素的实际宽度就会比设置的值多 20px
(10 + 100 + 10 = 120)
,如果想要元素的实际宽度就是 100px,那应该设置元素宽度为 80px,这样加上边框的宽度就是 100px 了(10 + 80 + 10 = 100)
03-边框会影响元素的实际大小.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-Compatiable" content="ie=edge"> <title>边框会影响元素的实际大小</title> <style> div { /* 使用开发者工具可以看到 div 的实际宽度等于“自身宽度 + 边框宽度 * 2” */ width: 100px; height: 100px; border: 10px solid red; } </style> </head> <body> <div></div> </body> </html>
内边距
padding
属性用于设置内边距
,即边框与内容之间的距离
内边距分类
属性 | 作用 |
---|---|
padding-left | 左内边距 |
padding-right | 右内边距 |
padding-top | 上内边距 |
padding-bottom | 下内边距 |
案例式样
04-内边距.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-Compatiable" content="ie=edge"> <title>内边距</title> <style> div { border: 1px solid red; width: 100px; height: 100px; padding-top: 20px; padding-left: 20px; } </style> </head> <body> <div>内边距内边距内边距内边距内边距内边距内边距内边距内边距内边距</div> </body> </html>
复合写法
值的个数 | 表达的意思 |
---|---|
padding: 5px | 上、下、左、右四个方向的内边距都是 5px |
padding: 5px 10px | 上、下的内边距是 5px,左、右的内边距是 10px |
padding: 5px 10px 15px | 上内边距是 5px,左、右的内边距是 10px,下内边距是 15px |
padding: 5px 10px 15px 20px | 上内边距是 5px,右内边距是 10px,下内边距是 15px,左内边距是 20px |
05-复合写法.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-Compatiable" content="ie=edge"> <title>复合写法</title> <style> div { border: 1px solid red; width: 100px; height: 100px; padding: 10px; } </style> </head> <body> <div>复合写法复合写法复合写法复合写法复合写法复合写法复合写法复合写法</div> </body> </html>
内边距会影响元素的实际大小
当我们
设置元素的宽高
时,是不包含元素的内边距宽度的,如果我们设置元素宽度为 100px, 上、下、左、右、的内边距均为 10px,那么元素的实际宽度就会比设置的值多 20px(10 + 100 + 10 = 120)
,如果想要元素的实际宽度就是 100px,那应该设置元素宽度为 80px,这样加上内边距的宽度就是 100px 了(10 + 80 + 10 = 100)
06-内边距会影响元素的实际大小.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-Compatiable" content="ie=edge"> <title>内边距会影响元素的实际大小</title> <style> div { /* 使用开发者工具可以看到 div 的实际宽度等于“自身宽度 + 内边距宽度 * 2” */ width: 100px; height: 100px; padding: 10px; } </style> </head> <body> <div></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-Compatiable" content="ie=edge">
<title>新浪导航栏</title>
<style>
.nav {
height: 41px;
line-height: 40px;
border-top: 3px solid #ff8500;
border-bottom: 1px solid #edeef0;
}
ul li {
list-style: none;
float: left;
}
a {
text-decoration: none;
color: #4c4c4c;
display: block;
padding: 0px 20px;
}
a:hover {
background-color: #fcfcfc;
color: #ff8500;
}
</style>
</head>
<body>
<div class="nav">
<ul>
<li><a href="#">设为首页</a></li>
<li><a href="#">手机新浪网</a></li>
<li><a href="#">移动客户端</a></li>
<li><a href="#">博客</a></li>
<li><a href="#">微博</a></li>
<li><a href="#">关注我</a></li>
</ul>
</div>
</body>
</html>
外边距
margin
属性用于设置外边距,即控制盒子和盒子之间的距离
外边距的分类
属性 | 作用 |
---|---|
margin-left | 左外边距 |
margin-right | 右外边距 |
margin-top | 上外边距 |
margin-bottom | 下外边距 |
案例式样
案例式样
08-外边距.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-Compatiable" content="ie=edge"> <title>外边距</title> <style> div { background-color: red; width: 100px; height: 100px; margin-top: 20px; } </style> </head> <body> <div>外边距外边距外边距外边距外边距外边距外边距外边距</div> <div>外边距外边距外边距外边距外边距外边距外边距外边距</div> </body> </html>
使用外边距让块级元素水平居中
为元素指定宽度,在将元素的左右外边距设置为
auto
即可
-
09-使用外边距让元素水平居中.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-Compatiable" content="ie=edge"> <title>使用外边距让元素水平居中</title> <style> div { background-color: red; width: 100px; height: 100px; margin: 0px auto; } </style> </head> <body> <div>使用外边距让元素水平居中</div> </body> </html>
-
若想让
行内元素
或者行内块元素
水平剧中,只需要给其父元素添加text-align: center;
即可<!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-Compatiable" content="ie=edge"> <title>行内元素或者行内块元素水平剧中</title> <style> div { background-color: red; width: 1000px; height: 100px; margin: 0px auto; text-align: center; } </style> </head> <body> <div> <span>行内元素或者行内块元素水平剧中</span> </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-Compatiable" content="ie=edge"> <title>嵌套块元素塌陷</title> <style> .father { background-color: red; width: 500px; height: 500px; margin-top: 50px; } .son { background-color: orange; width: 100px; height: 100px; /* 当为子元素设置边距时,会导致父元素塌陷较大的边距值,且子元素不会生效 */ /* 意思就是说:父元素的上外边距变成了 100px ,而子元素上外边距不生效*/ margin-top: 100px; } </style> </head> <body> <div class="father"> <div class="son"> </div> </div> </body> </html>
-
解决方案
-
为父元素定义上边框属性
-
为父元素定义上内边距属性
-
为父元素添加
overflow: hidden;
属性
清除内外边距
一些元素自己具有默认的内、外边距,不同的元素就有不同的内、外边距同一元素在不同浏览器的内、外边距也是不同的。所以为了保证统一性,我们需要将所有元素的内、外边距清除,这样我们在进行页面布局时就不会受元素本身的内、外边距的影响了。
-
10-清除内外边距.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-Compatiable" content="ie=edge"> <title>清除内外边距</title> <style> * { padding: 0px; margin: 0px; } div { background-color: red; width: 500px; height: 500px; } </style> </head> <body> <div> 清除内外边距 </div> </body> </html>
PS 基本操作
-
文件->打开
:打开我们要测量的图片 -
Ctrl+R
:打开标尺 -
右键标尺
:把单位修改为像素 -
Ctrl+(+) 和 Ctrl+(-)
:放大和缩小视图 -
按住空格键
:使用鼠标拖动图片 -
用
选区工具
拖动,测量大小 -
用
吸管工具
取色
综合案例
<!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-Compatiable" content="ie=edge">
<title>产品模块</title>
<style>
* {
padding: 0px;
margin: 0px;
}
body {
background-color: #f5f5f5;
}
.box {
background-color: #ffffff;
width: 298px;
height: 415px;
margin: 200px auto;
}
.head img{
width: 100%;
}
.foot {
padding: 30px 28px;
}
.review {
font-size: 14px;
}
.appraise {
font-size: 12px;
color: #b0b0b0;
margin-top: 50px;
}
.info {
font-size: 14px;
margin-top: 15px;
}
.price {
color: #ff6700;
}
a {
text-decoration: none;
color: #000000;
}
</style>
</head>
<body>
<div class="box">
<div class="head">
<img src="../Pictures/img.png" />
</div>
<div class="foot">
<p class="review">快递牛,整体不错蓝牙可以说秒连,红米给力</p>
<div class="appraise">来自于 117384232 的评价</div>
<div class="info">
<span>
<a href="#">Redmi AirDots真无线蓝...</a>
</span>
<span> | </span>
<span class="price">99.9元</span>
</div>
<div>
</div>
</body>
</html>
圆角边框
在 CSS3 中,新增了
圆角边框:border-radius
式样,可以使盒子变成圆角
div {
border-radius: 10px;
}
-
11-圆角边框.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-Compatiable" content="ie=edge"> <title>圆角边框</title> <style> div { background-color: orange; width: 500px; height: 500px; border-radius: 50px; } </style> </head> <body> <div> 圆角边框 </div> </body> </html>
圆角边框的使用
-
12-圆形.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-Compatiable" content="ie=edge"> <title>圆角边框的使用</title> <style> /* 圆形:现将盒子设置为正方形,再将圆角设置为 50% 或宽高的一半 */ .circle { background-color: orange; width: 100px; height: 100px; border-radius: 50%; } .radius { background-color: orange; width: 100px; height: 100px; /* 四个角分别设置,从左上顺时针设置 */ border-radius: 10px 20px 30px 40px; /* 也可以分开写 */ /* border-top-left: 10px; border-top-right: 20px; border-bottom-right: 30px; border-bottom-left: 40px; */ } </style> </head> <body> <div class="circle"></div> <div class="radius"></div> </body> </html>
盒子阴影
使用
box-shadow
属性为盒子添加阴影
div {
box-shadow: h-shadow v-shadow blur spread color inset;
}
值 | 含义 |
---|---|
h-shadow | 必须,水平阴影的位置 |
v-shadow | 必须,垂直阴影的位置 |
blur | 可选,模糊距离 |
spread | 可选,阴影的尺寸 |
color | 可选,阴影的颜色 |
inset | 可选,外部阴影转为内部阴影 |
-
13-盒子阴影.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-Compatiable" content="ie=edge"> <title>盒子阴影</title> <style> .rectangle { background-color: orange; width: 100px; height: 100px; /* 阴影向右移动 10px,向下移动 10px,模糊距离 5 px,阴影大小 1px, 阴影颜色,黑色透明度0.3,默认内阴影 */ box-shadow: 10px 10px 5px 1px rgba(0,0,0,0.3); } </style> </head> <body> <div class="rectangle"></div> </body> </html>
文字阴影
可以使用
text-shadow
属性为为文本添加阴影
div {
text-shadow: h-shadow v-shadow blur color;
}
值 | 含义 |
---|---|
h-shadow | 必须,水平阴影的位置 |
v-shadow | 必须,垂直阴影的位置 |
blur | 可选,模糊距离 |
color | 可选,阴影的颜色 |
-
14-文字阴影.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-Compatiable" content="ie=edge"> <title>文字阴影</title> <style> .rectangle { font-size: 40px; /* 阴影向右移动 10px,向下移动 10px,模糊距离 5 px,阴影颜色,黑色透明度0.3 */ text-shadow: 10px 10px 5px rgba(0,0,0,0.3); } </style> </head> <body> <div class="rectangle">你是阴影,我是火影</div> </body> </html>