概要
- カテゴリー
- 配置できる場所
-
- 上記カテゴリーの要素が置ける場所。
- 内容モデル
-
- 1個以下の
legend
要素。 - 上記に続いて、Flow content
- 必須とはされてないが、Form-associated elementを子孫に含むことが想定されている。
- 1個以下の
- 属性
- HTML構文におけるタグの省略
-
- 省略不可。
- WAI-ARIA
-
- デフォルト
role
は、group
。デフォルトrole
をrole
属性値に指定することは、推奨されない。 - デフォルト
role
以外では、radiogroup
、presentation
、none
を指定可。 disabled
属性が指定されている場合は、aria-disabled
属性を指定すべきではない。disabled
属性が指定されている場合は、aria-disabled
属性値にfalse
を指定してはならない。
- デフォルト
- 視覚系ブラウザのデフォルトとして期待されるCSS
-
fieldset { display: block; margin-inline: 2px; border: groove 2px ThreeDFace; padding-block: 0.35em 0.625em; padding-inline: 0.75em; min-inline-size: min-content; }
- 視覚系ブラウザにおいて期待されるレンダリング
-
legend
要素のボックスは、fieldset
要素のボックスの始端側のborder-top
に垂直方向における中央揃えで重ねる形で配置される。- 重なっている
legend
要素のborder
領域の範囲内は、fieldset
要素のborder-top
は描画されない。 legend
要素のボックスの幅は、それが指定されていない場合には、その内容を表示できる最短幅とする。fieldset
要素のmargin-top
は、重なっているlegend
要素のボックスの上端があたかもfieldset
要素のborder
領域の上端であるかのように計算されて構成される。fieldset
要素の内容のうち、legend
要素以外の部分は、fieldset
匿名内容ボックスを構成する。fieldset
匿名内容ボックスは、display
の計算値がgrid
又はinline-grid
の場合は、{display: grid;
}display
の計算値がflex
又はinline-flex
の場合は、{display: flex;
}- その他の場合は、{
display: flow-root;
}
fieldset
要素のpadding
が抜き取られて、fieldset
匿名内容ボックスのpadding
に移し替えられたかのように描画される。- 下記の「
fieldset
要素のレイアウト図」も参照。
- 制約検証
-
disabled
属性があれば、子孫のフォームコントロール(ただし、legend
要素の子孫を除く)は制約検証の対象から除外。
- 意味・用法
-
グループ化されたフォームコントロールのセットを表す。
アクセシビリティ関連
- 特に、ラジオボタングループや関連する複数のチェックボックスコントロールを当該要素でグループ化し、
legend
要素でそのラベルや説明を示すことは、アクセシビリティを向上させる(Techniques for WCAG 2.1 : H71)。
私見・補足
フォームコントロールのグループ化以外の目的で(特に、見た目を目的として)使用するのは、間違いである。
disabled
の状態のときのレンダリングについては、HTML Living Standardには明記がないようなのだが、HTML4.01仕様のフォーム関連の規定では、ユーザーエージェントによるものとされていたので、それに基づいて実装しているブラウザが多いと思われる。
表示確認
- ソース1
-
<fieldset> <legend>ここがlegend</legend> <div><label>テキストボックス<input type="text" value="サンプル" /></label></div> <div><label>チェックボックス<input type="checkbox" value="typeがcheckbox" /></label></div> </fieldset>
- 表示結果1
- ソース2:
disabled
属性を指定 -
<form action="javascript:return false;"> <div>legend要素内の「ここを利用」のチェックボックスには、チェックするとfieldset要素のdisabledが解除されるスクリプトが組み込まれている(チェックを外すと再度disabledになる)。</div> <fieldset name="field1" disabled="disabled"> <legend> <label><input type="checkbox" name="kaijo" onchange="form.field1.disabled = !checked" />ここを利用</label> </legend> <div><label>テキストボックス<input type="text" name="text" value="サンプル" /></label></div> <div><label>チェックボックス<input type="checkbox" name="check" value="typeがcheckbox" /></label></div> </fieldset> </form>
- 表示結果2