<menu>:ユーザーが操作可能なメニューを提供する要素・HTMLタグの解説

取り扱い 標準仕様
カテゴリー フロー・コンテンツ
1個以上の<li>がある場合、パルパブル・コンテンツ
親にできる要素 フロー・コンテンツを受け入れる要素
子にできる要素 0個以上の<li><script><template>
対応ブラウザ caniuseで確認

<menu>タグの解説

<menu>は、ユーザーが操作可能なメニューを提供する場合に使用します。メニューは順序のないリストという意味で<ul>と同じですが、HTMLの仕様書では別の扱いとなっています。

メニュー項目は<li>を使って作成します。マークアップの基本はリスト要素である<ol><ul>と変わりありません。文章に対して何らかの文脈を持つ項目を並べたい場合はリストを、画面の中で操作可能な機能の項目を提供したい場合はメニューを採用します。

かつてtype属性を用いてコンテキストメニューを提供する機能も開発されていましたが、廃止されました。それに伴い、コンテキストメニューのパーツとして用意された<menuitem>も非推奨の扱いになっています。

<menu>タグの特徴

  • レイアウトの初期値はブロックレベルです。文章の改行に影響を与えます。
  • 視覚的な効果は特定されていません。ブラウザの実装状況に依存します。
  • 同一のページ内に複数使うことができます。コンテキストメニューの場合、この要素自体を入れ子にすることも許可されています。

<menu>要素に指定できる属性

type(廃止)
メニューの形式を選択します。現状、選べるのは二種類です。
  • toolbar:ユーザーが操作可能なツールバーを提供します。基本的には<li>で項目を作成します。
  • context:画面上の要素で起動できるポップアップメニューを提供します。インターフェイスはOSの右クリックメニューのようなものを想定します。
グローバル属性
全てのHTML要素に指定できる共通の属性です。詳細は一覧表で解説します。
イベントハンドラ
全てのHTML要素に指定できるコンテンツ属性です。

<menu>要素の使い方とサンプルコード

この要素の最も基本的な書き方は以下の通りです。子要素として配置できるのは、<li><script><template>のいずれかになります。


<menu>
	// ユーザーが操作可能な機能
</menu>

以下のようにページの中で動作するボタン類をまとめる場合、<ol><ul>要素よりもメニューの方が相応しいと言えます。


<menu>
	<li><button onclick="play()">再生</button></li>
	<li><button onclick="stop()">停止</button></li>
	<li><button onclick="prev()">前の曲</button></li>
	<li><button onclick="next()">次の曲</button></li>
	<li><button onclick="paus()">一時停止</button></li>
</menu>

スタイルシートを使ってオーディオの操作パネルのようなものを再現できます。提供するサービスの内容によってボタンの名前を変えて、期待する結果をJavaScriptで返すように設定すれば、実際の環境でも使用できます。


.sample-block {
	padding: 1rem;
	border-radius: 5px;
	background-color: #333;
}
.sample-block menu {
	display: flex;
	padding: 0;
	margin: 0;
	list-style-type: "";
}
.sample-block menu li {
	flex-grow: 1;
}
.sample-block menu button {
	inline-size: 100%;
	cursor: pointer;
}

<menu>に関連するHTMLタグ

リストを作成する要素
<ul> 順序のないリストを作成する
<ol> 順序のあるリストを作成する
<dl> 定義リストを作成する
<dt> 定義リストの用語を指定する
<dd> 定義リストの説明文を記載する
<li> リストの項目を作成する
<menu> ユーザーが操作可能なメニューを提供する
<menuitem> コンテキストメニューの項目を作成する