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

如何利用ul、li元素实现多列对齐、列间距固定的无序列表布局

实现方案

方案1:微调HTML结构(推荐,兼容性好、语义更清晰)

将成对的普通条目和ck-item放在同一个<li>内,用标签区分两部分内容:

<ul class="two-col-ul">
  <li><span class="item-main">item 1</span></li>
  <li>
    <span class="item-main">item 2</span>
    <span class="item-ck">ck-item 2</span>
  </li>
  <li><span class="item-main">item 3</span></li>
  <li>
    <span class="item-main">item 4</span>
    <span class="item-ck">ck-item 4</span>
  </li>
  <li>
    <span class="item-main">item 5</span>
    <span class="item-ck">ck-item 5</span>
  </li>
</ul>

对应CSS配置:

.two-col-ul {
  list-style: none;
  padding-left: 0;
  /* 可按需调整列表整体边距 */
}
.two-col-ul li {
  display: grid;
  /* 第一列自适应占满剩余空间,第二列按内容宽度适配 */
  grid-template-columns: minmax(0, 1fr) auto;
  /* 两列固定间距,可自行调整数值 */
  column-gap: 24px;
  margin: 4px 0;
}
/* 仅存在单条内容的li自动跨两列显示 */
.two-col-ul li .item-main:only-of-type {
  grid-column: 1 / -1;
}

方案2:完全保留原有HTML结构

需要给所有ck-item的<li>添加ck-item类名:

<ul class="two-col-ul">
  <li>item 1</li>
  <li>item 2</li>
  <li class="ck-item">ck-item 2</li>
  <li>item 3</li>
  <li>item 4</li>
  <li class="ck-item">ck-item 4</li>
  <li>item 5</li>
  <li class="ck-item">ck-item 5</li>
</ul>

对应CSS配置:

.two-col-ul {
  display: grid;
  grid-template-columns: minmax(0, 1fr) auto;
  column-gap: 24px;
  list-style: none;
  padding-left: 0;
}
/* ck-item自动放到第二列 */
.two-col-ul .ck-item {
  grid-column: 2;
}
/* 无对应ck-item的普通条目自动跨两列 */
.two-col-ul li:not(.ck-item):not(:has(+ .ck-item)) {
  grid-column: 1 / -1;
}

注:方案2用到的:has()选择器兼容性符合现代主流浏览器要求,若需要兼容极低版本浏览器,建议使用方案1。

两种方案均可实现:无论第一列文本长度多少,第二列所有ck-item始终保持水平对齐,两列间距固定的效果。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 18:36:04