HTML学习笔记 07 - 盒子模型

一、盒子模型

1、行标签与块标签

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

1.1、行标签

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

1.2、块标签

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

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>

说明:

  • 上例中,<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

2、box-sizing调整盒子尺寸

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

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

四、常见问题

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

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

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

2、版本兼容问题

一些低版本的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;
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值