如何防止卡片内容在小屏幕中溢出

本文详解通过 css 响应式控制(如 `overflow`, `word-break`, `flex-wrap`, `max-width`)与 bootstrap 栅格系统协同优化,彻底解决卡片内列表文字在移动端溢出、布局错乱的问题。

在构建响应式卡片组件时,内容溢出(尤其是长文本项如“Food License (FSSAI)”或“Company / LLP Incorporation”)是初学者常见问题。你提供的代码中,.services-list 使用了 position: absolute 和固定宽高(如 width: 550px),这会直接破坏响应式行为——在小屏幕下,元素无法自适应容器宽度,导致文字撑破卡片、换行失效甚至横向滚动。

✅ 核心修复策略

  1. 移除破坏流式布局的绝对定位
    position: absolute 使 .services-list 脱离文档流,失去对父容器(.card-body)的尺寸依赖。应改为标准块级或弹性布局:

    .services-list {
      list-style: none;
      padding: 0;
      margin: 0;
      text-align: left;
      font-size: 1.5em;
      /* 删除:position: absolute; display: flex; overflow: hidden; */
    }
  2. 启用安全换行与防溢出

  3. 内容添加强制换行和溢出隐藏(兼顾可读性与完整性):
    .services-list li {
      padding: 0.75rem 1rem;
      word-break: break-word;   /* 在任意字符间换行(适合长英文/混合文本) */
      /* 或使用:overflow-wrap: break-word; */
      white-space: normal;      /* 允许正常换行(禁用 nowrap) */
    }
  4. 响应式字体与内边距缩放
    利用媒体查询动态调整移动端字体大小和间距,避免文字“挤出”:

    @media (max-width: 768px) {
      .services-list li {
        font-size: 1.1rem; /* 比桌面端小,但保持可读 */
        padding: 0.5rem 0.75rem;
      }
      #services-card {
        padding: 5% 8%; /* 减少左右留白,留出更多内容宽度 */
      }
    }
  5. Bootstrap 栅格已足够健壮,无需额外固定宽度
    你使用了 .col-lg-6,这是正确的;但 .card-back 和 .card-white 的 width: 550px 会覆盖 Bootstrap 的响应式宽度。应删除所有显式 width,改用 max-width 或完全交由栅格控制:

    .card-back,
    .card-white {
      /* 删除 width: 550px; */
      max-width: 100%; /* 确保不超出父容器 */
      width: auto;      /* 让内容决定自然宽度 */
      /* 移除 height: 70px; —— 高度应由内容撑开 */
    }
  6. 增强可访问性与视觉一致性(推荐)
    添加 box-sizing: border-box 防止 padding/border 影响尺寸计算,并为小屏优化 hover 效果(避免误触):

    .services-list li {
      box-sizing: border-box;
      transition: all 0.2s ease;
    }
    @media (hover: hover) and (pointer: fine) {
      .card-back:hover,
      .card-white:hover {
        background-color: #e6f7ff;
        color: #e60073;
        font-weight: 600;
      }
    }

✅ 完整优化后关键 CSS 示例

.services-list {
  list-style: none;
  padding: 0;
  margin: 0;
  text-align: left;
  font-size: 1.5em;
}

.services-list li {
  padding: 0.75rem 1rem;
  word-break: break-word;
  white-space: normal;
  box-sizing: border-box;
  cursor: pointer;
}

.card-back, .card-white {
  background-color: transparent;
  border: none;
  width: 100%;
  padding: 0.5rem 1rem;
  text-align: left;
  font-weight: 500;
}

@media (max-width: 768px) {
  .services-list li {
    font-size: 1.1rem;
    padding: 0.6rem 0.8rem;
  }
  #services-card {
    padding: 4% 6%;
  }
}
? 重要提醒:Bootstrap 5+ 已弃用 fa-solid 图标类(需引入 Font Awesome 6 CDN),且 pl-5 等间距工具类在小屏下可能造成过宽缩进。建议统一用 ps-3(padding-start)替代 pl-3,并配合 text-truncate 类处理超长单项(如 Food License (FSSAI))。

通过以上调整,你的卡片将在所有设备上保持内容完整、换行合理、无横向溢出,真正实现专业级响应式体验。