下拉框响应式关键在于设置 min-width: 0 以解除浏览器默认最小宽度约束,并配合 width: 100%、max-width: 100%、媒体查询、合理 padding/font-size 及真机测试。
HTML 本身不响应视口变化,必须配合 CSS

width: 100% 很容易在小屏上被父容器或表单控件挤压变形,关键是要切断默认的最小宽度约束。
min-width 默认是内容宽度(比如“请选择”文字长度),小屏下会撑破容器,必须显式设为 0 或 auto
display: flex, 可能被强制拉伸或压缩,加 flex-shrink: 0 更稳 的渲染有特殊行为,建议统一用 max-width: 100% 配合 width: 100%
小屏下默认 padding 和 font-size 容易导致文字截断或点击热区过小,不能只调宽度。iOS 系统下 的内边距还受系统字体缩放影响,需单独处理。
max-width: 480px)建议 font-size: 16px 起步,避免被系统缩放进一步压扁padding 建议用 0.4em 0.6em 这类相对单位,比像素值更适配不同设备密度select:focus 样式,所以激活态高亮最好用 outline 而非 border
如果页面 中写了 user-scalable=no 或 maximum-scale=1.0,部分 Android 浏览器会禁用 的原生弹出层,导致点击无反应——这不是 CSS 问题,而是渲染拦截。
是否含 user-scalable 或 maximum-scale
touchmove 并 preventDefault,不要靠 viewport 粗暴限制select 的 z-index 渲染异常,可加 position: relative; z-index: 10; 强制提升层级纯 CSS 在某些场景仍不可靠:比如下拉框嵌套在 collapsible panel 里,展开后宽度计算错误;或页面加载时字体尚未就绪,导致 offsetWidth 取值偏小。这时需 JS 补位。
ResizeObserver 监听父容器尺寸变化,比 window.resize 更精准style.width,优先用 classList.toggle 切换预设 CSS 类requestAnimationFrame),避开浏览器 layout 滞后实际中最容易被忽略的是 min-width: 0 这一行——它不显眼,但缺了就会让所有响应式设置在小屏上失效。另外,别迷信“一次写完全端适配”,真机测试 iOS 和主流安卓机型至少各两台,否则上线后才发现弹出层错位就晚了。