HTML 基础:块级元素、行内元素与行内块元素详解

0 阅读7分钟

HTML 基础:块级元素、行内元素与行内块元素详解

本文面向 HTML 初学者,重点理解块级元素(Block)、行内元素(Inline)和行内块元素(Inline-block)的区别,以及它们在 CSS 和 React 开发中的实际应用。

一、什么是块级元素和行内元素?

HTML 元素在浏览器中有不同的默认显示方式。

最常见的两种:

  • 块级元素(Block) :默认独占一行,例如 <div>。
  • 行内元素(Inline) :默认不独占一行,例如 <span>。

简单理解:

  • 块级元素:像一个个纵向排列的盒子。
  • 行内元素:像一句话中的文字,可以横向排列。

1. 块级元素(Block)

常见块级元素:

标签作用
<div>通用布局容器
<p>段落
<h1> ~ <h6>标题
<ul>无序列表
<ol>有序列表
<section>内容分区
<article>独立文章

示例:

<div>我是第一个 div</div>
<div>我是第二个 div</div>
<p>我是一个段落</p>

页面效果:

┌──────────────────────────┐
│ 我是第一个 div           │
└──────────────────────────┘
┌──────────────────────────┐
│ 我是第二个 div           │
└──────────────────────────┘
┌──────────────────────────┐
│ 我是一个段落             │
└──────────────────────────┘

特点:

  1. 默认从新的一行开始。
  2. 默认占满父容器的可用宽度。
  3. 可以设置 width 和 height。
  4. 可以设置 margin、padding。
  5. 常用于页面布局和内容分区。

例如:

<div style="width: 200px; height: 100px; background: lightblue;">
  块级元素
</div>

这里的 div 宽度为 200px,高度为 100px。

虽然宽度不是整行,但它默认仍然独占一行。


2. 行内元素(Inline)

常见行内元素:

标签作用
<span>通用行内容器
<a>超链接
<strong>强调重要内容
<em>强调语气
<code>行内代码
<label>表单标签

示例:

<span>我是第一个 span</span>
<span>我是第二个 span</span>
<a href="#">我是一个链接</a>

页面效果:

我是第一个 span 我是第二个 span 我是一个链接

特点:

  1. 默认不会独占一行。
  2. 宽度由内容决定。
  3. 普通行内元素设置 width、height 通常无效。
  4. 可以设置左右 padding 和 margin。
  5. 上下 margin 不会像块级元素那样撑开行间距离。

例如:

<span style="width: 200px; height: 100px; background: lightgreen;">
  行内元素
</span>

这里虽然设置了 width: 200px 和 height: 100px,但普通 span 仍按照行内布局规则显示,宽高不会像块级盒子一样生效。

注意:img、input 等元素有特殊的尺寸行为,不能简单认为所有行内元素都无法设置宽高。


二、块级元素和行内元素的核心区别

对比维度块级元素行内元素
是否独占一行默认是默认否
默认宽度占满可用宽度内容决定
width支持普通行内元素不生效
height支持普通行内元素不生效
左右 margin支持支持
上下 margin支持不影响行间布局
典型标签div、p、h1span、a、strong
典型用途页面布局文本修饰

记忆口诀:块级独占一行,行内跟随文字。

属性同行排列支持宽高
inline✅❌
block❌✅
inline-block✅✅

三、什么是行内块元素(Inline-block)?

前面介绍的两种元素各有特点:

  • 块级元素:可以设置宽高,但是默认独占一行。
  • 行内元素:可以横向排列,但是普通行内元素不能直接设置宽高。

那么有没有一种元素,既可以横向排列,又能设置宽高?

答案是:inline-block。

1. inline-block 的特点

  • 不会默认独占一行。
  • 可以设置 width 和 height。
  • 可以设置四个方向的 margin 和 padding。
  • 常用于标签、按钮等需要横向排列的元素。

示例:

<span style="
  display: inline-block;
  width: 100px;
  height: 40px;
  background: lightblue;
">
  按钮一
</span>

<span style="
  display: inline-block;
  width: 100px;
  height: 40px;
  background: lightgreen;
">
  按钮二
</span>

两个 span 可以同行显示,同时具有指定的宽高。

2. 三者对比

属性blockinlineinline-block
默认独占一行是否否
支持 width是通常否是
支持 height是通常否是
可以横向排列默认否是是

四、CSS display:决定元素的显示方式

这里是最重要的知识点。

HTML 标签具有默认的显示方式,但 CSS 可以改变它。

1. display: block

将元素设置为块级显示。

<span style="display: block;">
  我是 span,但现在独占一行
</span>

虽然 span 默认是行内元素,但设置 display: block 后,就拥有块级布局行为。

2. display: inline

将元素设置为行内显示。

<div style="display: inline;">
  我是 div
</div>

<div style="display: inline;">
  我也是 div
</div>

两个 div 可以在同一行显示。

3. display: inline-block

让元素既能横向排列,又能设置宽高。

.tag {
  display: inline-block;
  width: 100px;
  height: 30px;
}

4. display: none

隐藏元素,并且不保留其布局空间。

<div style="display: none;">
  我不会显示
</div>

注意,display: none 与 visibility: hidden 不同:

  • display: none:元素不显示,也不占据布局空间。
  • visibility: hidden:元素不可见,但仍占据原来的布局空间。

五、实际前端开发:为什么还要学习 Flex?

传统 HTML 布局经常涉及 block、inline 和 inline-block。

但是在现代 React 项目中,Flex 布局更加常用。

例如,需要让三个按钮横向排列:

方案一:inline-block

<div>
  <button style="display: inline-block;">新增</button>
  <button style="display: inline-block;">编辑</button>
  <button style="display: inline-block;">删除</button>
</div>

方案二:Flex 布局(推荐)

<div style="display: flex; gap: 10px;">
  <button>新增</button>
  <button>编辑</button>
  <button>删除</button>
</div>

Flex 不仅可以横向排列元素,还能方便地实现:

  • 横向或纵向排列
  • 元素之间的间距
  • 水平居中
  • 垂直居中
  • 自适应布局

因此,在实际开发中,通常使用 Flex 或 Grid 进行整体布局,而不是依赖大量 inline-block。


六、React 开发中的实际应用

React 中使用 JSX 描述页面结构,依然需要理解 HTML 元素的默认显示方式。

例如:

function TaskPage() {
  return (
    <div>
      <h2>任务管理</h2>

      <div style={{ display: "flex", gap: "10px" }}>
        <button>新增任务</button>
        <button>编辑任务</button>
        <button>删除任务</button>
      </div>

      <p>
        当前状态:
        <span style={{ color: "green" }}>
          运行中
        </span>
      </p>
    </div>
  );
}

这里涉及三个知识点:

  1. div:用于组织页面区域。
  2. span:用于修饰局部文本。
  3. display: flex:用于控制按钮排列方式。

注意 JSX 中的样式写法:

// HTML
<div style="display: flex;">

// JSX
<div style={{ display: "flex" }}>

React 的 style 接收 JavaScript 对象,而不是 HTML 中的样式字符串。


七、容易混淆的几个问题

Q1:div 一定是块级元素吗?

不是。

div 默认具有 display: block,但可以通过 CSS 改成其他显示方式。

div {
  display: inline;
}

Q2:span 可以设置宽高吗?

默认普通 span 是行内元素,直接设置 width 和 height 通常无效。

但可以通过 CSS 修改:

span {
  display: inline-block;
  width: 100px;
  height: 40px;
}

Q3:button 是块级元素还是行内元素?

button 默认不是普通的 display: inline 元素。

它通常表现为可以同行排列、可以设置宽高的控件,其具体默认样式由浏览器决定。

Q4:HTML 的块级元素与 CSS 的 display: block 是一回事吗?

不完全一样。

  • HTML 语义:描述元素的含义与内容结构。
  • CSS display:决定元素如何参与布局。

例如,span 是一个通用行内语义元素,即使设置了 display: block,它仍然是 span 标签,语义并没有变成 div。

另外,现代 HTML 标准还会使用流式内容(flow content)、短语内容(phrasing content)等内容分类,因此块级和行内主要适合作为学习默认布局行为的入门概念。


八、总结:开发中需要掌握哪些内容?

对于 React + TypeScript 前端开发,掌握以下知识即可:

知识点重要程度
div 和 span 的区别⭐⭐⭐⭐⭐
块级元素默认独占一行⭐⭐⭐⭐⭐
行内元素默认不独占一行⭐⭐⭐⭐⭐
width 和 height 的区别⭐⭐⭐⭐
display: block⭐⭐⭐⭐⭐
display: inline⭐⭐⭐⭐
display: inline-block⭐⭐⭐⭐
display: flex⭐⭐⭐⭐⭐
display: grid⭐⭐⭐⭐

最后记住四句话:

  1. div 默认是块级元素,span 默认是行内元素。
  2. 块级元素默认独占一行,行内元素默认与其他行内内容同行。
  3. display 可以改变元素的布局方式,但不改变 HTML 语义。
  4. 实际 React 项目中,页面布局优先掌握 Flex,复杂二维布局再学习 Grid。