源本科技 | 码上会

HTML 中的 select

2026/02/08
27
0

学习目标

  • 掌握 <select><option> 的基本用法

  • 理解常用属性(如 multiplerequiredsize)的作用

  • 能够实现带占位提示、分组和样式的下拉菜单

  • 遵循可访问性与用户体验的最佳实践


什么是 <select>

<select> 是 HTML 中用于创建下拉选择列表的表单元素。用户可以从预定义的选项中选择一个或多个值。

它必须与 <option> 标签配合使用,每个 <option> 代表一个可选项。

基本结构

<label for="fruits">选择一种水果:</label>
<select id="fruits" name="fruits">
  <option value="apple">苹果</option>
  <option value="banana">香蕉</option>
  <option value="cherry">樱桃</option>
</select>

关键点

  • id 用于与 <label> 关联,提升可访问性

  • name 用于在表单提交时标识该字段

  • value 是实际提交给服务器的值,而标签文本是用户看到的内容


常用属性

属性

说明

示例

autofocus

页面加载时自动聚焦到该下拉框

<select autofocus>

disabled

禁用下拉框,用户无法操作

<select disabled>

form

指定该控件所属的 <form>(通过 id 关联)

<select form="myForm">

multiple

允许按住 Ctrl/Cmd 多选

<select multiple>

name

表单字段名称,用于数据提交

<select name="color">

required

提交前必须选择一个有效选项

<select required>

size

显示可见选项数量(非下拉样式)

<select size="4">

当使用 multiple 时,建议同时设置 size 以提升多选体验。


实用示例

基础下拉菜单

<form>
  <label for="colors">选择颜色:</label>
  <select id="colors" name="colors">
    <option value="red">红色</option>
    <option value="green">绿色</option>
    <option value="blue">蓝色</option>
  </select>
</form>

带样式的

<style>
  select {
    width: 160px;
    padding: 6px;
    border: 1px solid #ccc;
    border-radius: 4px;
    font-family: "Microsoft YaHei", sans-serif;
    font-size: 14px;
  }
  label {
    margin-right: 8px;
    font-weight: bold;
  }
</style>

<form>
  <label for="cars">选择汽车品牌:</label>
  <select id="cars" name="cars">
    <option value="volvo">沃尔沃</option>
    <option value="saab">萨博</option>
    <option value="mercedes">奔驰</option>
    <option value="audi">奥迪</option>
  </select>
</form>

带占位提示的

<style>
  option[disabled] {
    color: #999;
  }
  select {
    background-color: #fafafa;
    padding: 6px;
    border: 1px solid #aaa;
    border-radius: 5px;
  }
</style>

<form>
  <label for="fruits">选择一种水果:</label>
  <select id="fruits" name="fruits">
    <option value="" disabled selected>请选择水果</option>
    <option value="apple">苹果</option>
    <option value="banana">香蕉</option>
    <option value="cherry">樱桃</option>
  </select>
</form>

占位符技巧

  • value="":确保未选择时提交空值

  • disabled:防止用户选中该提示项

  • selected:默认显示提示文字


高级用法:选项分组

使用 <optgroup> 对选项进行逻辑分组,提升长列表的可读性:

<select name="programming-languages">
  <optgroup label="前端语言">
    <option value="html">HTML</option>
    <option value="css">CSS</option>
    <option value="javascript">JavaScript</option>
  </optgroup>
  <optgroup label="后端语言">
    <option value="python">Python</option>
    <option value="java">Java</option>
    <option value="go">Go</option>
  </optgroup>
</select>

分组标题(label)不可选,仅作视觉区分。


最佳实践

始终关联 <label>

使用 for + id 确保点击标签可聚焦下拉框,提升无障碍体验:

<label for="country">国家/地区:</label>
<select id="country" name="country">...</select>

提供有意义的默认选项

避免默认选中某个业务选项。使用“请选择”类占位符更安全:

<option value="" disabled selected>请选择国家</option>

合理使用 required

若该字段必填,添加 required 属性防止空提交:

<select name="category" required>
  <option value="">— 请选择分类 —</option>
  ...
</select>

控制选项数量

超过 10–15 个选项时,考虑:

  • 使用 <optgroup> 分组

  • 或改用带搜索功能的自定义选择器(如 Select2、Ant Design Select)

语义化 value

value 应使用机器可读的标识符(如 cnus),而非中文:

<!-- 推荐 -->
<option value="cn">中国</option>
<option value="us">美国</option>

<!-- 不推荐 -->
<option value="中国">中国</option>

注意事项

  • 移动端体验:在手机上,<select> 通常会调起原生选择器,样式由系统控制,无法完全自定义。

  • 样式限制:部分浏览器(如 Safari)对下拉箭头图标的自定义支持有限,需谨慎覆盖默认样式。

  • 多选交互multiple 模式在桌面端需按住 Ctrl/Cmd 才能多选,普通用户可能不熟悉,应提供明确提示。


总结

<select> 是构建表单不可或缺的元素,正确使用它能显著提升用户体验与可访问性。核心要点包括:

  • <label> 关联提升无障碍支持

  • 提供清晰的占位提示

  • 利用 <optgroup> 组织复杂选项

  • 优先使用语义化的 value

  • 在必要时通过 CSS 优化外观

遵循这些实践,你将能创建既美观又实用的下拉选择控件。


思考题

  1. 为什么在 <select> 中使用空字符串 "" 作为占位选项的 value 是一个好习惯?

  2. 如果一个下拉菜单包含 50 个国家选项,直接使用 <select> 是否合适?有哪些替代方案?

  3. 如何确保 <select multiple> 在表单提交时能被后端正确接收?(提示:字段名写法)