下拉框该自己回答问题:可定制 select 的五个前后对比
来源:alfy.blog — 2026-10-27
📋 概述
这篇文章的切口不是"终于能给 select 换皮了",而是选项里能装什么。以前 option 只能是一行纯文本,所以一个人做决定所需的信息要么挤进标签,要么被丢掉;现在 option 可以装预览、数字、职位、警告,用户从"读并推算"变成"认出来"。文章给了五组前后对比:字体选择器把每个选项用它自己的字体渲染,于是选项本身就是预览;时区选择器直接显示当地当前时间与昼夜(唯一需要 JS 的演示,靠 Intl.DateTimeFormat);配送方式用网格把到达时间与价格对齐成列;同名同事补上职位与部门,关起列表也能看出选的是谁;需要审批的团队在选项里就带徽章。所有这些"之后"都是原生 select,键盘、按字跳转、表单提交、校验、可访问角色全归浏览器管。唯一要权衡的是手机:原生 select 会调起系统选择器(iOS 滚轮、Android 弹层),可定制版本会自己画列表,所以建议用 @media (hover:hover) and (pointer:fine) 只对有指针的设备启用。
🔑 核心要点
- 真正的变化是选项的容量:option 从一行纯文本变成能装预览、数字、职位、警告的容器
- 认知方式随之改变:用户不再读文字再推算,而是直接从选项里认出来
- 字体选择器把选项变成预览:每个选项用自己的字体渲染,判断的是字形而不是名字
- 对比靠布局解决:配送方式用网格把到达时间与价格对齐成列(grid-template-columns: 1fr 6.5rem 4rem)
- 消歧与预警前置:同名同事补职位与部门,需要审批的团队直接在选项里标注
- 本质仍是原生控件:键盘操作、按字跳转、校验、value 与可访问角色都留在浏览器;代价是手机丢系统选择器,建议只对精细指针设备启用 base-select
💡 金句
找到你的产品里让人最犹豫的那个 select,问清楚他们真正想弄明白的是什么,把答案放进选项里。其余的都拿掉。
👍 0
👎 0
← 返回 Lobsters 首页