元素是文档结构的基础,在 css 里面,每个元素生成了包含内容的框(box), 大家都叫“盒子”。但是不同的元素显示方式是不同的,有占据一整行的,有水平一个挨着一个的。比如:div 与 span 的显示方式不一样,因为 div是块级元素,会占据一行,而span为行内元素,可多个span放置一行。

接下来就详细讲一下在CSS中块级元素、行内元素和行内块级元素的区别。

1. 块级元素 block

块级元素,顾名思义,该元素呈现“块”状,所以它有自己的宽度和高度,也就是可自定义 width 和 height。除此之外,块级元素比较霸道,它独自占据一行高度(float浮动除外),一般可以作为其他容器使用,可容纳块级元素和行内元素。

块级元素有以下特点:

  • 每个块级元素都是独自占一行;
  • 高度,行高,外边距(margin)以及内边距(padding)都可以控制;
  • 元素的宽度如果不设置的话,默认为父元素的宽度(父元素宽度100%;
  • 多个块状元素标签写在一起,默认排列方式为从上至下;
<address>  // 定义地址 
<caption> // 定义表格标题
<dd> // 定义列表中定义条目
<div> // 定义文档中的分区或节
<dl> // 定义列表
<dt> // 定义列表中的项目
<fieldset> // 定义一个框架集
<form> // 创建 HTML 表单
<h1> // 定义最大的标题
<h2> // 定义副标题
<h3> // 定义标题
<h4> // 定义标题
<h5> // 定义标题
<h6> // 定义最小的标题
<hr> // 创建一条水平线
<legend> // 元素为 fieldset 元素定义标题
<li> // 标签定义列表项目
<noframes> // 为那些不支持框架的浏览器显示文本,于 frameset 元素内部
<noscript> // 定义在脚本未被执行时的替代内容
<ol> // 定义有序列表
<ul> // 定义无序列表
<p> // 标签定义段落
<pre> // 定义预格式化的文本
<table> // 标签定义 HTML 表格
<tbody> // 标签表格主体(正文)
<td> // 表格中的标准单元格
<tfoot> // 定义表格的页脚(脚注或表注)
<th> // 定义表头单元格
<thead> // 标签定义表格的表头
<tr> // 定义表格中的行

2. 行内元素 inline

行内元素不可以设置宽(width)和高(height),但可以与其他行内元素位于同一行,行内元素内一般不可以包含块级元素。行内元素的高度一般由元素内部的字体大小决定,宽度由内容的长度控制。行内元素有以下特点:

  • 不会独占一行,相邻的行内元素会排列在同一行里,直到一行排不下才会自动换行,其宽度随元素的内容而变化;
  • 高宽无效,对外边距(margin)和内边距(padding)仅设置左右方向有效 上下无效;
  • 设置行高有效,等同于给父级元素设置行高;
  • 元素的宽度就是它包含的文字或图片的宽度,不可改变;
  • 行内元素中不能放块级元素,a 链接里面不能再放链接;
<a>     // 标签可定义锚 
<abbr> // 表示一个缩写形式
<acronym> // 定义只取首字母缩写
<b> // 字体加粗
<bdo> // 可覆盖默认的文本方向
<big> // 大号字体加粗
<br> // 换行
<cite> // 引用进行定义
<code> // 定义计算机代码文本
<dfn> // 定义一个定义项目
<em> // 定义为强调的内容
<i> // 斜体文本效果
<kbd> // 定义键盘文本
<label> // 标签为 input 元素定义标注(标记)
<q> // 定义短的引用
<samp> // 定义样本文本
<select> // 创建单选或多选菜单
<small> // 呈现小号字体效果
<span> // 组合文档中的行内元素
<strong> // 加粗
<sub> // 定义下标文本
<sup> // 定义上标文本
<textarea> // 多行的文本输入控件
<tt> // 打字机或者等宽的文本效果
<var> // 定义变量

3. 行内块级元素 inline-block

行内块级元素,它既具有块级元素的特点,也有行内元素的特点,它可以自由设置元素宽度和高度,也可以在一行中放置多个行内块级元素。比如:input、img就是行内块级元素,它可设置高宽以及一行多个。具体特点如下:

  • 高度、行高、外边距以及内边距都可以控制;
  • 默认宽度就是它本身内容的宽度,不独占一行,但是之间会有空白缝隙,设置它上一级的 font-size 为 0,才会消除间隙;
<button><input><textarea><select><img>复制代码

4. 元素类型转换 display

display:block ,定义元素为块级元素

display : inline ,定义元素为行内元素

display:inline-block,定义元素为行内块级元素

5. 总结

不管块级元素还是行内元素,区别:一是排列方式,二是宽高边距设置,三是默认宽度。

  • 块级元素会独占一行,而内联元素和内联块元素则会在一行内显示;
  • 块级元素和内联块元素可设置 width、height 属性,而内联元素设置无效;
  • 块级元素的 width 默认为 100%,而内联元素则是根据其自身的内容或子元素来决定其宽度;

而行内块级元素又同时拥有块级元素和行内元素的特点。