View in English

  • Apple 开发者
    • 入门汇总

    探索“入门汇总”

    • 概览
    • 学习
    • Apple Developer Program

    及时了解最新动态

    • 最新动态
    • 开发者你好
    • 平台

    探索“平台”

    • Apple 平台
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    • App Store

    精选

    • 设计
    • 分发
    • 游戏
    • 配件
    • 网页
    • Home
    • CarPlay 车载
    • 技术

    探索“技术”

    • 概览
    • Xcode
    • Swift
    • SwiftUI

    精选

    • 辅助功能
    • App Intents
    • Apple 智能
    • 游戏
    • 机器学习与 AI
    • 安全性
    • Xcode Cloud
    • 社区

    探索“社区”

    • 概览
    • “与 Apple 会面交流”活动
    • 社区主导的活动
    • 开发者论坛
    • 开源

    精选

    • WWDC
    • Swift Student Challenge
    • 开发者故事
    • App Store 大奖
    • Apple 设计大奖
    • Apple Developer Centers
    • 文档

    探索“文档”

    • 文档库
    • 技术概述
    • 示例代码
    • 《人机界面指南》
    • 视频

    发布说明

    • 精选更新
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • Apple tvOS
    • Xcode
    • 下载

    探索“下载”

    • 所有下载
    • 操作系统
    • 应用程序
    • 设计资源

    精选

    • Xcode
    • TestFlight
    • 字体
    • SF Symbols
    • Icon Composer
    • 支持

    探索“支持”

    • 概览
    • 帮助指南
    • 开发者论坛
    • “反馈助理”
    • 联系我们

    精选

    • 《开发者账户帮助》
    • 《App 审核指南》
    • 《App Store Connect 帮助》
    • 即将实行的要求
    • 协议和准则
    • 系统状态
  • 快速链接

    • 活动
    • 新闻
    • 论坛
    • 示例代码
    • 视频
 

视频

打开菜单 关闭菜单
  • 专题
  • 所有视频
  • 关于

更多视频

  • 简介
  • 概要
  • 转写文稿
  • 代码
  • 重新探索 HTML select 元素

    了解如何全面掌控网页上 select 菜单的样式。HTML select 元素将迎来重大升级,新增 CSS 外观属性值和新的伪元素。了解如何在 select 元素的选项中提供丰富的内容,为 HTML 开启新的可能性。构建与你的设计系统相契合的 select 元素,同时完整保留默认元素的无障碍体验和稳健性。

    章节

    • 0:00 - Introduction
    • 2:32 - Style the select button
    • 3:47 - Customize the drop-down
    • 5:00 - Go beyond text options
    • 6:50 - The selectedcontent element
    • 7:46 - Fallback for unsupported browsers
    • 8:49 - Next steps

    资源

    • WebKit.org - Example website demonstrating Customizable Select
    • WebKit.org - CSS Grid Lanes Field Guide
    • WebKit.org – Report issues to the WebKit open-source project
    • Submit feedback
      • 高清视频
      • 标清视频

    相关视频

    WWDC26

    • 了解 CSS Grid Lanes
    • 面向 Safari 浏览器 27 的 WebKit 新功能
  • 搜索此视频…

    你好 我是Safari工程师Tim 今天 我要带你了解 一种全新的方式 来使用select元素 让它完全可自定义 同时复用语义化 HTML的强大功能 作为Web开发者 你可能为下拉菜单伤透脑筋 要超越默认的 select元素 意味着使用 庞大的JavaScript库 或大量div元素 无障碍功能处理 也会变得复杂 现在 只需HTML和CSS 就有了一种更简单的方式 可自定义select 从Safari 27和Chrome 135开始 你可以使用现有的select元素 将下拉菜单无缝集成 到你的网站中 为了了解它的工作原理 我将在一个网站上 实现可自定义select 这个网站是我为客户搭建的 我一直在与一位摄影师合作 为他搭建作品集 让他们能展示 并出售摄影作品 我的客户希望添加 一些排序和筛选功能 为此 我将使用select元素 对了 我的客户也叫Tim 提醒一下 这是带标签的 select元素的HTML标记 select元素是一个强大的工具 开箱即可提供 基本的无障碍功能 我可以使用键盘 在option元素中导航 它与屏幕阅读器配合良好 无需任何外部库 我将用它来构建 页面上的"排序方式"按钮 这就是原生的 select 顺便说一下 在Apple平台上 它被称为下拉按钮

    原生select的出色之处 在于它与平台上的 其他控件风格一致 为用户提供 熟悉的导航方式 但当我将表单控件 放在照片网站上时 感觉有点格格不入 它无法完全融入 我想要的网站风格 这正是可自定义select 派上用场的地方 我将带你了解 各个自定义步骤 从而获得更符合 我设计风格的select 我首先会为 网站的select按钮设置样式 按钮是select元素的 一部分 点击它可以 显示select菜单 然后 我将使用可自定义select 为该菜单设置样式 菜单用于显示各个选项 最后 我将向你展示 如何突破 经典select元素布局的限制 使用超越纯文本的内容 让我们回到第一个内容

    我将为控件最基本的部分 即按钮设置样式 从头开始 我看到的是原生控件 但现在 我可以使用 新的可自定义select外观 获得一组较小的样式 来匹配我网站的设计风格 第一步是应用—— appearance: base-select 由于我之前在body元素上 设置了font-family: Gill Sans 在body元素上 body字体现在 由select按钮继承 与旁边的标签保持一致 这已经让我 向前迈进了一步 更接近我网站的设计风格 接下来 我将调整 背景、边框和内边距 我很喜欢它与 网站的匹配效果 我想更改的 最后一个细节是箭头 借助可自定义select 我可以使用名为 ::picker-icon的新选择器来修改 我将使用::picker-icon选择器 将content属性设置为新字形 并使用width属性 正确设置其大小 使用:open伪类 我还可以为按钮 设置不同的颜色 当下拉菜单打开时生效 我还更新了箭头 使其与打开状态的文字颜色匹配 这就是我的select 与网站其余部分风格一致 而这只需 几行CSS代码

    现在 我想为下拉菜单本身设置样式 可自定义select让这成为可能 让我来演示 与::picker-icon类似 下拉菜单也有可设置样式的部分 菜单本身可通过select元素 上的::picker(select)设置样式 复选标记可通过option元素 上的::checkmark设置样式 现在让我们添加一些CSS 从空白状态开始 我需要先退出 原生菜单 我可以使用新的 ::picker(select)选择器来实现 并设置 appearance: base-select 现在 准备就绪 首先 我将使用 padding和margin调整间距 接下来处理下拉菜单 的边框和box-shadow

    完美 现在我想突出显示 已选中的选项 让用户清楚地看到 自己的选择 我可以为已选中的选项 设置粗体字 并将其他选项 显示为灰色 最后一步 我将更改 默认的复选标记 通过设置content属性 以及::checkmark选择器 的width属性 与处理 ::picker-icon时类似 能将"排序方式"菜单 设计得如此出色令人惊叹 而且代码量极少

    我还能走多远呢 借助可自定义select 我现在可以超越 简单的文本选项列表 我将通过下一个功能 来展示示例 我的客户以几个类别的 摄影作品最为知名 我想突出展示这些照片 因此 我将添加一种方式 按最受欢迎的类别浏览照片 我决定使用之前的样式 再创建一个select元素 不过 我希望select中有符号 让它更具视觉吸引力 借助可自定义select 我可以放入任何类型的内容 图片、视频、表情符号 随我所好 在这里 我选择在每个option 元素中使用SVG和标签 让用户更轻松地 探索各个类别 我将图片的alt文本留空 因为我不希望屏幕阅读器 重复读出"Flowers"标签两次 由于我移除了复选标记 我希望更突出地 高亮显示已选中的选项 我将使用checked选择器 来更改颜色 这样可以 但我的布局 并不适合我的窗口 符号使下拉菜单变得很长 我需要尝试其他方法 借助可自定义select 比以往任何时候都更容易 为select下拉菜单带来不同布局 同时在下拉菜单中 复用其他CSS功能的强大能力 在这里 我采用了网格布局 Grid-template定义 行数和列数 而gap定义 网格单元格之间的间距 这让我的下拉菜单 呈现出整齐的网格形式 我认为这看起来 更加整洁有序 我已经完成了下拉菜单 但我意识到我希望 将已选中选项的SVG 显示在按钮本身内 我的符号已经 在HTML标记中 为何它们没有 出现在按钮中呢 我需要再做一件事 才能实现这一点

    Select自带一个按钮 人们单击它 来打开下拉菜单 但该按钮只显示文本 我的图片是富内容 我将使用可自定义select 提供的另一个工具 来解决这个问题 即元素 可自定义select现在 允许我替换内置按钮 方法是放置一个button元素 作为select元素 的第一个子元素 由于我的按钮目前为空 所以只看到箭头 在HTML中 将button放入 select元素之前是不允许的 现在它允许我 在按钮内放置自定义内容 例如标签或新的 元素 的特别之处 在于它能显示富内容 即我所选中选项的内容 例如"Everything"标签 旁边的SVG 我想Tim一定会很喜欢 这个菜单的外观和功能

    但我还没有完全完成 我需要检查它在不支持 可自定义select的浏览器中的效果 这正是渐进增强 发挥作用的地方—— 在不支持该功能的浏览器中 仍然可以正常使用 用户会看到原生弹出菜单 这是复用select元素 出色之处之一 而且由于它是语义化元素 我仍然可以获得 内置的无障碍功能

    这太令人兴奋了 我的select元素 完美融入网站的外观和感觉 我甚至添加了一个 有趣的径向颜色选择器 同样完全使用 可自定义select构建 现在 我的客户拥有了 一个美观可排序的照片主页 我还充分利用了 Safari的支持 使用Grid Lanes 来布局我的图片 要了解更多 请查看 "Learn CSS Grid Lanes" Brandon会向你展示 这种新布局方式的工作原理 这些功能即将在 Safari 27中推出 如果你想立即体验 可以下载Safari Technology Preview 或Safari Beta

    别忘了查看webkit.org 上的演示 并尝试设计一些简单样式 使用可自定义select 在你自己的网站上实现 务必在浏览器中 测试你的select 包括不支持该技术的浏览器 以及辅助工具 Webkit.org上有一篇博客文章 介绍了解更多最佳实践的方法 帮助你的界面 为所有人服务 最后 发挥创意 尝试以不同方式实现它 最重要的是 希望你玩得开心 我迫不及待地想看到你在 网站上使用这个功能 感谢观看

    • 1:11 - Basic markup

      <label for="sort-select">Sort by</label>
      <select id="sort-select">
          <option>Newest</option>
          <option>Oldest</option>
      </select>
    • 2:37 - Native form control

      select {
       
      }
    • 2:50 - appearance: base-select

      body {
          font-family: Gill Sans, sans-serif;
      }
      
      select {
          appearance: base-select;
      }
    • 3:07 - Style the select button

      select {
          appearance: base-select;
          background-color: var(--green-10);
          border: none;
          padding: 0.6em 1em;
      }
    • 3:08 - Picker icon

      select:open {
          background-color: var(--green-100);
          color: white;
      }
    • 3:29 - Picker icon open state

      select:open {
          background-color: var(--green-100);
          color: white;
      }
      
      select:open::picker-icon {
          content: url(icons/arrow-white.svg);
      }
    • 4:08 - Picker select

      ::picker(select) {
      
      }
    • 4:21 - Picker select spacing

      ::picker(select) {
          appearance: base-select;
          padding: 4px;
          margin-top: 0.5em;
      }
    • 4:28 - Picker select border and shadow

      ::picker(select) {
          appearance: base-select;
          padding: 4px;
          margin-top: 0.5em;
          border: 1px solid rgba(0,0,0,0.2);
          border-radius: 9px;
          box-shadow: 0 4px 20px rgba(0,0,0,0.2);
      }
    • 4:36 - Custom option styles

      option:checked {
          font-weight: 600;
      }
      
      option:not(:checked) {
          color: #777;
      }
    • 4:42 - Picker option checkmark

      option::checkmark {
          content: url(checkmark.svg);
          width: 0.65em;
      }
    • 5:31 - Images in option

      <option value="flower">
          <img src="flowers.svg" alt="">
          <span class="text">Flowers</span>
      </option>
    • 5:52 - Custom option highlight

      option::checkmark {
          display: none;
      }
      
      option:checked {
          background: #00857e;
          color: white;
      }
    • 6:20 - Grid layout in drop downs

      ::picker(select) {
          display: grid;
          grid-template: 
             1fr 1fr / 1fr 1fr 1fr;
          gap: 1rem;
      }
    • 6:43 - Select with image options

      <select>
          <option value="anywhere">
              <img src="icons/all.svg" alt="">
              <span class="text">Everything</span>
          </option>
          <option value="buildings">
              <img src="icons/buildings.svg" alt="">
              <span class="text">Buildings</span>
          </option>
          <option value="flowers">
              <img src="icons/flower.svg" alt="">
              <span class="text">Flowers</span>
          </option>
          
      </select>
    • 7:11 - Select menu

      <select>
          
          
          
          <option>    </option>
          <option>    </option>
          <option>    </option>
      </select>
    • 7:13 - Select menu button

      <select>
          <button>
          
          </button>
          <option>    </option>
          <option>    </option>
          <option>    </option>
      </select>
    • 7:29 - SelectedContent Element

      <select>
          <button>
              <selectedcontent></selectedcontent>
          </button>
          <option>     </option>
          <option>     </option>
          <option>     </option>
      </select>
    • 0:00 - Introduction
    • Introducing Customizable Select, a way to fully style the HTML Select Element in CSS while keeping its built-in accessibility, available in Safari 27 and Chrome 135. Follow along as a "Sort by" menu and a category picker are built to fit right into a photographer's portfolio site.

    • 2:32 - Style the select button
    • Apply `appearance: base-select` to opt into the new styling model, then customize the button with familiar CSS — fonts, background, border, and padding. Use the new `::picker-icon` pseudo-element to swap the dropdown arrow, and the `:open` pseudo-class to change colors when the menu is showing.

    • 3:47 - Customize the drop-down
    • Style the menu itself by applying `appearance: base-select` to the `::picker(select)` pseudo-element. Adjust spacing, borders, and box-shadow, emphasize the active option with the `:checked` pseudo-class, and replace the default checkmark using `::checkmark`.

    • 5:00 - Go beyond text options
    • Place rich content like SVG icons, images, or labels directly inside

    • 6:50 - The selectedcontent element
    • Replace the built-in select button by placing a

    • 8:49 - Next steps
    • Try the demo on webkit.org, experiment with customizable select in your own projects, and test against assistive tools and non-supporting browsers. To see the Grid Lanes layout used to display the photos, watch "Learn CSS Grid Lanes."

Developer Footer

  • 视频
  • WWDC26
  • 重新探索 HTML select 元素
  • 打开菜单 关闭菜单
    • iOS
    • iPadOS
    • macOS
    • Apple tvOS
    • visionOS
    • watchOS
    打开菜单 关闭菜单
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    打开菜单 关闭菜单
    • 辅助功能
    • 配件
    • Apple 智能
    • App 扩展
    • App Store
    • 音频与视频 (英文)
    • 增强现实
    • 设计
    • 分发
    • 教育
    • 字体 (英文)
    • 游戏
    • 健康与健身
    • App 内购买项目
    • 本地化
    • 地图与位置
    • 机器学习与 AI
    • 开源资源 (英文)
    • 安全性
    • Safari 浏览器与网页 (英文)
    打开菜单 关闭菜单
    • 完整文档 (英文)
    • 部分主题文档 (简体中文)
    • 教程
    • 下载
    • 论坛 (英文)
    • 视频
    打开菜单 关闭菜单
    • 支持文档
    • 联系我们
    • 错误报告
    • 系统状态 (英文)
    打开菜单 关闭菜单
    • Apple 开发者
    • App Store Connect
    • 证书、标识符和描述文件 (英文)
    • 反馈助理
    打开菜单 关闭菜单
    • Apple Developer Program
    • Apple Developer Enterprise Program
    • App Store Small Business Program
    • MFi Program (英文)
    • Mini Apps Partner Program
    • News Partner Program (英文)
    • Video Partner Program (英文)
    • 安全赏金计划 (英文)
    • Security Research Device Program (英文)
    打开菜单 关闭菜单
    • 与 Apple 会面交流
    • Apple Developer Center
    • App Store 大奖 (英文)
    • Apple 设计大奖
    • Apple Developer Academies (英文)
    • WWDC
    阅读最近新闻。
    获取 Apple Developer App。
    版权所有 © 2026 Apple Inc. 保留所有权利。
    使用条款 隐私政策 协议和准则