ul li实现多行多列的布局思路

本文分享了如何使用CSS flex布局实现京东官网类似模块,通过flex-flow属性控制换行,固定li宽度实现每行3列,详细解析了布局技巧和优化方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

最近呢在练手css布局,之前在工作中,也会经常遇到这种多行多列的布局,其实css实现的路径挺多的,如下图式的布局一般多是ul li来实现,在此我想写一下我自己的实现思路:
在这里插入图片描述
上图式京东官网上的一个模块

<div class="icon">
	  <ul>
	      <li>
	          <img src="./icon/1.png" alt="">
	          <span>
	             话费 
	          </span>
	      </li>
	      <li>
	          <img src="./icon/2.png" alt="">
	          <span>
	              机票
	          </span>
	      </li>
	      <li>
	          <img src="./icon/3.png" alt="">
	          <span>
	              酒店
	          </span>
	      </li>
	      <li>
	          <img src="./icon/4.png" alt="">
	          <span>
	              游戏
	          </span>
	      </li>
	      <li>
	          <img src="./icon/5.png" alt="">
	          <span>
	              加油卡
	          </span>
	      </li>
	      <li>
	          <img src="./icon/6.png" alt="">
	          <span>
	              火车票
	          </span>
	      </li>
	      <li>
	          <img src="./icon/7.png" alt="">
	          <span>
	              众筹
	          </span>
	      </li>
	      <li>
	          <img src="./icon/8.png" alt="">
	          <span>
	              理财
	          </span>
	      </li>
	      <li>
	          <img src="./icon/9.png" alt="">
	          <span>
	              白条
	          </span>
	      </li>
	      <li>
	          <img src="./icon/10.png" alt="">
	          <span>
	              电影票
	          </span>
	      </li>
	      <li>
	          <img src="./icon/11.png" alt="">
	          <span>
	              企业购
	          </span>
	      </li>
	      <li>
	          <img src="./icon/12.png" alt="">
	          <span>
	              礼品卡
	          </span>
	      </li>
	  </ul>
	</div>

css代码:

.icon {
    width:130px;
    margin-top:15px;
   ul {
       display:flex;
        width:130px;
        list-style-type: none;
        flex-flow: wrap;
       li {
           align-items:center;
           width:40px;
           margin-bottom:10px;
           img {
               width:28px;
               height:28px;
               display: block;
           }
           span {
                font-size:8px;
            }
       }
   } 
}

12张图片,12个li标签,首先给ul加上display:flex属性,目的是将原始的列排布形式改为行排列(list-style-type: none;是用来去除圆点的,此处不多赘述)
在这里插入图片描述
到这一步,咱们还缺两个大的效果:
(1)换行
这里有个认识误区:当内容数量超过了盒子的规定宽度的时候,内容是不会自动换行的,只会一直往外排,超过盒子。所以咱们得手动给盒子添加一个属性:flex-flow: wrap;当内容超过盒子宽度时,内容会自动换行
在这里插入图片描述
(2)每行三个:这里我第一次是这样做的:每个li标签由内容去撑开,只需给每个li标签加个margin-right去控制,但是底下文字的数量有的是3个,有的是2个,不是很好调。

有个更好的办法是给每个li标签加一个合适的宽度,这样就不会出现上述的实现问题了。

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Realistic-er

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值