使用纯 HTML 和 CSS (最简单)
这种方法使用 float 属性,是实现图文左右布局最经典、最简单的方式,它适用于二维码图片宽度固定,且不需要太复杂交互的场景。

(图片来源网络,侵删)
核心思路
- 容器: 创建一个容器来包裹所有内容(文本和二维码)。
- 文本: 文本内容正常排列。
- 二维码: 将二维码图片放在文本内容的后面,并使用
float: right;属性,使其脱离正常的文档流,并“漂浮”到容器的右侧。
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">右侧二维码示例 (Float)</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
color: #333;
padding: 20px;
}
/* 主容器 */
.content-wrapper {
max-width: 900px;
margin: 0 auto;
border: 1px solid #e0e0e0;
padding: 20px;
border-radius: 8px;
}
/* 二维码容器,使其浮动到右侧 */
.qr-code-container {
float: right; /* 关键属性:浮动到右侧 */
margin-left: 20px; /* 与左侧文本的间距 */
margin-bottom: 10px; /* 与下方内容的间距 */
text-align: center;
}
.qr-code-container img {
width: 150px; /* 设置二维码的宽度 */
height: auto; /* 高度自适应,保持比例 */
border: 1px solid #ddd;
padding: 5px;
background: white;
}
.qr-code-container p {
font-size: 12px;
color: #666;
margin-top: 5px;
}
/* 清除浮动,防止父容器高度塌陷 */
.clearfix::after {
content: "";
display: table;
clear: both;
}
</style>
</head>
<body>
<div class="content-wrapper clearfix">
<h1>欢迎了解我们的产品</h1>
<p>
这里是一段很长很长的介绍文字,用于演示二维码如何浮动在文本的右侧,您可以继续在这里添加更多内容,文字会自动绕过右侧的二维码图片,形成优雅的图文混排效果。
</p>
<p>
这种布局方式非常简单,不需要复杂的框架,只需要几行CSS代码就能实现,如果您只需要一个静态的二维码展示,这是一个非常不错的选择。
</p>
<p>
扫描右侧的二维码,即可下载我们的官方App,体验更多精彩功能,我们致力于为用户提供最优质的服务和最流畅的使用体验。
</p>
<!-- 二维码图片放在这里 -->
<div class="qr-code-container">
<img src="https://via.placeholder.com/150" alt="下载App二维码">
<p>扫码下载App</p>
</div>
<p>
继续添加更多文字,可以看到它们会自然地排列在二维码的下方,因为 `.qr-code-container` 已经脱离了文档流,所以后续的元素会正常显示。
</p>
</div>
</body>
</html>
使用 Flexbox 布局 (更现代、更灵活)
Flexbox 是现代 CSS 布局的首选方案,它提供了更强大、更直观的控制方式,可以轻松实现左右布局,并且能更好地处理垂直居中、响应式等问题。
核心思路
- 容器: 将父元素设置为 Flex 容器 (
display: flex;)。 - 主轴: 默认情况下,子元素会沿着水平方向(主轴)排列。
- 对齐: 使用
justify-content: space-between;让内容靠左,二维码靠右,或者使用margin-left: auto;让二维码自动“挤”到最右边。
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">右侧二维码示例 (Flexbox)</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
color: #333;
padding: 20px;
}
/* 主容器,设置为 Flexbox 布局 */
.content-wrapper {
max-width: 900px;
margin: 0 auto;
border: 1px solid #e0e0e0;
padding: 20px;
border-radius: 8px;
display: flex; /* 关键属性:启用 Flexbox */
align-items: flex-start; /* 子元素顶部对齐 */
gap: 30px; /* 子元素之间的间距 */
}
/* 文本内容区域 */
.text-content {
flex: 1; /* 关键属性:占据所有可用空间,将二维码“挤”到右边 */
}
/* 二维码容器 */
.qr-code-container {
flex-shrink: 0; /* 关键属性:防止二维码被压缩 */
text-align: center;
}
.qr-code-container img {
width: 150px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
background: white;
}
.qr-code-container p {
font-size: 12px;
color: #666;
margin-top: 5px;
}
</style>
</head>
<body>
<div class="content-wrapper">
<div class="text-content">
<h1>欢迎了解我们的产品</h1>
<p>
这里是使用 Flexbox 实现的右侧二维码布局,这种方法比 float 更现代、更强大,我们可以轻松控制内容的对齐方式,并且可以更好地适应不同屏幕尺寸。
</p>
<p>
通过给文本内容设置 `flex: 1;`,它会自动占据所有剩余空间,而二维码则通过 `flex-shrink: 0;` 保持其原始大小,从而被“推”到容器的最右侧。
</p>
<p>
扫描右侧的二维码,即可关注我们的微信公众号,获取最新资讯和专属优惠,我们期待您的关注!
</p>
</div>
<!-- 二维码图片放在这里 -->
<div class="qr-code-container">
<img src="https://via.placeholder.com/150" alt="关注公众号二维码">
<p>扫码关注公众号</p>
</div>
</div>
</body>
</html>
使用 CSS Grid 布局 (最强大)
CSS Grid 是一个二维布局系统,非常适合创建复杂的网格布局,对于简单的左右分栏,它同样非常出色且代码简洁。
核心思路
- 容器: 将父元素设置为 Grid 容器 (
display: grid;)。 - 列定义: 使用
grid-template-columns定义列的布局。1fr auto表示第一列占据可用空间,第二列(二维码)根据内容自动调整大小。
代码示例
<!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">右侧二维码示例 (Grid)</title>
<style>
body {
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, sans-serif;
line-height: 1.6;
color: #333;
padding: 20px;
}
/* 主容器,设置为 Grid 布局 */
.content-wrapper {
max-width: 900px;
margin: 0 auto;
border: 1px solid #e0e0e0;
padding: 20px;
border-radius: 8px;
display: grid; /* 关键属性:启用 Grid */
/* 定义两列:第一列占据剩余空间,第二列根据内容自动调整 */
grid-template-columns: 1fr auto;
gap: 30px; /* 列之间的间距 */
align-items: start; /* 子元素顶部对齐 */
}
/* 文本内容区域 */
.text-content {
}
/* 二维码容器 */
.qr-code-container {
text-align: center;
}
.qr-code-container img {
width: 150px;
height: auto;
border: 1px solid #ddd;
padding: 5px;
background: white;
}
.qr-code-container p {
font-size: 12px;
color: #666;
margin-top: 5px;
}
</style>
</head>
<body>
<div class="content-wrapper">
<div class="text-content">
<h1>欢迎了解我们的产品</h1>
<p>
这是使用 CSS Grid 实现的右侧二维码布局,Grid 布局提供了非常直观的方式来定义页面结构,`grid-template-columns: 1fr auto;` 这行代码清晰地表达了“一列占满空间,另一列自适应”的布局意图。
</p>
<p>
这种方式在语义上非常清晰,代码也极为简洁,是处理此类分栏问题的“王牌”方案。
</p>
<p>
扫描右侧的二维码,即可访问我们的官方网站,了解更多产品详情,我们相信,您一定会爱上我们的产品!
</p>
</div>
<!-- 二维码图片放在这里 -->
<div class="qr-code-container">
<img src="https://via.placeholder.com/150" alt="访问官网二维码">
<p>扫码访问官网</p>
</div>
</div>
</body>
</html>
总结与对比
| 方法 | 优点 | 缺点 | 适用场景 |
|---|---|---|---|
| Float | - 兼容性极好 - 简单直接,易于理解 |
- 需要手动清除浮动(.clearfix)- 对垂直居中等复杂布局支持不佳 |
- 非常简单的图文混排 - 需要兼容老旧浏览器 |
| Flexbox | - 代码简洁,布局灵活 - 天然支持各种对齐方式(居中、拉伸等) - 响应式能力强 |
- 一维布局(主轴和交叉轴),不适合复杂网格 | - 绝大多数现代网页布局 - 左右、上下分栏 - 居中对齐 |
| CSS Grid | - 最强大的布局工具 - 代码语义最清晰 - 二维布局,可同时控制行和列 |
- 在极少数非常老旧的浏览器(如 IE11 以下)中不支持 | - 复杂的网页网格布局 - 卡片式设计 - 当你想要用最直观的方式定义结构时 |
推荐选择:
- 对于新项目,强烈推荐使用 Flexbox 或 CSS Grid,两者都非常优秀,Flexbox 更侧重于一维排列,而 Grid 更适合二维网格,对于简单的左右分栏,两者都能完美胜任,且代码比 Float 更优雅。
- 如果你的项目需要支持非常古老的浏览器(如 IE8/9),Float 是唯一的选择,但这种情况现在已经非常少了。
额外建议:如何获取真实的二维码图片?
你需要在代码中替换 src="https://via.placeholder.com/150" 这部分。

(图片来源网络,侵删)
- 在线生成: 可以使用在线二维码生成器,如 QR Code Generator,输入网址、文本等内容后下载图片。
- 后端生成: 如果你的二维码内容是动态的(如每个用户的专属链接),应该由后端程序生成并提供图片地址或直接输出图片流。
- 使用库: 在前端项目中,可以使用 JavaScript 库如
qrcode.js来动态生成二维码。

(图片来源网络,侵删)
