HTML及CSS学习笔记 07 - 盒子模型

本文是HTML及CSS课程的第七课。盒子模型是在网页设计中经常用到的CSS技术所使用的一种思维模型,本文主要就盒子模型的概念、结构、相关样式属性等进行介绍

一、初识盒子模型

1、深入理解块标签和行标签

浏览器在显示HTML文档时,由于浏览器会自上而下自左至右读取HTML文档,所以默认情况下元素会自动从上而下分成一行行,并在每行中按从左至右顺序排放。这种从左往右,从上往下的流式排列方式,我们称之为文档流

1.1、块标签

块标签会尽可能占据外层容器的整个宽度,所以,之后的标签自然的被显示在下一行;另外,块标签可以设置自己的宽度width)和高度height)。我们之前看到的<h1><h6>标签、<p>标签、<ol>标签、<ul>标签、<li>标签、<div>标签等,都属于块标签。如图:
块标签

1.2、行标签(内联标签)

行标签(内联标签)不会占据容器的一整行,它会和它周围的内容一起,在一行内,从左至右自然的依次显示,如果没有更多的空间,剩下的内容会自动摆放在下一行;并且,对于行标签设置宽度(width)和高度(height)一般并不会起作用,行标签的宽度高度决定于标签中内容的高度宽度,我们之前学习的<a>标签、<span>标签、<lable>标签、<input><img>标签均是行标签。如图:
行标签
注意:<img><textarea><input><select><video><audio>等标签也可以设置宽度或高度,但它们仍然是行标签。

1.3、display属性

标签是否是行标签或块标签均可以使用CSS样式表的display属性进行设置。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> display属性 </title>
    <meta charset="utf-8">
	<style type="text/css">
	  ul li {
	    display: inline;
	  }
	</style>
  </head>
  <body>
    <ul>
      <li><a href="#">主页</a></li>
      <li><a href="#">校友档案</a></li>
      <li><a href="#">添加校友</a></li>
    </ul>
  </body>
</html>

页面浏览效果:
display属性
说明:

  • 上例中,<li>标签默认为块标签,通过样式表display: inline;,将<li>标签设置成了行标签。
  • 默认情况下,块标签的display属性值为block,行标签的display属性值为inline
  • 我们还可以通过display属性将标签设置为内联块(inline-block)标签,设置为内联块标签后,标签不会尽可能占据外层容器的整个宽度,但是它仍然可以设置宽度width)和高度height)。

2、什么是盒子模型

HTML中所有元素都可以看作一个盒子,这个盒子对该HTML元素进行封装,包括:边距边框填充内容区域。而在所有的元素中,尤其以块级元素的盒子最为标准。在CSS中,盒子模型(box model)这一术语常常用来设计和布局。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 盒子模型 </title>
    <meta charset="utf-8">
  </head>
  <body>
    <h2>李白</h2>
    <p>字太白,号青莲居士,又号“谪仙人”,是伟大的浪漫主义诗人,被后人誉为“诗仙”。</p>
    <p>点击查看校友录<a href="#">免责声明</a></p>
    <h3>兴趣爱好</h3>
    <ul>
      <li>饮酒</li>
      <li>赋诗</li>
      <li>游历山水</li>
    </ul>
    <h3>成长足迹</h3>
    <ol>
      <li>728年:《黄鹤楼送孟浩然之广陵》</li>
      <li>732年:《蜀道难》</li>
      <li>736年:《将进酒》</li>
      <li>759年:《早发白帝城》</li>
    </ol>
  </body>
</html>

页面浏览效果:
盒子模型
说明:

  • 例子中,我们看到的蓝色部分即为内容区域,橘黄色部分为边距,绿色部分为填充

二、盒子模型的结构

盒子模型总共有四部分组成,如下:

盒子组成部分说明
内容(content)盒子中真正的内容(文本,图片等)
填充(padding)边框以内,内容区域周围的部分,又称为内边距或补白,填充是透明的
边框(border)边距以内,围绕在填充和内容外的部分
边距(margin)边框外的区域,又称为外边距,边距是透明的

1、内容

内容区域中包含的是盒子中真正的内容(文本,图片等),需要注意的是,内容区域的默认高度内容的高度决定。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 内容区域 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 64px;
		height: 21px;
		padding: 0;
		border: 0;
	    margin: 0;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

页面浏览效果:
内容区域
盒子模型分析:
内容区域盒子模型

2、填充

填充包围在内容区域的边缘,分为四个区域。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 填充 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 64px;
		height: 21px;
		padding: 5px 10px 15px 20px;
		border: 0;
	    margin: 0;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

页面浏览效果:
填充
盒子模型分析:
填充盒子模型
说明:

  • 样式表中的padding属性用来设置元素的填充。样式padding: 5px 10px 15px 20px;表示在内容区域的上部填充5像素,右部填充10像素,下部填充15像素,左部填充20像素。
  • 填充有多种设置方式,下面是一些例子:
    属性名称解释示例
    padding-top设置上填充padding-top: 5px;
    padding-right设置右填充padding-right: 10px;
    padding-bottom设置下填充padding-bottom: 15px;
    padding-left设置左填充padding-left: 20px;
    padding按上、右、下、左的顺序(顺时钟顺序)设置填充padding: 5px 10px 15px 20px;
    padding按上下、左右两两设置填充,
    可以在上下填充相同且左右填充也相同的情况下使用
    padding: 5px 10px;

3、边框

边框包围在填充的边缘,也分为四个区域。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 边框 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 64px;
		height: 21px;
		padding: 5px 10px 15px 20px;
		border: 5px solid #FFFFFF;
	    margin: 0;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

页面浏览效果:
边框
盒子模型分析:
边框盒子模型
说明:

  • 样式表中的border系列属性设置元素的边框,样式border: 5px solid #FFFFFF;表示元素在上、右、下、左方向都有5像素的边框,边框为实线,白色。
  • 边框可以用不同的样式属性分别设置宽度、风格、颜色,也可以像上例中一样在border样式属性中一起设置,下面是几个例子:
    属性名称解释示例
    border-width设置边框的宽度border-width: 5px;
    border-style设置边框的风格border-style: solid;
    border-color设置边框的颜色border-color: red;
    border按顺序分别设置边框的宽度、风格、颜色border: 5px solid red;
  • 可以针对边框上、右、下、左中的任意一个方向进行单独设置,下面是几个例子:
    属性名称解释示例
    border-top设置上边框border-top: 5px double red;
    border-right-width设置右边框的颜色border-right-width: 5px;
    border-bottom-style设置下边框的风格border-bottom-style: dotted;
    border-left-color设置左边框的颜色border-left-color: red;

4、边距

边框包围在边框的周围,也分为四个区域。
下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 边距 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 64px;
		height: 21px;
		padding: 5px 10px 15px 20px;
		border: 5px solid #FFFFFF;
	    margin: 20px 15px 10px 5px;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

页面浏览效果:
边距
盒子模型分析:
边距盒子模型
说明:

  • 样式表中的margin属性用来设置元素的边距。样式margin: 20px 15px 10px 5px;表示边框的上部离其他元素有20像素的距离,边框右部离其他元素有15像素的距离,边框下部离其他元素有10像素的距离,边框左部离其他元素有5像素的距离。
  • 同填充一样,边框也有类似的多种设置方式,下面是一些例子:
    属性名称解释示例
    margin-top设置上边距margin-top: 20px;
    margin-right设置右边距margin-right: 15px;
    margin-bottom设置下边距margin-bottom: 10px;
    margin-left设置左边距margin-left: 5px;
    margin按上、右、下、左的顺序(顺时钟顺序)设置边距margin: 20px 15px 10px 5px;
    margin按上下、左右两两设置边距,
    可以在上下边距相同且左右边距也相同的情况下使用
    margin: 5px 10px;

三、计算盒子的尺寸

1、默认情况下的盒子尺寸

默认情况下,盒子尺寸的计算方式如下:

  • 整个盒子的宽度 = 内容区域的宽度 + 左padding + 右padding + 左border + 右border + 左margin + 右margin
  • 整个盒子的高度 = 内容区域的高度 + 上padding + 下padding + 上border + 下border + 上margin + 下margin

下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> 默认盒子尺寸 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 88px;
		height: 35px;
		padding: 5px 10px;
		border: 2px solid #FFFFFF;
	    margin: 10px;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

盒子模型分析:
默认盒子尺寸
说明:

  • 整个盒子的宽度 = 内容区域的宽度(width属性值) 88px + 左padding 10px + 右padding 10px + 左border 2px + 右border 2px + 左margin 10px + 右margin 10px = 132px
  • 整个盒子的高度 = 内容区域的高度(height属性值) 35px + 上padding 5px + 下padding 5px + 上border 2px + 下border2px + 上margin 10px + 下margin 10px = 69px

2、使用box-sizing属性调整盒子尺寸

CSS3中提供了box-sizing属性,用来改变盒模式中盒子的宽度高度默认计算方法。其常见属性值如下:

属性及值说明
box-sizing: content-box;width属性和height属性定义的宽度高度只包含盒子的内容区域,这也是盒子模型默认的方式
box-sizing: border-box;width属性和height属性定义的宽度高度,由盒子的内容区域paddingborder相加组成

下面是一个示例:

<!DOCTYPE html>
<html>
  <head>
    <title> border-box 盒子尺寸 </title>
	<meta charset="utf-8">
	<style type="text/css">
	  p {
	    width: 88px;
		height: 35px;
		padding: 5px 10px;
		border: 2px solid #FFFFFF;
	    margin: 10px;
		box-sizing: border-box;
	  }
	</style>
  </head>
  <body>
    <p>内容区域</p>
  </body>
</html>

盒子模型分析:
border-box 盒子尺寸
说明:

  • 整个盒子的宽度 = width 88px + 左margin 10px + 右margin 10px = 108px
  • 整个盒子的高度 = height 35px + 上margin 10px + 下margin 10px = 55px

四、一点关于盒子模型的开发实践

1、重置浏览器的默认盒子属性

不同的浏览器都会默认给不同的标签一定的盒子属性值,当我们没有设置这些标签的盒子属性值时,会应用浏览器的默认样式。一般情况下,我们需要自由的控制网页,所以经常在样式表的最上面覆盖浏览器的默认样式
示例如下:

* {
  padding: 0;
  margin: 0;
  border: 0;
}

2、低版本浏览器对HTML5的兼容问题

一些低版本IE浏览器无法解析HTML5中的许多新增标签(如IE8),导致CSS不起作用。针对这一问题,我们可以使用兼容JavaScript脚本只需页面引入即可,下面是示例:

<head>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
</head>

由于我们只针对低版本IE浏览器,上面的代码可以优化为:

<head>
  <!--[if lt IE 9]>
    <script src="https://oss.maxcdn.com/html5shiv/3.7.3/html5shiv.min.js"></script>
  <![endif]-->
</head>

在引入JavaScript脚本之后,还需要在样式表中引入样式,将常见的HTML5新增块级标签的display属性值设置为block,下面是示例:

article, aside, figcaption, figure, footer, header, main, nav, section {
  display: block;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值