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

使用JavaScript实现移动端奇数数量列表项对齐:末项居中

解决移动端列表奇数项最后一个居中的问题

嘿,这个移动端列表的对齐需求我刚好处理过,给你一套完整的实现方案,分CSS布局和JS逻辑两部分来搞定:

第一步:先搭好基础的CSS布局

首先我们给列表设置flex布局,让默认的<li>并排显示,同时准备一个专门的类来处理最后一项的居中效果。这里用媒体查询确保只在移动端生效:

/* 基础列表样式 */
.mobile-list {
  list-style: none;
  padding: 0;
  margin: 0;
  display: flex;
  flex-wrap: wrap;
  gap: 10px; /* 可选:控制<li>之间的间距 */
}

.mobile-list li {
  flex: 1 1 calc(50% - 5px); /* 两个<li>占满一行,减去gap的一半 */
  background: #f0f0f0;
  padding: 10px;
  box-sizing: border-box;
  text-align: center; /* 可选:让<li>内部文字居中 */
}

/* 最后一项居中的专用类 */
.center-last-item {
  flex: 0 1 auto; /* 取消占满一半宽度的设置 */
  margin: 0 auto; /* 实现水平居中 */
}

对应的HTML结构就用你提供的示例:

<ul class="mobile-list">
  <li>name1</li>
  <li>name2</li>
  <li>name3</li>
  <li>name4</li>
  <li>name5</li>
</ul>

第二步:用JavaScript判断并应用样式

接下来我们需要判断<li>的数量是奇数还是偶数,然后动态给最后一项加类。同时还要考虑窗口大小变化的适配(比如手机横竖屏切换):

// 等待DOM加载完成再执行
document.addEventListener('DOMContentLoaded', function() {
  const mobileList = document.querySelector('.mobile-list');
  const listItems = mobileList.querySelectorAll('li');
  const itemCount = listItems.length;

  // 封装一个处理对齐的函数,方便复用
  function adjustListAlignment() {
    const isMobile = window.matchMedia('(max-width: 768px)').matches;
    
    if (isMobile) {
      // 判断数量是否为奇数
      if (itemCount % 2 !== 0) {
        listItems[itemCount - 1].classList.add('center-last-item');
      } else {
        // 偶数的话移除居中类,避免残留样式
        listItems[itemCount - 1].classList.remove('center-last-item');
      }
    } else {
      // 非移动端时恢复默认布局
      listItems[itemCount - 1].classList.remove('center-last-item');
    }
  }

  // 页面加载时执行一次
  adjustListAlignment();

  // 监听窗口大小变化,适配横竖屏切换
  window.addEventListener('resize', adjustListAlignment);
});

一些小提示

  • 如果你调整了<li>之间的gap值,记得同步修改CSS里calc(50% - 5px)的数值(比如gap是15px的话,就改成calc(50% - 7.5px)),确保两个<li>刚好占满一行
  • 如果你的列表是动态生成或会更新的,记得在列表内容变化后调用adjustListAlignment()函数重新判断

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 06:40:48