Menu

HTML div 标签:是什么、div class、布局与样式

<div> 标签是一个通用的块级容器,本身没有任何含义。学习用它给内容分组、用 class 设置样式、用 div 和 flexbox 搭建布局,以及什么时候语义标签或按钮才是更好的选择。

本页包含可运行的编辑器。编辑、运行,立即查看输出。

div 标签的作用

<div>(division 的缩写)是一个通用容器。它把元素组合在一起,让你可以把它们当作一个整体来设置样式、定位或用脚本操作。它本身看不出任何东西:没有外边距、没有边框、没有特殊字体。它是一个块级元素,所以会从新的一行开始,并横向占满可用宽度。

删掉样式中的 border 那一行,div 就看不见了:这就是 div 的默认外观。它在视觉上的一切效果都来自 CSS。

div class 和 id

div 通常会有一个 class,也就是 CSS 要选中的名称。共用同一个 class 的 div 共享同样的样式:

.card 为两个盒子设置样式,.card.highlight 给同时具有两个 class 的 div 加上蓝色外框。需要指向某一个特定的 div 时用 id,例如作为链接目标(href="#pro")。属性一文详细比较了 class 和 id。

让 div 并排显示

div 是块级元素,所以会垂直堆叠。要让它们排成一行,就把它们的父元素变成 flex 容器:

.row 上的 display: flex 让子元素排成一行,gap 设置间距,flex 的值分配宽度(这里是 1 : 2 : 1)。这种父元素加子元素的模式是真实网站中 div 最常见的用法。要让 div 居中,参见如何让 div 居中。

嵌套 div

div 可以包含其他 div,层数不限。每一层都是盒子里的盒子,给每个 div 加上边框和一些内边距就能看出来:

在布局允许的前提下,嵌套越浅越好。每多一层包装,就多一个盒子需要你去分析,尤其是当外边距或宽度和预期不一样的时候。

用 div 还是语义标签?

div 对它的内容什么也没说明。HTML 有一些标签同样能完成分组,还能说明这一组是什么:

不要用改用用途
<div class="header"><header>页面或区块的开头或顶栏
<div class="nav"><nav>一组导航链接
<div class="main"><main>主要内容,每个页面一个
<div class="post"><article>独立完整的条目:文章、评论、商品卡片
<div class="footer"><footer>页面或区块的页脚

在你设置样式之前,这些标签看起来和 div 完全一样,但屏幕阅读器会朗读它们,并让用户在它们之间跳转,搜索引擎也能读懂页面结构。只为布局或样式存在的盒子才用 div,比如上面的 .row 包装层。完整的标签列表参见语义化 HTML。

div 不是按钮

带点击处理函数的 div 在鼠标用户看来可以点击,但键盘用户无法用 Tab 键到达它,也无法用 Enter 键按下它,屏幕阅读器也不会把它当作按钮朗读:

执行操作用 <button>,跳转页面用 <a href>。两者都能获得焦点,并且天生支持键盘操作。

常见错误

  • 把 div 放在 <p> 里。 段落会在 div 之前就关闭。把 div 作为外层元素,或者在段落里用 <span>。
  • 满屏都是 div。 只由 div 组成的页面对屏幕阅读器来说没有结构。在合适的地方把 div 换成 <header>、<nav>、<main> 和 <footer>。
  • 可点击的 div。 请改用 <button> 或链接。
  • 以为 div 的宽度和文字一样。 div 会占满整个宽度。想让它收缩,就用 display: inline-block、width: fit-content 或 <span>。
  • 在多个 div 上重复使用同一个 id。 会重复出现的东西请用 class。

常见问题

HTML 中的 div 是什么?

<div> 是一个通用容器。它把其他元素组合在一起,方便你统一设置样式或定位,它本身没有任何含义:浏览器把它显示为一个块,从新的一行开始,占满可用宽度。

div class 是什么意思?

<div class="card"> 是一个带 class 属性的 div。class 是一个名称,CSS 用它来设置样式(.card { ... }),JavaScript 用它来查找元素。多个 div 可以共用一个 class,一个 div 也可以有多个 class:class="card featured"。

怎样让两个 div 并排显示?

用一个父 div 把它们包起来,给父元素设置 display: flex。子元素就会排成一行。加上 gap 让它们之间留出间距,给子元素设置 flex: 1 让它们平分宽度。

应该用 div 还是 section?

当内容具有对应的角色时,使用 <section>、<header>、<nav>、<main>、<article> 或 <footer>,因为屏幕阅读器和搜索引擎能理解它们。只需要一个用于样式或布局的盒子时,才用 <div>。

可以把 div 放在 p 标签里吗?

不可以。段落只能包含行内内容。浏览器一看到 <div> 就会关闭 <p>,这会破坏你的样式。把 div 作为外层元素,或者在段落里用 <span>。

Coddy 编程语言插图

和 Coddy 一起学编程

开始