HTML怎么做下拉菜单_html select下拉菜单实现做法【入门】的重点在于把前置条件、操作顺序和容易误判的地方分清楚。
最简可用的<select>菜单需用<select>包裹<option>,设name属性确保提交,首项value为空作提示,disabled和selected为布尔属性不可赋值,样式受限于浏览器原生限制。
直接用 <select> 就能实现基础下拉菜单,不需要 JS 或 CSS 也能工作;但想控制样式、支持搜索、多选或禁用某项,就得知道哪些属性管用、哪些浏览器不认。
核心是 <select> 包裹若干 <option>,value 决定提交值,text 是用户看到的内容:
<select name="city"> <option value="">请选择城市</option> <option value="bj">北京</option> <option value="sh">上海</option> <option value="gz">广州</option></select>
name 必须设,否则表单提交时这个字段不会被发送<option> 设空 value 是常见做法,避免用户没选就提交了默认项selected 属性时,浏览器默认选中第一个 <option>
这两个布尔属性不是“开关式”的字符串,写上就生效,不写就没有;不能写成 disabled="false" —— 这样反而会禁用。
<select disabled>,所有选项都不可点,也不会提交值<option disabled>暂未开通</option>,它会变灰且不可选,但不影响其他项<option selected>上海</option>,注意只能有一个 selected,多个时以最后一个为准selected 和 value 没有绑定关系,哪怕 value 是空,只要写了 selected 就会被默认选中原生 <select> 的箭头、边框、下拉面板几乎无法用 CSS 统一控制:Chrome 允许改 background 和 padding,Firefox 对 appearance 支持有限,Safari 则基本锁死内部结构。
border、background-color
::after 伪元素盖箭头、option 的背景色(仅部分 Chrome 支持)、下拉面板位置或滚动条样式<div> 列表),但会失去原生可访问性和键盘导航支持<select> 天然支持屏幕阅读器和 Tab 键切换,手写下拉容易漏掉 role 和键盘事件(如 ArrowDown)multiple 让用户按住 Ctrl(或 Cmd)多选,size 控制可见行数——两者常一起用,但行为差异很大:
multiple 后,提交的不再是单个值,而是 name 对应的值数组(例如 city=bj&city=sh)size="3" 会让下拉变成“可见 3 行”的列表框,不用点开就能看到选项,适合选项少且需对比的场景size 值大于选项总数时,空白区域不可交互;等于 1 时退化为普通下拉(但依然支持多选)multiple 支持混乱:iOS Safari 弹出的是单选界面,Android Chrome 可能用长按模拟多选,实际体验差真正麻烦的从来不是写几行 HTML,而是当产品说“这个下拉要带搜索、高亮关键词、支持拼音首字母跳转”时,你得立刻意识到:原生 <select> 做不到,得换方案,而且得提前跟设计对齐交互边界和兼容性底线。