/* Kole UI Mobile · Checkbox 样式 — 对齐移动端规格 §34 多选框:一组里可以同时选中多项,并带「全选」形态(全选行的选中态由组内各项推导)。 触屏上没有鼠标悬停,选中态必须同时有形状差异(勾号出现/消失)与 aria-checked, 不能只靠颜色;整行(方框 + 文字)都是热区,行高不小于 44px。 */ .kole-m-checkbox-group { /* 组件级变量:业务侧可在容器上覆盖 */ --kole-m-checkbox-size: 20px; /* 方框边长(视觉尺寸) */ --kole-m-checkbox-gap: var(--kole-space-12); /* 方框与文字的间距 */ box-sizing: border-box; display: flex; flex-direction: column; width: 100%; background: var(--kole-color-card-bg); color: var(--kole-color-text-body); font-family: inherit; font-size: var(--kole-m-font-size-body); line-height: 1.4; } /* 变体 orientation=horizontal:横向排列(值少、文案短时用) */ .kole-m-checkbox-group--horizontal { flex-direction: row; flex-wrap: wrap; align-items: center; } /* 组内相邻项的分隔线:只在纵向排列时画 */ .kole-m-checkbox-group:not(.kole-m-checkbox-group--horizontal) .kole-m-checkbox + .kole-m-checkbox { border-top: 1px solid var(--kole-color-border); } .kole-m-checkbox { box-sizing: border-box; display: flex; align-items: center; gap: var(--kole-m-checkbox-gap); width: 100%; min-height: var(--kole-m-touch-target); 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; cursor: pointer; touch-action: manipulation; } .kole-m-checkbox-group--horizontal .kole-m-checkbox { width: auto; padding-inline: var(--kole-space-12); } .kole-m-checkbox:active:not(:disabled) { background: var(--kole-color-table-header-bg); } /* 方框:未选中是空心方框,选中是品牌色底 + 反色勾号(形状差异,不只靠颜色) */ .kole-m-checkbox__icon { position: relative; flex: 0 0 auto; box-sizing: border-box; width: var(--kole-m-checkbox-size); height: var(--kole-m-checkbox-size); border: 1px solid var(--kole-color-text-placeholder); border-radius: var(--kole-radius-small); background: var(--kole-color-card-bg); transition: border-color 150ms var(--kole-ease-standard), background-color 150ms var(--kole-ease-standard); } /* 勾号用两条边框拼(不引入图标字体):未选中时缩放为 0 */ .kole-m-checkbox__icon::after { content: ''; position: absolute; top: 3px; left: 6px; width: 5px; height: 9px; border: solid var(--kole-color-text-inverse); border-width: 0 2px 2px 0; transform: rotate(45deg) scale(0); transition: transform 150ms var(--kole-ease-standard); } .kole-m-checkbox.is-checked { color: var(--kole-color-text-title); } .kole-m-checkbox.is-checked .kole-m-checkbox__icon { border-color: var(--kole-color-brand); background: var(--kole-color-brand); } .kole-m-checkbox.is-checked .kole-m-checkbox__icon::after { transform: rotate(45deg) scale(1); } /* 状态 indeterminate(半选,全选行的常见态):品牌底 + 一条横杠 */ .kole-m-checkbox.is-indeterminate .kole-m-checkbox__icon { border-color: var(--kole-color-brand); background: var(--kole-color-brand); } .kole-m-checkbox.is-indeterminate .kole-m-checkbox__icon::after { top: 8px; left: 3px; width: 10px; height: 0; border-width: 0 0 2px 0; transform: rotate(0deg) scale(1); } .kole-m-checkbox__label { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; } /* 说明行:标签下的一行小字 */ .kole-m-checkbox__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-checkbox--all { border-bottom: 1px solid var(--kole-color-border); color: var(--kole-color-text-title); } /* 变体 button=true:胶囊标签式(筛选条一类的轻量场合,无方框) */ .kole-m-checkbox--button { width: auto; min-height: var(--kole-m-touch-target); padding: var(--kole-space-8) var(--kole-space-16); border: 1px solid var(--kole-color-border); border-radius: 999px; background: var(--kole-color-card-bg); color: var(--kole-color-text-secondary); font-size: var(--kole-m-font-size-label); } .kole-m-checkbox--button .kole-m-checkbox__icon { display: none; } .kole-m-checkbox--button.is-checked { border-color: var(--kole-color-brand); background: var(--kole-color-brand-bg); color: var(--kole-color-brand); } /* 状态 disabled:置灰且不可聚焦(原生 disabled) */ .kole-m-checkbox:disabled { color: var(--kole-color-text-disabled); background: var(--kole-color-card-bg); cursor: not-allowed; } .kole-m-checkbox:disabled .kole-m-checkbox__icon { border-color: var(--kole-color-text-disabled); background: var(--kole-color-disabled-bg); } .kole-m-checkbox--button:disabled { border-color: var(--kole-color-border); background: var(--kole-color-disabled-bg); color: var(--kole-color-text-disabled); } .kole-m-checkbox:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: -2px; }