1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
|
---
title: '<details>: 詳細折りたたみ要素'
slug: Web/HTML/Element/details
tags:
- Disclosure Box
- Disclosure Widget
- Element
- HTML
- HTML interactive elements
- Reference
- Web
- details
translation_of: Web/HTML/Element/details
---
<div>{{HTMLRef}}</div>
<p><span class="seoSummary"><strong>HTML の詳細折りたたみ要素</strong> (<strong><code><details></code></strong>) は、ウィジェットが「開いた」状態になった時のみ情報が表示される折りたたみウィジェットを作成します。</span>概要やラベルは {{HTMLElement("summary")}} 要素を使用して提供する必要があります。</p>
<p>折りたたみウィジェットはふつう、回転して開閉状態を示す小さな三角形を使用し、その隣のラベルと共に画面上に表現されます。 <code><summary></code> 要素の内容が折りたたみウィジェットのラベルとして使用されます。</p>
<div>{{EmbedInteractiveExample("pages/tabbed/details.html", "tabbed-shorter")}}</div>
<div class="note">
<p><strong>メモ:</strong> ウィジェットの開閉を回転する (ねじる) 三角形で表すのが一般的な使い方なので、このウィジェットはツイスティー (twisties) と呼ばれることがあります。</p>
</div>
<p><code><details></code> ウィジェットは2つの状態のうち1つを取ります。既定の<em>閉じた</em>状態は <code><summary></code> を使用して指定されたラベル文字列 (または{{Glossary("user agent", "ユーザーエージェント")}}が定義した既定の文字列) とウィジェット自身による三角形だけを表示します。これは次のように表示されます。</p>
<figure style="margin: 1em 0; padding: 1em; border: 1px solid black; box-shadow: 0 0 4px 1px black; width: 640px;"><img alt="閉じた <details> ウィジェットのスクリーンショット。黒い左向きの三角形が「System Requirements」のテキストの右側にあります。" src="details-closed.png"></figure>
<p>ここでは既定の閉じた状態であり、折りたたみウィジェットと "System Requirements" というラベルが表示されています。ユーザーがこのウィジェットをクリックするか、フォーカスしてスペースバーを押すと、「ねじれて」開き、コンテンツが展開されて次のようになります。</p>
<figure style="margin: 1em 0; padding: 1em; border: 1px solid black; box-shadow: 0 0 4px 1px black; width: 640px;"><img alt="開いた <details> ウィジェットのスクリーンショット。三角形は下向きになり、「System Requirements」とは何かの詳細説明が表示されています。” means is shown." src="details-open.png"></figure>
<p>ここから、 CSS を使用して折りたたみウィジェットの外見を変更することができ、また {{htmlattrxref("open", "details")}} の値を設定したり削除したりすることにより、プログラムから開いたり閉じたりすることができます。</p>
<p>ウィジェットが閉じている時、折りたたみの三角形と概要が表示できるだけの高さしかありません。ウィジェットが開くと、要素は中に含まれた詳細が表示できるだけの大きさに拡大されます。</p>
<div class="note">
<p><strong>メモ:</strong> 残念なことに、現時点では開いたり閉じたりする間のアニメーションを行う組み込みの方法はありません。</p>
</div>
<p>完全な標準互換の実装では、 CSS の <code>{{cssxref("display")}}: list-item</code> が自動的に {{HTMLElement("summary")}} に適用されます。この表示方法はカスタマイズすることができます。詳しくは{{anch("Customizing the disclosure widget", "折りたたみウィジェットのカスタマイズ")}}を参照してください。</p>
<table class="properties">
<tbody>
<tr>
<th scope="row"><a href="/ja/docs/Web/Guide/HTML/Content_categories">コンテンツカテゴリ</a></th>
<td><a href="/ja/docs/Web/Guide/HTML/Content_categories#flow_content">フローコンテンツ</a>、区分化ルート、対話型コンテンツ、知覚可能コンテンツ</td>
</tr>
<tr>
<th scope="row">許可されている内容</th>
<td>1つの {{HTMLElement("summary")}} 要素と、それに続く <a href="/ja/docs/Web/Guide/HTML/Content_categories#flow_content">フローコンテンツ</a></td>
</tr>
<tr>
<th scope="row">タグの省略</th>
<td>{{no_tag_omission}}</td>
</tr>
<tr>
<th scope="row">許可されている親要素</th>
<td><a href="/ja/docs/Web/Guide/HTML/Content_categories#flow_content">フローコンテンツ</a>を受け入れるすべての要素</td>
</tr>
<tr>
<th scope="row">暗黙的な ARIA ロール</th>
<td>{{ARIARole("group")}}</td>
</tr>
<tr>
<th scope="row">許可されている ARIA ロール</th>
<td>なし</td>
</tr>
<tr>
<th scope="row">DOM インターフェイス</th>
<td>{{domxref("HTMLDetailsElement")}}</td>
</tr>
</tbody>
</table>
<h2 id="Attributes">属性</h2>
<p>この要素は<a href="/ja/docs/Web/HTML/Global_attributes">グローバル属性</a>を持ちます。</p>
<dl>
<dt>{{htmlattrdef("open")}}</dt>
<dd>
<p>この論理属性は、現在 — つまり <code><details></code> 要素の内容 — が現在表示されているかどうかを示します。この属性がある場合は詳細が表示され、この属性がない場合は非表示になります。既定では、この属性は存在しないため、詳細は表示されません。</p>
<p class="note"><strong>注:</strong> 詳細を非表示にするには、この属性を完全に削除する必要があります。この属性は論理属性なので、 <code>open="false"</code> では詳細が表示状態になります。</p>
</dd>
</dl>
<h2 id="Events">イベント</h2>
<p>HTML で対応している通常のイベントに加えて、 <code><details></code> 要素は {{event("toggle")}} イベントに対応しており、開閉状態が変化するたびに <code><details></code> 要素が呼び出されます。イベントは状態が変化した<em>後</em>に送信され、もしブラウザーがイベントを送信する前に状態が2回以上変化しても、イベントは合体して1回しか送信されません。</p>
<p>ウィジェットの状態が変化したことを検出するために、 <code>toggle</code> イベントをリスンすることができます。</p>
<pre class="brush: js">details.addEventListener("toggle", event => {
if (details.open) {
/* 要素が開いた方に切り替わった */
} else {
/* 要素が閉じた方に切り替わった */
}
});</pre>
<h2 id="Examples">例</h2>
<h3 id="A_simple_disclosure_example">単純な折りたたみの例</h3>
<p>この例では <code><details></code> 要素を <code><summary></code> 付きで表示します。</p>
<pre class="brush: html"><details>
<summary>System Requirements</summary>
<p>Requires a computer running an operating system. The computer
must have some memory and ideally some kind of long-term storage.
An input device as well as some form of output device is
recommended.</p>
</details></pre>
<p>この HTML の結果は次のようになります。</p>
<p>{{EmbedLiveSample("A_simple_disclosure_example", 650, 150)}}</p>
<h3 id="Creating_an_open_disclosure_box">折りたたみボックスの作成</h3>
<p><code><details></code> ボックスを開いた状態にするために、論理値の <code>open</code> 属性を追加しましょう。</p>
<pre class="brush: html"><details open>
<summary>System Requirements</summary>
<p>Requires a computer running an operating system. The computer
must have some memory and ideally some kind of long-term storage.
An input device as well as some form of output device is
recommended.</p>
</details></pre>
<p>これだけで、次のような結果になります。</p>
<p>{{EmbedLiveSample("Creating_an_open_disclosure_box", 650, 150)}}</p>
<h3 id="Customizing_the_appearance">表示方法のカスタマイズ</h3>
<p>では、いくらか CSS を適用して折りたたみボックスの外見をカスタマイズしましょう。</p>
<h4 id="CSS">CSS</h4>
<pre class="brush: css">details {
font: 16px "Open Sans", Calibri, sans-serif;
width: 620px;
}
details > summary {
padding: 2px 6px;
width: 15em;
background-color: #ddd;
border: none;
box-shadow: 3px 3px 4px black;
cursor: pointer;
}
details > p {
border-radius: 0 0 10px 10px;
background-color: #ddd;
padding: 2px 6px;
margin: 0;
box-shadow: 3px 3px 4px black;
}
details[open] > summary {
background-color: #ccf;
}</pre>
<p>この CSS はタブ風のインターフェイスに似た外見を作り出し、クリックするとタブが開いてコンテンツを表示します。</p>
<p><code>details[open]</code> セレクターを、開いている要素のスタイル付けに使用することができます。</p>
<h4 id="HTML">HTML</h4>
<pre class="brush: html"><details>
<summary>System Requirements</summary>
<p>Requires a computer running an operating system. The computer
must have some memory and ideally some kind of long-term storage.
An input device as well as some form of output device is
recommended.</p>
</details></pre>
<h4 id="Result">結果</h4>
<p>{{EmbedLiveSample("Customizing_the_appearance", 650, 150)}}</p>
<h3 id="Customizing_the_disclosure_widget">折りたたみウィジェットのカスタマイズ</h3>
<p>折りたたみの三角形ウィジェット自身はカスタマイズできますが、これは最近標準化され、広くは対応されていません。さらに、この対応方法については複数の種類があり、標準はそれに基づいて決定されましたので、しばらくの間はカスタマイズのために複数の方法を使用する必要があります。</p>
<p>{{HTMLElement("summary")}} 要素は {{cssxref("list-style")}} 一括指定プロパティや、 {{cssxref("list-style-type")}} などの個別指定プロパティに対応しており、折りたたみウィジェットを三角形から選択したものに変更することができます (ふつうは {{cssxref("list-style-image")}}) を使用します。例えば、折りたたみウィジェットのアイコンは <code>list-style: none</code> と設定することで削除することができます。</p>
<p>しかし、 Chrome はまだこれに対応していませんので、このブラウザーでは外見をカスタマイズするために、非標準の <code>::-webkit-details-marker</code> <a href="/ja/docs/Web/CSS/Pseudo-elements">擬似要素</a>を使用する必要があります。</p>
<h4 id="CSS_2">CSS</h4>
<pre class="brush: css; highlight:[12, 15-17]">details {
font: 16px "Open Sans", Calibri, sans-serif;
width: 620px;
}
details > summary {
padding: 2px 6px;
width: 15em;
background-color: #ddd;
border: none;
box-shadow: 3px 3px 4px black;
cursor: pointer;
list-style: none;
}
details > summary::-webkit-details-marker {
display: none;
}
details > p {
border-radius: 0 0 10px 10px;
background-color: #ddd;
padding: 2px 6px;
margin: 0;
box-shadow: 3px 3px 4px black;
}
</pre>
<p>この CSS はタブ風のインターフェイスに似た外見を作り出し、クリックするとタブが開いてコンテンツを表示します。</p>
<h4 id="HTML_2">HTML</h4>
<pre class="brush: html"><details>
<summary>System Requirements</summary>
<p>Requires a computer running an operating system. The computer
must have some memory and ideally some kind of long-term storage.
An input device as well as some form of output device is
recommended.</p>
</details></pre>
<h4 id="Result_2">結果</h4>
<p>{{EmbedLiveSample("Customizing_the_disclosure_widget", 650, 150)}}</p>
<h2 id="Specifications">仕様書</h2>
<table class="standard-table">
<thead>
<tr>
<th scope="col">仕様書</th>
<th scope="col">状態</th>
<th scope="col">備考</th>
</tr>
</thead>
<tbody>
<tr>
<td>{{SpecName('HTML WHATWG', 'interactive-elements.html#the-details-element', '<details>')}}</td>
<td>{{Spec2('HTML WHATWG')}}</td>
<td></td>
</tr>
<tr>
<td>{{SpecName('HTML5.1', 'interactive-elements.html#the-details-element', '<details>')}}</td>
<td>{{Spec2('HTML5.1')}}</td>
<td>Initial definition</td>
</tr>
</tbody>
</table>
<h2 id="Browser_compatibility">ブラウザーの互換性</h2>
<p>{{Compat("html.elements.details")}}</p>
<h2 id="See_also">関連情報</h2>
<ul>
<li>{{HTMLElement("summary")}}</li>
</ul>
|