/* Kole UI Mobile · List 样式 — 对齐移动端规格 §24 列表:一组同类信息按行排列。default 行高 56px、compact 44px; 行间 1px 分隔线用 ::after 画(inset 缩进到行内容起点,full 通栏),可点行整行热区。 */ .kole-m-list { --kole-m-list-row-height: 56px; /* default 行高(compact 44px) */ --kole-m-list-divider-inset: var(--kole-m-gutter); /* 分隔线左端缩进(= 页面留白) */ box-sizing: border-box; width: 100%; margin: 0; padding: 0; list-style: none; background: var(--kole-color-card-bg); font-family: var(--kole-font-family); color: var(--kole-color-text-body); font-size: var(--kole-m-font-size-body); line-height: 1.4; } /* 变体 size=compact:行高 44px(仍不小于触控最小边长),用于高密度列表 */ .kole-m-list--compact { --kole-m-list-row-height: 44px; font-size: var(--kole-m-font-size-label); } /* 变体 divider:inset 缩进到行内容起点 / full 通栏 —— 只在 border=true 时可见 */ .kole-m-list--inset { --kole-m-list-divider-inset: var(--kole-m-gutter); } .kole-m-list--full { --kole-m-list-divider-inset: 0px; } /* 分组标题与脚注:在卡片之外,靠留白区分分组 */ .kole-m-list__header, .kole-m-list__footer { margin: 0; padding: var(--kole-space-12) var(--kole-m-gutter) var(--kole-space-8); background: var(--kole-color-page-bg); color: var(--kole-color-text-secondary); font-size: var(--kole-m-font-size-label); } .kole-m-list__footer { padding-top: var(--kole-space-8); padding-bottom: var(--kole-space-12); } /* 行:前缀位 + 主区 + 后缀位 */ .kole-m-list__item { box-sizing: border-box; display: flex; align-items: center; gap: var(--kole-space-12); width: 100%; min-height: var(--kole-m-list-row-height); padding: var(--kole-space-12) var(--kole-m-gutter); margin: 0; border: 0; background: var(--kole-color-card-bg); color: var(--kole-color-text-body); font-family: inherit; font-size: inherit; line-height: 1.4; text-align: start; } /* 变体 border=true:行间 1px 分隔线。 线画在**列表子项**(li)的上沿而不是行的下沿 —— 行既可能是 li 本身, 也可能是 li 里的原生 button(可点行),挂在下沿会让两层 :last-child 都对不上。 绝对定位保证线画在行背景之上。 */ .kole-m-list--border > * { position: relative; } .kole-m-list--border > * + *::after { content: ''; position: absolute; top: 0; left: var(--kole-m-list-divider-inset); right: 0; height: 1px; background: var(--kole-color-border); } /* 可点行:整行热区,按下反馈是整行背景变化(不是只有文字变色) */ button.kole-m-list__item { cursor: pointer; touch-action: manipulation; } button.kole-m-list__item:active { background: var(--kole-color-table-header-bg); } /* 状态 disabled:置灰且不响应点击 */ .kole-m-list__item.is-disabled, .kole-m-list__item:disabled { color: var(--kole-color-text-disabled); cursor: not-allowed; } .kole-m-list__item.is-disabled:active, .kole-m-list__item:disabled:active { background: var(--kole-color-card-bg); } /* 前缀位(头像 / 图标 / 序号):装饰性,点击等于点整行 */ .kole-m-list__prefix { flex: 0 0 auto; display: inline-flex; align-items: center; color: var(--kole-color-text-secondary); } /* 主区:标题 + 可选副标题,两行都单行省略 */ .kole-m-list__body { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; gap: 2px; } .kole-m-list__title { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; color: var(--kole-color-text-title); } .kole-m-list__desc { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--kole-m-font-size-label); color: var(--kole-color-text-secondary); } /* 后缀位:值文字 / 标签 / 箭头 */ .kole-m-list__suffix { flex: 0 0 auto; display: inline-flex; align-items: center; gap: var(--kole-space-8); max-width: 45%; font-size: var(--kole-m-font-size-label); color: var(--kole-color-text-secondary); } .kole-m-list__value { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } .kole-m-list__arrow { flex: 0 0 auto; display: inline-flex; color: var(--kole-color-text-placeholder); } /* 状态 empty:空列表占位(宿主用 aria-live 播报) */ .kole-m-list__empty { margin: 0; padding: var(--kole-space-40) var(--kole-m-gutter); background: var(--kole-color-card-bg); color: var(--kole-color-text-secondary); font-size: var(--kole-m-font-size-label); text-align: center; } button.kole-m-list__item:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: -2px; }