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

使用Flex实现无序列表4列转2列响应式布局问题求助

你的代码核心问题在于给ul设置了固定计算宽度,这种写法容错性极低,窗口尺寸、内容边距的微小变化都会破坏排布规则,和你将p标签替换为a标签的操作没有直接关联。

修改思路

  • 移除ul的固定宽度设置,改用列表项的百分比宽度控制列数,适配性更强
  • 统一盒模型规则,避免padding撑宽元素导致宽度计算误差
  • 优化图片自适应规则,避免内容溢出容器
  • 用gap属性控制列表项间距,简化布局计算逻辑

完整修改后代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Fruit List</title>
    <style>
        * {
            box-sizing: border-box;
            margin: 0;
            padding: 0;
        }
        body {
            display: flex;
            justify-content: center;
            padding: 20px;
        }
        .container {
            width: 100%;
            max-width: 960px;
        }
        .headline {
            display: flex;
            flex-direction: column;
            justify-content: center;
            align-items: center;
            margin-bottom: 24px;
            text-align: center;
        }
        .headline p {
            margin-top: 8px;
        }
        ul.flex-list {
            list-style: none;
            display: flex;
            flex-wrap: wrap;
            gap: 20px;
            justify-content: center;
        }
        ul.flex-list img {
            width: 100%;
            height: auto;
            aspect-ratio: 1/1;
            object-fit: cover;
            display: block;
        }
        li.flex-list-item {
            text-align: center;
            width: calc(50% - 10px);
        }
        a {
            display: inline-block;
            width: 100%;
            margin-top: 8px;
            text-decoration: none;
            color: inherit;
        }

        @media screen and (min-width: 991px) {
            li.flex-list-item {
                width: calc(25% - 15px);
            }
        }
    </style>
</head>
<body>
    <div class="container">
      <div class="headline">
          <h2>Best fruit</h2>
          <p>Consectetur adipiscing elit, sed do eiusmod tempor incididunt.</p>
      </div>

      <ul class="flex-list">
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Apples</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Oranges</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Strawberries</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Blueberries</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Nectarines</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Bananas</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Rasberries</a>
        </li>
        <li class="flex-list-item">
          <img src="https://via.placeholder.com/200" alt="" />
          <a href="/">Blackberries</a>
        </li>
      </ul>
    </div>
</body>
</html>

效果说明

修改后991px以上宽度自动展示4列布局,991px及以下宽度自动切换为2列布局,所有元素自适应容器宽度,不会出现排布错位的问题,同时保留了无序列表的结构满足可访问性要求。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.11 18:03:03