/* Kole UI Mobile · Radio 样式 — 对齐移动端规格 §33 单选框:一组里只能选一项。触屏上没有鼠标悬停,所以选中态必须同时有 形状差异(内圈实心点)与 aria-checked,不能只靠颜色。 整行(圆点 + 文字)都是热区,行高不小于 44px;横向组里每项自身仍要够 44px。 */ .kole-m-radio-group { /* 组件级变量:业务侧可在容器上覆盖 */ --kole-m-radio-size: 20px; /* 圆点直径(视觉尺寸) */ --kole-m-radio-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-radio-group--horizontal { flex-direction: row; flex-wrap: wrap; align-items: center; } /* 组内相邻项的分隔线:只在纵向排列时画(横向排列靠间距分组) */ .kole-m-radio-group:not(.kole-m-radio-group--horizontal) .kole-m-radio + .kole-m-radio { border-top: 1px solid var(--kole-color-border); } .kole-m-radio { box-sizing: border-box; display: flex; align-items: center; gap: var(--kole-m-radio-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-radio-group--horizontal .kole-m-radio { width: auto; padding-inline: var(--kole-space-12); } .kole-m-radio:active:not(:disabled) { background: var(--kole-color-table-header-bg); } /* 圆点:未选中是空心环,选中是实心圆 + 内圈反色点(形状差异,不只靠颜色) */ .kole-m-radio__icon { position: relative; flex: 0 0 auto; box-sizing: border-box; width: var(--kole-m-radio-size); height: var(--kole-m-radio-size); border: 1px solid var(--kole-color-text-placeholder); border-radius: 50%; background: var(--kole-color-card-bg); transition: border-color 150ms var(--kole-ease-standard), background-color 150ms var(--kole-ease-standard); } .kole-m-radio__icon::after { content: ''; position: absolute; inset: 3px; border-radius: 50%; background: var(--kole-color-text-inverse); transform: scale(0); transition: transform 150ms var(--kole-ease-standard); } /* 状态 checked:圆环填品牌色,内圈出现反色实心点 */ .kole-m-radio.is-checked { color: var(--kole-color-text-title); } .kole-m-radio.is-checked .kole-m-radio__icon { border-color: var(--kole-color-brand); background: var(--kole-color-brand); } .kole-m-radio.is-checked .kole-m-radio__icon::after { transform: scale(1); } .kole-m-radio__label { flex: 1 1 auto; min-width: 0; display: flex; flex-direction: column; } /* 说明行:标签下的一行小字(单行省略,不把行撑成两行以上) */ .kole-m-radio__desc { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; font-size: var(--kole-m-font-size-label); color: var(--kole-color-text-secondary); } /* 变体 button=true:胶囊标签式(筛选条一类的轻量场合,无圆点) */ .kole-m-radio--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-radio--button .kole-m-radio__icon { display: none; } .kole-m-radio--button.is-checked { border-color: var(--kole-color-brand); background: var(--kole-color-brand-bg); color: var(--kole-color-brand); } /* 状态 disabled:置灰且不可聚焦(原生 disabled) */ .kole-m-radio:disabled { color: var(--kole-color-text-disabled); background: var(--kole-color-card-bg); cursor: not-allowed; } .kole-m-radio:disabled .kole-m-radio__icon { border-color: var(--kole-color-text-disabled); background: var(--kole-color-disabled-bg); } .kole-m-radio--button:disabled { border-color: var(--kole-color-border); background: var(--kole-color-disabled-bg); color: var(--kole-color-text-disabled); } .kole-m-radio:focus-visible { outline: 2px solid var(--kole-color-focus-ring); outline-offset: -2px; }