LOGO OA教程 ERP教程 模切知识交流 PMS教程 CRM教程 开发文档 其他文档  
 
网站管理员

Flex 布局下文字省略不生效?原因其实很简单

freeflydom
2025年10月10日 10:41 本文热度 118

概述

在开发中,我们常遇到这种布局:A、B、C 三段文本长度不固定,其中 A、C 占用空间较少,需要完整显示;而 B 是自适应区域,超出部分需省略显示。A 与 B 共享同一容器,该容器与 C 同级,容器应占据除 C 之外的所有剩余空间。HTML 结构如下:

<div class="wrap">
  <div class="infos">
    <div>Soccer</div>
    <div class="self">Campeonato De Reserva De Primera Division C</div>
  </div>
  <div class="live">Live</div>
</div>

如果按照常规思路编写 CSS,比如:

.wrap {
  display: flex;
  align-items: center;
  width: 350px;
  border: 1px dashed #ccc;
  padding: 4px 16px;
  gap: 16px;
}
.infos {
  flex: 1;
  display: flex;
  gap: 8px;
  align-items: center;
}
.self {
  flex: 1;
  padding: 4px;
  background-color: silver;
  border-radius: 6px;
  overflow: hidden;
  white-space: nowrap;
  text-overflow: ellipsis;
}
.live {
  padding: 4px 16px;
  background: cornflowerblue;
  border-radius: 6px;
  color: white;
  flex-shrink: 0;
}

渲染效果往往会出现问题,示例如下:

可以看到,.self 被内容撑开,导致右侧 “Live” 按钮被挤出容器。

异常分析

问题的根源在于 Flex 子项的默认行为

在 Flex 布局中,子元素的默认 min-width 是 auto,意味着它会根据内容宽度确定最小值,导致内容不会被压缩。

因此,当 .wrap 的空间不足时,.infos 会拒绝被压缩,从而让内部的 .self 也失去“省略”的机会。

要让 .self 的 text-overflow: ellipsis 生效,必须确保它在空间不足时可以被压缩。

解决方案也很简单:给 .infos 设置 min-width: 0 即可。

这告诉浏览器,“.infos 可以比它内容更窄”,从而允许内部 .self 根据空间自动裁切。

实现

<!DOCTYPE html>
<html lang="zh-CN">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <title>Flex 布局下文字省略不生效?原因其实很简单</title>
    <style>
      * {
        margin: 0;
        padding: 0;
      }
      body {
        width: 100vw;
        height: 100vh;
        display: flex;
        justify-content: center;
        align-items: center;
      }
      .wrap {
        display: flex;
        align-items: center;
        width: 350px;
        border: 1px dashed #ccc;
        padding: 4px 16px;
        gap: 16px;
      }
      .infos {
        flex: 1;
        display: flex;
        gap: 8px;
        align-items: center;
        min-width: 0; /* ✅ 关键:允许内部文字被压缩 */
      }
      .self {
        flex: 1;
        padding: 4px;
        background-color: silver;
        border-radius: 6px;
        overflow: hidden;
        white-space: nowrap;
        text-overflow: ellipsis;
      }
      .live {
        padding: 4px 16px;
        background: cornflowerblue;
        border-radius: 6px;
        color: white;
        flex-shrink: 0;
      }
    </style>
  </head>
  <body>
    <div class="wrap">
      <div class="infos">
        <div>Soccer</div>
        <div class="self">Campeonato De Reserva De Primera Division C</div>
      </div>
      <div class="live">Live</div>
    </div>
  </body>
</html>

总结

层级是否需要 min-width: 0原因
.wrap最外层容器,无需压缩
.infos是 .wrap 的 flex 子项,默认 min-width: auto 会阻止内部压缩
.self父层已允许压缩,无需重复设置

结论:在 Flex 布局中,当内部文字的省略不生效时,优先检查文字外层的容器 是否设置了 min-width: 0。大多数情况下,只需在容器层加上这一行,就能彻底解决问题。

转自https://juejin.cn/post/7557880524083249203


该文章在 2025/10/10 10:41:29 编辑过
关键字查询
相关文章
正在查询...
点晴ERP是一款针对中小制造业的专业生产管理软件系统,系统成熟度和易用性得到了国内大量中小企业的青睐。
点晴PMS码头管理系统主要针对港口码头集装箱与散货日常运作、调度、堆场、车队、财务费用、相关报表等业务管理,结合码头的业务特点,围绕调度、堆场作业而开发的。集技术的先进性、管理的有效性于一体,是物流码头及其他港口类企业的高效ERP管理信息系统。
点晴WMS仓储管理系统提供了货物产品管理,销售管理,采购管理,仓储管理,仓库管理,保质期管理,货位管理,库位管理,生产管理,WMS管理系统,标签打印,条形码,二维码管理,批号管理软件。
点晴免费OA是一款软件和通用服务都免费,不限功能、不限时间、不限用户的免费OA协同办公管理系统。
Copyright 2010-2025 ClickSun All Rights Reserved