You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

能否用CSS实现文本在多张图片的上下侧环绕排版?

需求:重现杂志风格文本环绕排版

我想要重现这类杂志风格的排版效果:
杂志排版效果

尝试过程中遇到的问题:

  • 使用float属性时,只能实现文本在图片下方环绕的效果,达不到目标样式
  • 使用shape-outside属性时,单个文本div只能应用一个形状,无法实现多形状适配
  • 尝试用CSS Grid实现单图上下侧文本环绕,代码如下:

尝试的CSS代码

.mygrid {
    display: grid;
    grid-template-rows: 150px 150px 150px;
    grid-template-columns: 150px 150px;
    grid-template-areas:
        "para para"
        "image para"
        "para para";
}

.lorem {
    background-color: red;
    grid-area: para;
}

.image {
    background-color: blue;
    grid-area: image;
}

尝试的HTML代码

<div class="mygrid">
        <div class="lorem">Lorem ipsum dolor sit amet consectetur, adipisicing elit. Soluta ipsam, iure facilis optio eum dignissimos. Quis aliquam inventore a sit quo est ut voluptas nesciunt iure, veniam consequuntur! Error, recusandae!</div>
        <div class="im">I'm the image!</div>
    </div>

解决方案

方法1:结合shape-outside与伪元素实现自动环绕

shape-outside本身仅支持单个形状,但可以给图片容器添加伪元素,分别在图片上下区域生成占位形状,实现文本在图片上下两侧的自动环绕:

.magazine-wrap {
  width: 600px;
  margin: 0 auto;
}

.img-box {
  float: left;
  width: 150px;
  height: 300px;
  position: relative;
  margin: 10px 15px;
}

.img-box img {
  width: 100%;
  height: 100%;
  object-fit: cover;
}

/* 图片上方占位形状 */
.img-box::before {
  content: "";
  position: absolute;
  top: -10px;
  left: 0;
  width: 100%;
  height: 150px;
  shape-outside: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  float: left;
}

/* 图片下方占位形状 */
.img-box::after {
  content: "";
  position: absolute;
  bottom: -10px;
  left: 0;
  width: 100%;
  height: 150px;
  shape-outside: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  float: left;
}

.content-text {
  text-align: justify;
  line-height: 1.6;
}
<div class="magazine-wrap">
  <div class="img-box">
    <img src="你的图片路径" alt="杂志配图">
  </div>
  <div class="content-text">
    Lorem ipsum dolor sit amet consectetur adipisicing elit. Voluptates, quibusdam. Quasi, voluptate? Quisquam, voluptates. Quasi, voluptate? Quisquam, voluptates. Quasi, voluptate? Quisquam, voluptates.(替换为长文本内容)
  </div>
</div>

方法2:CSS Grid拆分文本实现精准排版

如果需要严格控制文本段落的位置,可以把文本拆分为上、中、下三个区块,通过Grid布局对应图片的位置:

.grid-magazine {
  display: grid;
  grid-template-columns: 150px 1fr;
  grid-template-rows: auto 300px auto;
  gap: 10px;
  width: 600px;
  margin: 0 auto;
}

.text-top {
  grid-column: 1 / -1;
}

.img-block {
  grid-row: 2 / 3;
  grid-column: 1 / 2;
  background-color: #ccc; /* 替换为图片 */
}

.text-middle {
  grid-row: 2 / 3;
  grid-column: 2 / -1;
}

.text-bottom {
  grid-column: 1 / -1;
}
<div class="grid-magazine">
  <div class="text-top">Lorem ipsum dolor sit amet consectetur...</div>
  <div class="img-block"></div>
  <div class="text-middle">Adipisicing elit. Voluptates, quibusdam...</div>
  <div class="text-bottom">Sit amet consectetur adipisicing elit...</div>
</div>

选型建议

  • 方法1适合长文本自动适配,无需拆分内容,还可通过circle()/ellipse()等函数实现不规则环绕效果
  • 方法2适合需要精准控制文本段落位置的场景,排版稳定性更高

内容的提问来源于stack exchange,提问作者Mar

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.16 03:55:36