Skip to content

Bootstrap 网格示例

下面是使用 Bootstrap 5 的几个常见网格布局示例。这些示例展示了如何针对不同的屏幕尺寸和场景使用列类(column classes)。请记住,Bootstrap 的网格采用“移动优先”(mobile-first)设计,这意味着较小断点(breakpoints)的样式会应用于较大断点,除非被覆盖。

.col-md-4 | .col-md-4 | .col-md-4 (在中等屏幕及以上尺寸下,每列占据 1/3 宽度)

此示例展示了三个等宽列,从中等设备(平板电脑,≥768px)开始应用,并扩展到更大的桌面屏幕。在小型和超小型屏幕上,这些列将垂直堆叠。

<div class="container mt-3">
<div class="row">
<div class="col-md-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-4
</div>
<div class="col-md-4" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-4
</div>
<div class="col-md-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-4
</div>
</div>
</div>

.col-md-3 | .col-md-6 | .col-md-3 (在中等屏幕及以上尺寸下,占据 25% | 50% | 25% 宽度)

此示例展示了三个不等宽列,从中等设备开始应用。

<div class="container mt-3">
<div class="row">
<div class="col-md-3" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-3
</div>
<div class="col-md-6" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-6
</div>
<div class="col-md-3" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-md-3
</div>
</div>
</div>

.col-sm-4 | .col-sm-8 (在小型屏幕及以上尺寸下,占据 1/3 | 2/3 宽度)

此处展示了两个不同宽度的列,从小型设备(≥576px)开始应用。

<div class="container mt-3">
<div class="row">
<div class="col-sm-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-4
</div>
<div class="col-sm-8" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-8
</div>
</div>
</div>

你可以在现有列中嵌套行和列,以创建更复杂的布局。请记住,嵌套的行也在其父列内部使用 12 列系统。

<div class="container mt-3">
<div class="row">
<div class="col-sm-8" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-8 (Main)
<div class="row mt-2">
<div class="col-6" style="background-color: #d1e7dd; border: 1px solid #a3cfbb; padding: .5rem;">
.col-6 (Nested)
</div>
<div class="col-6" style="background-color: #cff4fc; border: 1px solid #9eeaf9; padding: .5rem;">
.col-6 (Nested)
</div>
</div>
</div>
<div class="col-sm-4" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-4 (Sidebar)
</div>
</div>
</div>

混合使用:移动、平板和桌面尺寸

Section titled “混合使用:移动、平板和桌面尺寸”

结合使用不同断点的列类,可以创建真正适应性强的布局。例如,一列可能在移动设备上是全宽,在平板电脑上是半宽,在桌面上是三分之一宽。

提示:每个类会向上扩展。如果你希望在超小型屏幕上使用 .col-12,在小型屏幕上使用 .col-sm-6,在中等屏幕上使用 .col-md-4,这些样式都会生效。对于 lg 及以上尺寸,.col-md-4 将会持续生效,除非被 .col-lg-* 或 .col-xl-* 覆盖。

<div class="container mt-3">
<!-- Example Row 1 -->
<div class="row mb-3">
<div class="col-12 col-md-8" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-12 .col-md-8 (Full width on xs/sm, 8/12 on md+)
</div>
<div class="col-6 col-md-4" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-6 .col-md-4 (Half width on xs/sm, 4/12 on md+)
</div>
</div>
<!-- Example Row 2 -->
<div class="row mb-3">
<div class="col-12 col-sm-6 col-lg-3" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-12 .col-sm-6 .col-lg-3
</div>
<div class="col-12 col-sm-6 col-lg-3" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-12 .col-sm-6 .col-lg-3
</div>
<div class="col-12 col-sm-6 col-lg-3" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-12 .col-sm-6 .col-lg-3
</div>
<div class="col-12 col-sm-6 col-lg-3" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-12 .col-sm-6 .col-lg-3
</div>
</div>
</div>

注意:在给定的断点下,如果你希望一行的列显示在同一行上,始终要确保该行中所有列单元的总和不超过 12。否则,它们将会换行。

清除浮动 / 响应式换行(行与列的断开)

Section titled “清除浮动 / 响应式换行(行与列的断开)”

在 Bootstrap 5 中,Flexbox 自动处理了大部分的换行行为。然而,如果你的列高度不同,并且想要确保一致的换行效果,你可以在特定断点处使用 width: 100% 工具类元素或者使用行类(.row-cols-*) 来强制列换行。旧的 .clearfix visible-xs 方法已被废弃。请使用 display 工具类或行类(row column classes)。

使用一个全宽的 div 强制在 xs 屏幕上两列后换行,但在 sm 及以上屏幕上允许三列的示例:

<div class="container mt-3">
<div class="row">
<div class="col-6 col-sm-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">Column 1</div>
<div class="col-6 col-sm-4" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">Column 2</div>
<!-- Force next columns to break to new line at xs breakpoint -->
<div class="w-100 d-block d-sm-none"></div>
<div class="col-6 col-sm-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">Column 3</div>
<div class="col-6 col-sm-4 d-none d-sm-block" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">Column 4 (hidden on xs)</div>
</div>
</div>
<!-- Alternative using row-cols for consistent items per row -->
<div class="container mt-3">
<div class="row row-cols-2 row-cols-sm-3 row-cols-md-4 g-3">
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 1</div>
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 2</div>
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 3</div>
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 4</div>
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 5</div>
<div class="col" style="background-color: #f0f0f0; padding: 1rem; border: 1px solid #ccc;">Item 6</div>
</div>
</div>

使用 .offset-* 类可以将列向右移动。例如,.offset-md-2 会在中等屏幕及以上尺寸下,通过添加左外边距(left margin)将一列向右偏移两个单元。

<div class="container mt-3">
<div class="row">
<div class="col-md-4" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">.col-md-4</div>
<div class="col-md-4 offset-md-2" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">.col-md-4 .offset-md-2</div>
</div>
<div class="row mt-3">
<div class="col-sm-5 col-md-6" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-5 .col-md-6
</div>
<div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0 (Offset on sm, reset on md)
</div>
</div>
</div>

使用 .order-* 类可以改变网格列的视觉顺序。这些类允许你独立于 HTML 中的源代码顺序指定顺序。例如,.order-md-2 设置中等屏幕的顺序,而 .order-1 设置所有屏幕的顺序。使用 .order-first 或 .order-last 可以快速重新排序。

<div class="container mt-3">
<div class="row">
<div class="col-md-8 order-md-2" style="background-color: #f8f9fa; border: 1px solid #dee2e6; padding: 1rem;">
First in HTML, Second visually on MD+ (.col-md-8 .order-md-2)
</div>
<div class="col-md-4 order-md-1" style="background-color: #e9ecef; border: 1px solid #dee2e6; padding: 1rem;">
Second in HTML, First visually on MD+ (.col-md-4 .order-md-1)
</div>
</div>
</div>

应用场景:一个新闻文章页面,在桌面端,广告侧边栏在视觉上首先出现(.order-md-1),但在 HTML 源代码中,主要文章内容为了更好的 SEO 和可访问性而首先出现(.order-md-2)。