一、什么是盒子模型
1.概述
HTML中的盒子模型(Box Model)是CSS布局的基础概念之一,它描述了如何对文档中的元素进行布局和计算大小。每个盒子模型都包括以下几个部分:
- 内容(Content) :这是盒子模型的中心,包含了元素的实际内容,比如文本、图片等。内容区域的大小可以通过设置
width
和height
属性来指定。 - 内边距(Padding) :内边距位于内容区域的外围,将内容与边框隔开。内边距是透明的,其大小可以通过
padding
属性(包括padding-top
、padding-right
、padding-bottom
、padding-left
)来设置。 - 边框(Border) :边框环绕在内边距和内容之外,是可见的。边框的大小、样式和颜色可以通过
border
属性(如border-width
、border-style
、border-color
)来设置。 - 外边距(Margin) :外边距位于边框的外围,是盒子与其他元素之间的空间。外边距是透明的,其大小可以通过
margin
属性(包括margin-top
、margin-right
、margin-bottom
、margin-left
)来设置。外边距还涉及到元素的定位和其他元素之间的相互作用,比如边距合并(Margin Collapsing)等。
2.盒子模型的总宽度和总高度
盒子的总宽度和总高度由内容区域、内边距、边框和外边距共同决定。具体计算方式如下:
- 总宽度 = 左外边距 + 左边框 + 左内边距 + 内容宽度 + 右内边距 + 右边框 + 右外边距
- 总高度 = 上外边距 + 上边框 + 上内边距 + 内容高度 + 下内边距 + 下边框 + 下外边距
3.IE盒子模型(怪异模式)与标准盒子模型
需要注意的是,早期的Internet Explorer浏览器实现了一个不同的盒子模型,即IE盒子模型(有时也称为怪异模式)。在这个模型中,元素的width
和height
属性只包括内容区域,而不包括内边距、边框和外边距。不过,现代的浏览器默认使用标准的盒子模型,即width
和height
属性包括了内容、内边距和边框,但不包括外边距。
如果你需要在标准模式下模拟IE盒子模型的行为,可以通过设置CSS属性box-sizing: border-box;
来实现。这样,元素的width
和height
属性就会包括内容、内边距和边框,但不包括外边距
二、边框
border
1.边框的属性
1.1border-color
属性 | 说明 |
---|---|
border-top-color | 上边框颜色 |
border-bottom-color | 下边框颜色 |
border-left-color | 左边框颜色 |
border-right-color | 右边框颜色 |
border-color:颜色1 颜色2; | 上下边框为颜色1,左右边框为颜色2 |
border-color:颜色1 颜色2 颜色3 ; | 上边框为颜色1,左右边框为颜色2,下边框为颜色3 |
border-color:颜色1 颜色2 颜色3 颜色4; | 颜色顺序:上、右、下、左 |
bordder-color:颜色; | 所有边框同色 |
如果背景是白色,则可以通过设置边框颜色为白色#fff实现隐藏效果
1.2border-width
边框宽度
thin、medium、thick、具体像素值
1.3border-style
边框样式
dashed:虚线
solid:实线
dotted:圆点虚线
double:两条线
2.border简写
html
#语法(顺序不是固定的)
border:边框粗细 线条样式 颜色;
如:
border:1px solid red;
三、外边距
margin:border和外面的距离
1.margin属性
- margin-top
- margin-bottom
- margin-left
- margin-right
- margin 个数归规律同border-color
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>03margin外边距</title>
<style>
p{
border: 1px solid red;
margin-top: 30px; /*距离上面的距离*/
margin-left: 30px; /*距离左边的距离*/
margin-right: 30px;
margin-bottom: 100px;
}
</style>
</head>
<body>
<p>厉害了,美国失业率还在增加</p>
<h1>厉害了</h1>
</body>
</html>
2.margin简写
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>03margin外边距</title>
<style>
p{
border: 1px solid red;
/*
写一个:表示上下左右
写两个:表示上下和左右
写三个:表示上,左右和下
写四个:表示上右下左
*/
margin: 50px 30px 0px 0px;
}
</style>
</head>
<body>
<p>厉害了,美国失业率还在增加</p>
<h1>厉害了</h1>
</body>
</html>
3.外边距-网页居中对齐
margin:0px auto;
其中第一个像素表示距离上面的外边距
四、内边距
padding:表示内边距
1.属性
- padding-top
- padding-bottom
- padding-left
- padding-right
- padding
2.案例
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>会员登录</title>
<style>
/* 第一步 */
*{
margin: 0px;
padding: 0px;
}
/* 真个宽位置等 */
.box{
width: 298px;
border: 1px solid #4D7794;
margin: 0px auto;
}
/* 标题 */
.box h1{
font-size: 16px;
background-color: #3A6587;
line-height: 35px;
color: #fff;
text-indent: 1em;
}
/* 表单 */
form{
background-color: #C8ECE3;
padding: 30px 10px;
}
div{
margin: 10px 0px;
}
</style>
</head>
<body>
<div class="box">
<h1>会员登录</h1>
<form action="#" method="get">
<div>
<strong>姓名:</strong>
<input type="text" name="name" id="">
</div>
<div>
<strong>邮箱:</strong>
<input type="text" name="name" id="">
</div>
<div>
<strong>电话:</strong>
<input type="text" name="name" id="">
</div>
</form>
</div>
</body>
</html>
五、盒子模型的尺寸
1.box-sizing
css
/*
语法:
box-sizing:默认值,盒子的总尺寸 | 盒子的宽度或高度等元素内容的宽度或高度 | 元素继承父元素的盒子模型模式
*/
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>08.box-sizing</title>
<style>
div{
width: 100px;
height: 100px;
border: 1px solid #000;
padding: 5px;
margin: 10px;
/* 默认值content-box */
box-sizing: border-box;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
六、练习
1.练习1
- 需求:
- 整个宽度220px,边框1px 实线 #aacbee,背景颜色:#f5f9fc ,相对于网页居中
- 标题:有背景图片,字体大小14px,行高30像素
- 内容项:每一个li高度为30px,padding-left:5px,上边框:1px #cfe2f5 solid,向右边箭头是背景图片
- 每个li鼠标放在上面字的颜色变为#ff6215 (没有下划线)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>课程导航</title>
<style>
*{
margin: 0px;
padding:0px;
}
ul li{
list-style: none;
}
/* 整个div */
#course_list{
width: 220px;
border: 1px #aacbee solid;
margin: 0px auto;
padding: 0px 0px 10px 0px;
background-color: #f5f9fc;
}
/* 标题 */
#course_list .title{
color: #1f376d;
font-size: 14px;
line-height: 30px;
padding-left: 25px;
background: url(image/title_icon.gif) no-repeat 5px 8px;
}
/* ul */
#course_list ul {
padding: 0px 5px;
}
/* ul li */
#course_list ul li{
line-height: 30px;
background: url(image/submenu.gif) no-repeat right center;
border-top: 1px #cfe2f5 solid;
}
/* a标签 */
#course_list ul li a{
text-decoration: none;
color: #000;
}
/* 鼠标放上去a标签的样式 */
#course_list ul li a:hover{
text-decoration: none;
color: #ff6215;
}
</style>
</head>
<body>
<div id="course_list">
<h1 class="title">课程导航</h1>
<ul>
<li>
<a href="#">ACCP 软件工程师</a>
</li>
<li>
<a href="#">BTEST 软件测试工程师</a>
</li>
<li>
<a href="#">ACCP 软件工程师</a>
</li>
<li>
<a href="#">ACCP 软件工程师</a>
</li>
<li>
<a href="#">BTEST 软件测试工程师</a>
</li>
<li>
<a href="#">ACCP 软件工程师</a>
</li>
</ul>
</div>
</body>
</html>
2.练习2
需求:
- 整个body的背景颜色:#D5D5D5
- 整个div的宽度230px,背景颜色:#fff
- 标题标签:字体大小16px 、加粗、字体颜色为#fff、背景颜色为#000,首航缩进1em,行高35px
- dt:左边内边距(padding-left):27px,行高35px、字体大小14px,加粗
- dd:字体大小12px,颜色#666,行高20,下边框:1px #666 dashed;,并且padding-left:27px
- dd前面背景图片 0px 2px
css
*{
margin: 0px;
padding: 0px;
}
body{
background-color: #D5D5D5;
}
/* div盒子 */
#product{
width: 230px;
background-color: #fff;
margin: 5px 10px 10px 10px;
}
/* 标题 */
#product h1{
font-size: 16px;
font-weight: bold;
color: #fff;
background-color: #000;
line-height: 35px;
text-indent: 1em;
}
/* dt:副标题 */
#product dt{
padding-left: 27px;
line-height: 35px;
font-size: 14px;
font-weight: bold;
}
/* dd */
#product dd {
font-size: 12px;
color: #666;
line-height: 20px;
padding-left: 27px;
border-bottom: 1px #666 dashed;
}
/* 最后一个dd没有下划线 */
#product dd:last-child{
border-bottom: 0px;
}
#product dt:nth-of-type(1){
background: url(../image2/icon_01.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(2){
background: url(../image2/icon_02.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(3){
background: url(../image2/icon_03.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(4){
background: url(../image2/icon_04.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(5){
background: url(../image2/icon_05.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(6){
background: url(../image2/icon_06.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(7){
background: url(../image2/icon_07.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(8){
background: url(../image2/icon_08.gif) no-repeat 0px 2px;
}
#product dt:nth-of-type(9){
background: url(../image2/icon_09.gif) no-repeat 0px 2px;
}
html
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>商品分类</title>
<link href="css/product.css" rel="stylesheet" type="text/css"/>
</head>
<body>
<div id="product">
<h1>全部分类</h1>
<dl>
<dt>护肤</dt>
<dd>洁面 化妆水 喷雾 美容液 眼霜<br/>
眼部精华 眼膜 面膜 面膜贴<br/>
水洗面膜 免洗面膜 精华 精油<br/>
凝露 乳液 面霜 日霜 晚霜
</dd>
<dt>彩妆</dt>
<dd>卸妆 防晒 隔离 BB霜 粉底 粉饼<br/>
睫毛膏 眼影 唇彩 腮红 眼线笔<br/>
底妆 遮瑕 蜜粉 眉笔 美甲
</dd>
<dt>香氛</dt>
<dd>男香 女香 小Q装 中性香水</dd>
<dt>身体护理</dt>
<dd>洗发 护发 沐浴 身体乳 手足护理<br/>
护手霜 纤体 身体精油 颈部护理<br/>
个人护理 卫生用品 脱毛
</dd>
<dt>礼盒套装</dt>
<dd>护肤套装 身体护理套装 彩妆套装 <br/>
旅行装 香水套装 男士套装
</dd>
<dt>美容工具</dt>
<dd>护肤 彩妆 美发 美体 美甲 <br/>
美容仪器 其他美容工具
</dd>
<dt>母婴专区</dt>
<dd>奶粉 尿裤湿巾 母婴洗护</dd>
<dt>男士专区</dt>
<dd>洁面 爽肤水 面霜 男香<br/>
眼霜 凝胶 乳液 精华 沐浴
</dd>
<dt>食品保健</dt>
<dd>瘦身类 保健类 美容类 食品类</dd>
</dl>
</div>
</body>
</html>
3.练习3
需求:
- 盒子的宽度是230px,盒子的外边距是30px,边框为1px实线灰色,盒子模型解析方式为border-box
- 标题背景颜色为线性渐变,文字垂直居中
- 使用无序列表
- 制作快报列表
- 列表的行高26px,左右空隙为26px,鼠标移入列表项文字时候字体颜色变为暗红色
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>11京东快报</title>
<style>
*{
margin: 0px;
padding: 0px;
}
body{
margin: 30px;
}
a{
text-decoration: none;
color: #000;
}
/* 盒子 */
.box{
border: 1px solid #e4e4e4;
width: 230px;
box-sizing: border-box;
}
.box h2{
padding-left: 10px;
line-height: 43px;
font-size: 16px;
border-bottom: 2px #e8e8e7 dotted;
color: #666;
font-weight: normal;
background: linear-gradient(to bottom,#CECEFF,#FDFDFF);
}
.box ul {
list-style: none;
padding-top: 5px;
padding-bottom: 5px;
}
.box ul li{
line-height: 26px;
padding-left: 10px;
padding-right: 10px;
}
.box ul li a{
font-size: 12px;
color: #666;
text-decoration: none;
}
.box ul li a:hover{
color: #B20000;
}
.box ul li a span{
font-weight: bold;
}
</style>
</head>
<body>
<div class="box">
<h2>京东快报</h2>
<ul>
<li><a href="#"><span>[特惠]</span>海飞丝去屑又去油 超清爽</a></li>
<li><a href="#"><span>[公告]</span>京东公益支持鲁甸新动作</a></li>
<li><a href="#"><span>[特惠]</span>4688元抢iPhone 6</a></li>
<li><a href="#"><span>[公告]</span>小米电视携豪礼高调入驻京东</a></li>
</ul>
</div>
</body>
</html>
七、圆角边框
1.语法
css
/*
border-radiuds: 20px 20px 20px 20px
*/
/*这四个属性值按照顺时针排列的*/
2.案例
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>12.圆角边框</title>
<style>
div{
width: 100px;
height: 100px;
border: 1px solid red;
/* 四个角都是圆角,值一样
border-radius: 20px;*/
/* 写两个值:第一个是左上和右下,第二个是右上和左下
border-radius: 30px 20px;*/
/* 写三个值:第一个是左上,第二个是右上和左下,第三个是右下
border-radius: 30px 10px 50px;*/
/* 写四个值:分别是左上、右上、左下和右下 */
border-radius: 10px 30px 50px 60px;
}
</style>
</head>
<body>
<div></div>
</body>
</html>
3.特殊图形
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>特殊图形</title>
<style>
div{
margin-bottom: 20px;
}
/* 圆 */
.div1{
width: 100px;
height: 100px;
border-radius: 50%;
background-color: red;
}
/* 上半圆 */
.div2{
width: 100px;
height: 50px;
border-radius: 50px 50px 0 0;
background-color: red;
}
/* 下半圆 */
.div3{
width: 100px;
height: 50px;
border-radius: 0 0 50px 50px ;
background-color: red;
}
/* 左半圆 */
.div4{
width: 50px;
height: 100px;
border-radius: 50px 0 0 50px ;
background-color: red;
}
/* 右半圆 */
.div5{
width: 50px;
height: 100px;
border-radius: 0 50px 50px 0 ;
background-color: red;
}
</style>
</head>
<body class="body">
<div class="div1"></div>
<div class="div2"></div>
<div class="div3"></div>
<div class="div4"></div>
<div class="div5"></div>
</body>
</html>
4.练习4
需求:
body:背景颜色是#eee7e1,字体大小12px
- div宽度:260px,背景颜色为#fff
- 标题:字体大小14px,加粗,颜色#fff,背景颜色为#e9185a,行高35px,padding-left=10px
- li:border-bottom:1px #a8a5a5 dashed;行高30px,padding-left=2px
- a标签color:#666,无下划线,鼠标放上去颜色#e9185a
- 数字是放在span标签中的,数字字体颜色是#fff,加粗,padding 3px 8px,圆形,
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>15.彩妆列表</title>
<style>
*{
margin: 0px;
padding: 0;
}
body{
background-color: #EEE7E1;
font-size: 12px;
}
/* div盒子 */
#beauty{
width: 260px;
background-color: #fff;
margin: 10px;
}
/* 标题 */
#beauty p{
font-size: 14px;
font-weight: bold;
color: #fff;
background-color: #e9185a;
height: 35px;
line-height: 35px;
padding-left: 10px;
}
/* li */
#beauty li{
border-bottom: 1px dashed #a8a5a5;
height: 30px;
line-height: 30px;
padding-left: 2px;
}
#beauty a{
color: #666;
text-decoration: none;
}
#beauty a:hover{
color: #e9185a;
text-decoration: none;
}
/* span */
#beauty ul li a span{
/* padding: 3px 8px; */
/* 行内元素,可以转换成块级元素(block),也可以将块级变行内元素(inline) ,行内块级元素(inline-block)*/
display: inline-block;
width: 20px;
height: 20px;
background-color: #373b3c;
border-radius: 50%;
color: #fff;
font-weight: bold;
text-align: center;
line-height: 20px;
margin-right: 10px;
}
#beauty a:hover span{
background-color: #e9185a;
}
</style>
</head>
<body>
<div id="beauty">
<p>大家都喜欢买的美容品</p>
<ul>
<li><a href="#"><span>1</span>雅诗兰黛即时修护眼部精华霜15ml</a></li>
<li><a href="#"><span>2</span>伊丽莎白雅顿显效复合活肤霜 75ml</a></li>
<li><a href="#"><span>3</span>OLAY玉兰油多效修护霜 50g</a></li>
<li><a href="#"><span>4</span>巨型一号丝瓜水320ML</a></li>
<li><a href="#"><span>5</span>倩碧保湿洁肤水2号 200ml</a></li>
<li><a href="#"><span>6</span>比度克细肤淡印霜 30g</a></li>
<li><a href="#"><span>7</span>兰芝 (LANEIGE)夜间修护锁水面膜 80ml</a></li>
<li><a href="#"><span>8</span>SK-II护肤精华露 215ml</a></li>
<li><a href="#"><span>9</span>欧莱雅青春密码活颜精华肌底液</a></li>
</ul>
</div>
</body>
</html>
八、盒子阴影
1.语法
html
box-shadow: 阴影的类型 x轴位移 y轴位移 阴影模糊半径 阴影的颜色;
阴影类型:默认值为outset(向外扩散) 可选inset(向内扩散)
x轴位移:指定阴影水平位移量
y轴位移:指定阴影垂直位移量
阴影模糊半径:向外模糊的模糊范围
阴影的颜色:定义绘制阴影时所使用的颜色
2.案例
2.练习5
需求: ul li : display: inline-block;
- 盒子的宽度为:1000px,水平居中显示 margin:50px auto
- 标题(热播)文字大小设置为18px,行高40pxr
- li列表项内边距为10px,外右边距为5px
- li中的标题,字体大小16px,行高30px
- 中间的文字,字体大小14px,字体颜色#640000,行高20px
- 最下面蓝色文字,字体大小12px,字体颜色blue,行高20
- 给图片添加圆角效果
- 鼠标移入列表时添加阴影
- border-color:#dfdfdf,圆角border-radius=10px, box-shadow:0 5px 5px rgba(0,0,0,0.1)
html
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>热播</title>
<style>
*{
margin: 0;
padding: 0px;
}
.box {
width: 1000px;
margin: 50px auto;
}
.box h3{
font-size: 18px;
line-height: 40px;
}
.box ul li {
display: inline-block;
list-style: none;
margin-right: 5px;
padding: 10px;
}
li img{
border-radius: 10px;
}
.box li h4{
font-size: 16px;
color: #4d4d4d;
line-height: 35px;
}
.box li p:nth-of-type(1){
color: #640000;
font-size: 14px;
line-height: 20px;
}
.box li p:nth-of-type(2){
font-size: 12px;
color: blue;
line-height: 20px;
}
ul li:hover{
border-color: #dfdfdf;
border-radius: 10px;
box-shadow: 0 0px 5px rgba(0, 0, 0,0.3);
background-color: #fff;
}
</style>
</head>
<body>
<div class="box">
<h3>热播</h3>
<ul>
<li>
<img src="image2/img1.png" alt="">
<h4>神武赵子龙</h4>
<p>怒,林更新不抱网红抱女神</p>
<p>点击次数:242445次</p>
</li>
<li>
<img src="image2/img2.png" alt="">
<h4>旋风十一人</h4>
<p>胡歌变教练在撩前女友</p>
<p>点击次数:242445次</p>
</li>
<li>
<img src="image2/img3.png" alt="">
<h4>太阳的后裔</h4>
<p>宋慧乔吃嫩草</p>
<p>点击次数:242445次</p>
</li>
<li>
<img src="image2/img4.png" alt="">
<h4>山海经之赤影传说</h4>
<p>娜扎张翰再度联手</p>
<p>点击次数:242445次</p>
</li>
</ul>
</div>
</body>
</html>