View in English

  • Apple Developer
    • 今すぐ始める

    「今すぐ始める」を詳しく見る

    • 概要
    • 学ぶ
    • Apple Developer Program

    最新情報

    • 最新ニュース
    • Hello Developer
    • プラットフォーム

    プラットフォームを詳しく見る

    • Appleプラットフォーム
    • iOS
    • iPadOS
    • macOS
    • tvOS
    • visionOS
    • watchOS
    • App Store

    特集

    • デザイン
    • 配信
    • ゲーム
    • アクセサリ
    • Web
    • Home
    • CarPlay
    • テクノロジー

    テクノロジーを詳しく見る

    • 概要
    • Xcode
    • Swift
    • SwiftUI

    特集

    • アクセシビリティ
    • App Intent
    • Apple Intelligence
    • ゲーム
    • 機械学習とAI
    • セキュリティ
    • Xcode Cloud
    • コミュニティ

    コミュニティを詳しく見る

    • 概要
    • 「Appleに相談」イベント
    • コミュニティによるイベント
    • デベロッパフォーラム
    • オープンソース

    特集

    • WWDC
    • Swift Student Challenge
    • デベロッパストーリー
    • App Store Awards
    • Apple Design Awards
    • Apple Developer Center
    • ドキュメント

    ドキュメントを詳しく見る

    • ドキュメントライブラリ
    • テクノロジー概要
    • サンプルコード
    • ヒューマンインターフェイスガイドライン
    • ビデオ

    リリースノート

    • 注目のアップデート
    • iOS
    • iPadOS
    • macOS
    • watchOS
    • visionOS
    • tvOS
    • Xcode
    • ダウンロード

    ダウンロードを詳しく見る

    • すべてのダウンロード
    • オペレーティングシステム
    • アプリ
    • デザインリソース

    特集

    • Xcode
    • TestFlight
    • フォント
    • SF Symbols
    • Icon Composer
    • サポート

    サポートを詳しく見る

    • 概要
    • ヘルプガイド
    • デベロッパフォーラム
    • フィードバックアシスタント
    • お問い合わせ

    特集

    • アカウントヘルプ
    • App Reviewガイドライン
    • App Store Connectヘルプ
    • 近日導入予定の要件
    • 契約およびガイドライン
    • システムステータス
  • クイックリンク

    • イベント
    • ニュース
    • Forum
    • サンプルコード
    • ビデオ
 

ビデオ

メニューを開く メニューを閉じる
  • コレクション
  • すべてのビデオ
  • 利用方法

その他のビデオ

  • 概要
  • Summary
  • トランスクリプト
  • コード
  • HTMLのselect要素の新たな可能性

    Web上で選択メニューのスタイルを自在にコントロールする方法を学びましょう。HTMLのselect要素は、CSSのappearanceの新しい値、および新しい擬似要素によって大幅にアップグレードされます。HTMLの新機能によって、selectのオプションにリッチコンテンツを含める新たな可能性がもたらされます。標準要素のアクセシビリティと堅牢性を維持しながら、デザインシステムに合わせた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
      • HDビデオ
      • SDビデオ

    関連ビデオ

    WWDC26

    • CSSグリッドレーンについて
    • Safari 27用WebKitの新機能
  • このビデオを検索

    こんにちは SafariエンジニアのTimです。 今日は、select要素を まったく新しい方法で 完全にカスタマイズ可能にしながら セマンティックHTMLの 利点も活かす方法を紹介します。 Webデベロッパなら ドロップダウンに悩んだことがあるはずです。 デフォルトのselect要素以上の ことをするためには 重いJavaScriptライブラリを 使うか 大量のdiv要素が必要でした。 アクセシビリティの対応も 難しい問題でした。 HTMLとCSSだけで実現できる よりシンプルな方法があります。 Customizable selectです。 Safari 27とChrome 135以降、 既存のselect要素を使って ドロップダウンをWebサイトに シームレスに組み込めます。 仕組みを見るために customizable selectを 実装してみます。 クライアントのために 制作中のWebサイトへの導入です。 写真家のポートフォリオサイトを 一緒に制作しています。 写真を展示・販売できる サイトです。 クライアントはいくつかの 並び替えとフィルタ機能を select要素を使って 実装したいと考えています。 ちなみに、クライアントの名前も Timといいます。 改めて確認すると、これがラベル付き select要素のHTMLマークアップです。 select要素は強力なツールで 基本的なアクセシビリティが 最初から備わっています。 キーボードでoption要素を ナビゲートでき スクリーンリーダーとも 外部ライブラリなしで連携できます。 これを使って、ページに ボタンを作成します。 これがネイティブのselectです。 ちなみに Appleのプラットフォームでは 「プルダウンボタン」と呼ばれます。

    ネイティブselectの優れた点は プラットフォーム上の 他のコントロールと統一されており ユーザーが使い慣れた 操作感で利用できることです。 しかし、フォームコントロールを フォトサイトに配置すると 少し浮いた印象になります。 サイトのデザインに うまく溶け込んでいません。 そこでcustomizable selectの 出番です。 カスタマイズのさまざまな ステップをご紹介します。 デザインに合った selectを作っていきます。 まず、サイト上の selectボタンのスタイルを整えます。 ボタンはselect要素の部分で クリックするとselectメニューが 表示されます。 次に、customizable selectで そのメニューをスタイリングします。 オプションが表示される部分です。 最後に、従来のselect要素の レイアウトから 脱却する方法を紹介します。 テキスト以外のコンテンツを 使った表現です。 最初の項目に戻りましょう。

    コントロールの最も基本的な部分、 ボタンのスタイルを設定します。 ゼロから始めると ネイティブコントロールが表示されます。 新しいcustomizable selectの appearanceを使うと より少ないスタイルセットで サイトのデザインに合わせた 変更が可能です。 最初のステップは `appearance: base-select`を適用します。 以前、bodyに `font-family: Gill Sans`を 設定していたので bodyのフォントが selectボタンに継承され 隣のラベルと揃います。 これだけでもサイトの デザインに一歩近づきました。 着実に近づいています。 次のステップとして、背景・ボーダー・ パディングを調整します。 サイトによく馴染んでいます。 最後にもう一つ、矢印を 変更したいと思います。 Customizable selectでは `::picker-icon`という新しい セレクタで変更できます。 `::picker-icon`セレクタを使って contentプロパティに新しいグリフを設定し widthでサイズを 正しく指定します。 `:open`擬似クラスを使うと ドロップダウンメニューが開いた状態で ボタンの色を 別の色に設定することも できます。 open状態のテキスト色に合わせて 矢印も更新しました。 サイトの他の部分に 馴染んだselectができました。 たった数行のCSSで 実現できました。

    今度はドロップダウン自体を スタイリングします。customizable selectで可能です 方法をご紹介します。 `::picker-icon`と同様に、ドロップダウン メニューにもスタイル可能な部分があります。 メニュー自体はselect要素の `::picker(select)`でスタイリングでき チェックマークはoption要素の `::checkmark`で変更できます。 CSSを追加しましょう。 クリーンな状態から始めるため まずネイティブメニューを 無効にする必要があります。 新しい`::picker(select)` セレクタを使って `appearance: base-select`を 設定します。 これで準備完了です。 まず、パディングとマージンで 間隔を整えます。 ドロップダウンのボーダーと box-shadowを設定します。

    完璧です 次に、選択中のオプションを 強調表示して ユーザーが何を選んだか 明確にします。 チェック済みのオプションに 太字フォントを設定し 他のオプションはグレーアウトします。 最後のステップとして デフォルトのチェックマークを変更します。 content CSSプロパティを設定し `::checkmark`セレクタに widthを指定します。 `::picker-icon`で行ったのと 同様の方法です。 わずかなコードで メニューを ここまでスタイリングできました。

    さらに何ができるでしょうか。 Customizable selectでは テキストで表示するオプションの シンプルなリストを超えることができます。 次の機能で例を見てみましょう。 クライアントはいくつかのカテゴリの 写真で知られており その写真を目立たせたいと 考えています。 そこで、人気カテゴリ別に 写真を閲覧できる機能を追加します。 先ほどのスタイリングを使って もう一つselect要素を作成します。 ただし、より視覚的に 魅力的なシンボル付きにしたいです。 Customizable selectでは あらゆる種類のコンテンツを使えます。 画像、動画、絵文字など 何でも組み込めます。 今回は各option要素の内側に SVGとラベルを配置して ユーザーがカテゴリを より直感的に探せるようにします。 画像のalt属性は 空にしました。 スクリーンリーダーで「Flowers」が 2度読み上げられないようにするためです。 チェックマークを削除したので 選択中のオプションを より目立つ形で強調します。 `checked`セレクタを使って 色を変更します。 これで動作しますが、レイアウトが ウィンドウに収まりきりません。 シンボルのせいでドロップダウンが 縦長になっています。 別の方法を試す必要があります。 Customizable selectでは selectのドロップダウンに さまざまなレイアウトを 他のCSS機能を活用しながら これまで以上に簡単に導入できます。 ここではグリッドレイアウトを 採用しました。 `grid-template`で 行数と列数を定義し `gap`でグリッドセル間の 間隔を指定します。 これでドロップダウンが きれいなグリッドになります。 より整理された見た目に なりました。 ドロップダウンは完成しましたが 選択中のオプションのSVGを ボタン自体に 表示させたくなりました。 シンボルはすでに HTMLマークアップにあります。 なぜボタンに表示されない のでしょうか。 これを実現するには もう一つ作業が必要です。

    selectにはボタンがあります。 ユーザーがクリックして ドロップダウンを開く部分です。 しかしそのボタンには テキストしか表示されません。 画像はリッチコンテンツです。 Customizable selectが提供する もう一つのツールを使って この問題を解決します。 ``要素です。 Customizable selectでは 組み込みボタンを置き換えられます。 button要素を select要素の最初の子として 配置するだけです。 現時点ではボタンが空なので 矢印だけが表示されます。 select要素内にbuttonを入れることは 以前はHTMLで許可されていませんでしたが 今では、ボタン内に カスタムコンテンツを配置できます。 ラベルや新しい`` 要素なども使えます。 ``の特徴は 選択中のオプションの リッチコンテンツを表示できることです。 「Everything」ラベルの隣にある SVGのように表示されます。 このメニューの見た目と動作を Timはきっと気に入るでしょう。

    ただ、まだ完成では ありません。 Customizable selectに対応していない ブラウザでの表示を確認する必要があります。 ここでプログレッシブ エンハンスメントが役立ちます。 この機能に対応していない ブラウザでも利用できます。 ユーザーにはネイティブの ポップアップが表示されます。 これがselect要素を再利用する メリットの一つです。 セマンティック要素であるため 組み込みのアクセシビリティ機能も そのまま使えます。

    素晴らしい結果です select要素がサイトの 見た目に自然に馴染みました。 楽しい放射状カラーピッカーも 追加しました。 こちらもcustomizable selectだけで 作られています。 クライアントの写真を美しく 整理して表示できるようになりました。 SafariのGrid Lanesサポートも 活用して 画像のレイアウトを 整えました。 詳しくは「Learn CSS Grid Lanes」を ご覧ください。 Brandonがこの新しい レイアウト手法を解説しています。 これらの機能はSafari 27で 利用可能になります。 今すぐ試したい場合は Safari Technology PreviewまたはSafari Betaをダウンロードしてください。

    webkit.orgのデモもぜひ お試しください。 シンプルなものからでいいので 自分のWebサイトでcustomizable selectを試してみてください。 この技術に対応していない ブラウザや 支援技術でのselectの 動作確認も忘れずに。 webkit.orgのブログ記事では ベストプラクティスについて 誰もが使えるインターフェースを 作るための方法を詳しく解説しています。 創造性を発揮して さまざまな実装方法を試してみてください。 何より、楽しんでいただければ幸いです 皆さんがこの機能を Webサイトで活用する姿を楽しみにしています。 ご視聴ありがとうございました

    • 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
    • tvOS
    • visionOS
    • watchOS
    Open Menu Close Menu
    • Swift
    • SwiftUI
    • Swift Playground
    • TestFlight
    • Xcode
    • Xcode Cloud
    • SF Symbols
    メニューを開く メニューを閉じる
    • アクセシビリティ
    • アクセサリ
    • Apple Intelligence
    • App Extension
    • App Store
    • オーディオとビデオ(英語)
    • 拡張現実
    • デザイン
    • 配信
    • 教育
    • フォント(英語)
    • ゲーム
    • ヘルスケアとフィットネス
    • アプリ内課金
    • ローカリゼーション
    • マップと位置情報
    • 機械学習とAI
    • オープンソース(英語)
    • セキュリティ
    • SafariとWeb(英語)
    メニューを開く メニューを閉じる
    • 英語ドキュメント(完全版)
    • 日本語ドキュメント(一部トピック)
    • チュートリアル
    • ダウンロード
    • フォーラム(英語)
    • ビデオ
    Open Menu Close Menu
    • サポートドキュメント
    • お問い合わせ
    • バグ報告
    • システム状況(英語)
    メニューを開く メニューを閉じる
    • Apple Developer
    • App Store Connect
    • Certificates, IDs, & Profiles(英語)
    • フィードバックアシスタント
    メニューを開く メニューを閉じる
    • 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(英語)
    Open Menu Close Menu
    • Appleに相談
    • Apple Developer Center
    • App Store Awards(英語)
    • Apple Design Awards
    • Apple Developer Academy(英語)
    • WWDC
    最新ニュースを読む。
    Apple Developerアプリを入手する。
    Copyright © 2026 Apple Inc. All rights reserved.
    利用規約 プライバシーポリシー 契約とガイドライン