aboutsummaryrefslogtreecommitdiff
path: root/files/ja/web/html/element/bdi/index.html
blob: 1724873ca00ed5c443393af33bf8408c2230e9af (plain)
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
---
title: '<bdi>: 書字方向分離要素'
slug: Web/HTML/Element/bdi
tags:
  - BiDi
  - HTML
  - HTML 文字レベルの意味付け
  - 'HTML:フローコンテンツ'
  - 'HTML:知覚可能コンテンツ'
  - 'HTML:記述コンテンツ'
  - Reference
  - i18n
  - ltr
  - rtl
  - ウェブ
  - テキスト
  - リファレンス
  - 右書き
  - 国際化
  - 左書き
  - 書字方向
  - 要素
translation_of: Web/HTML/Element/bdi
---
<div>{{HTMLRef}}</div>

<p><span class="seoSummary">HTML の<strong>書字方向分離要素</strong> (<strong><code>&lt;bdi&gt;</code></strong>) は、ブラウザーの書字方向アルゴリズムにこのテキストが周囲のテキストから独立していると扱うよう指示します。</span>これは特に、ウェブサイトがテキストを動的に挿入し、挿入されるテキストの書字方向が不明な場合に便利です。</p>

<div>{{EmbedInteractiveExample("pages/tabbed/bdi.html", "tabbed-standard")}}</div>

<div class="hidden">このデモのソースファイルは GitHub リポジトリに格納されています。デモプロジェクトに協力したい場合は、 <a href="https://github.com/mdn/interactive-examples">https://github.com/mdn/interactive-examples</a> をクローンしてプルリクエストを送信してください。</div>

<p>双方向のテキストとは、文字の並びが左から右 (左書き、LTR) のものと、右から左 (右書き、RTL) のものの両方を含むテキストであり、英語の文字列の中に埋め込まれたアラビア語の引用のようなものです。ブラウザーはこれを扱うために、 <a href="https://www.w3.org/International/articles/inline-bidi-markup/uba-basics">Unicode Bidirectional Algorithm</a> を実装しています。このアルゴリズムでは、文字には暗黙の書字方向が与えられます。例えば、ラテン文字は左書きとして扱われるのに対し、アラビア文字は右書きとして扱われます。その他の一部の文字 (空白や一部の区切り文字など) は中立として扱われ、周囲の文字に従って書字方向が割り当てられます。</p>

<p>ふつう、書字方向アルゴリズムは特別なマークアップを行わずに正しく動作しますが、時々、アルゴリズムが助けを必要とすることがあります。これが <code>&lt;bdi&gt;</code> の出番です。</p>

<p><code>&lt;bdi&gt;</code> 要素はテキストの区間を囲んで、書字方向アルゴリズムにこのテキストが周囲から独立していることを指示します。これは二通りに動作します。</p>

<ul>
 <li><code>&lt;bdi&gt;</code> で囲まれたテキストの書字方向は、周囲のテキストの書字方向に<em>影響を与えない</em></li>
 <li><code>&lt;bdi&gt;</code> で囲まれたテキストの書字方向は、周囲のテキストの書字方向から<em>影響を受けない</em></li>
</ul>

<p>例えば、以下のようなテキストを想定してください。</p>

<pre class="no-line-numbers">EMBEDDED-TEXT - 1st place</pre>

<p><code>EMBEDDED-TEXT</code> が左書きである場合、これは正しく動作します。しかし、 <code>EMBEDDED-TEXT</code> が右書きである場合は、 <code> - 1</code> は右書きのテキストとして扱われます (中立または弱い文字で構成されているためです)。結果は次のように混乱します。</p>

<pre class="no-line-numbers">1 - EMBEDDED-TEXTst place</pre>

<p>さらに、 <code>EMBEDDED-TEXT</code> の書字方向が分かる場合は、 {{htmlattrxref("dir")}} 属性のついた {{HTMLElement("span")}}<code>EMBEDDED-TEXT</code> を囲むことでこの問題を修正できます。しかし、書字方向が分からない場合は - 例えば、 <code>EMBEDDED-TEXT</code> がデータベースから読み込まれたり、ユーザーに入力されたりするものであれば - <code>&lt;bdi&gt;</code> を使用して、 <code>EMBEDDED-TEXT</code> の書字方向が周囲に影響されることを防ぐべきです。</p>

<p><bdi>同様の視覚効果は、 CSS の {{cssxref("unicode-bidi", "unicode-bidi: isolate")}}{{HTMLElement("span")}} またはその他の文字書式のための要素に付けることで達成できますが、これは意味が含まれず、ブラウザーは CSS の整形を無視することが許されているので、 HTML ではこのアプローチを使用しないでください。</bdi></p>

<p><bdi><code>&lt;span dir="auto"&gt;</code> に囲まれた文字は、 <code>&lt;bdi&gt;</code> を使用するのと同様の効果が得られますが、意味論的には不明確になります。</bdi></p>

<table class="properties">
 <tbody>
  <tr>
   <th scope="row"><a href="/ja/docs/Web/HTML/Content_categories">コンテンツカテゴリ</a></th>
   <td><a href="/ja/docs/Web/HTML/Content_categories#Flow_content">フローコンテンツ</a>, <a href="/ja/docs/Web/HTML/Content_categories#Phrasing_content">記述コンテンツ</a>, 知覚可能コンテンツ</td>
  </tr>
  <tr>
   <th scope="row">許可されている内容</th>
   <td><a href="/ja/docs/Web/HTML/Content_categories#Phrasing_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/HTML/Content_categories#Phrasing_content">記述コンテンツ</a> を受け入れるすべての要素</td>
  </tr>
  <tr>
   <th scope="row">暗黙の ARIA ロール</th>
   <td><a href="https://www.w3.org/TR/html-aria/#dfn-no-corresponding-role">対応するロールなし</a></td>
  </tr>
  <tr>
   <th scope="row">許可されている ARIA ロール</th>
   <td>すべて</td>
  </tr>
  <tr>
   <th scope="row">DOM インターフェイス</th>
   <td>{{domxref("HTMLElement")}}</td>
  </tr>
 </tbody>
</table>

<h2 id="Attributes" name="Attributes">属性</h2>

<p>この要素は、他のすべての HTML 要素と同様に<a href="/ja/docs/Web/HTML/Global_attributes" title="HTML/Global attributes">グローバル属性</a>に対応していますが、 <strong>dir</strong> 属性の挙動が普通とは異なります。初期値は <code>auto</code> であり、親要素から値を継承しないことを示します。つまり、 <code>dir</code><code>rtl</code> または <code>ltr</code> のどちらかの値を指定しない限り、{{Glossary("user agent", "ユーザーエージェント")}}<code>&lt;bdi&gt;</code> の内容に基づいて正しい方向を特定します。</p>

<h2 id="Examples" name="Examples"></h2>

<h3 id="No_&lt;bdi>_with_only_LTR" name="No_&lt;bdi>_with_only_LTR">&lt;bdi&gt; がなく左書きのみの場合</h3>

<p>この例では、競争の勝者を {{HTMLElement("span")}} のみを使用して列挙しています。名前は左書きのテキストのみが入れば、見栄えが良い結果になります。</p>

<div id="bdi-sample-1">
<pre class="brush: html">&lt;ul&gt;
 &lt;li&gt;&lt;span class="name"&gt;Henrietta Boffin&lt;/span&gt; - 1st place&lt;/li&gt;
 &lt;li&gt;&lt;span class="name"&gt;Jerry Cruncher&lt;/span&gt; - 2nd place&lt;/li&gt;
&lt;/ul&gt;
</pre>

<div class="hidden">
<pre class="brush: css">body {
  border: 1px solid #3f87a6;
  max-width: calc(100% - 40px - 6px);
  padding: 20px;
  width: calc(100% - 40px - 6px);
  border-width: 1px 1px 1px 5px;
}
</pre>
</div>
</div>

<p>{{ EmbedLiveSample('bdi-sample-1','','120','','','bdi-example') }}</p>

<h3 id="No_&lt;bdi>_with_RTL_text" name="No_&lt;bdi>_with_RTL_text">&lt;bdi&gt; がなく右書きを含むテキストの場合</h3>

<p>この例では、競争の勝者を {{HTMLElement("span")}} のみを使用して列挙しており、右書きのテキストから成る名前を含んでいます。この場合、右書きの名前を入れると、書字方向が中立または弱い文字で構成された "<code>- 1</code>" の部分は、右書きのテキストの書字方向に合わられ、結果が混乱してしまいます。</p>

<div id="bdi-sample-2">
<pre class="brush: html">&lt;ul&gt;
 &lt;li&gt;&lt;span class="name"&gt;اَلأَعْشَى&lt;/span&gt; - 1st place&lt;/li&gt;
 &lt;li&gt;&lt;span class="name"&gt;Jerry Cruncher&lt;/span&gt; - 2nd place&lt;/li&gt;
&lt;/ul&gt;
</pre>

<div class="hidden">
<pre class="brush: css">body {
  border: 1px solid #3f87a6;
  max-width: calc(100% - 40px - 6px);
  padding: 20px;
  width: calc(100% - 40px - 6px);
  border-width: 1px 1px 1px 5px;
}
</pre>
</div>
</div>

<p>{{ EmbedLiveSample('bdi-sample-2','','120','','','bdi-example') }}</p>

<h3 id="Using_&lt;bdi>_with_LTR_and_RTL_text" name="Using_&lt;bdi>_with_LTR_and_RTL_text">&lt;bdi&gt; を使用した左書きと右書きのあるテキストの場合</h3>

<p>この例では、競争の勝者を <code> &lt;bdi&gt;</code> を使用して列挙しています。これらの要素がブラウザーに、名前を埋め込み先のコンテキストから分離することを指示するので、例の出力は正しく並べられます。</p>

<div id="bdi-sample-3">
<pre class="brush: html">&lt;ul&gt;
 &lt;li&gt;&lt;bdi class="name"&gt;اَلأَعْشَى&lt;/bdi&gt; - 1st place&lt;/li&gt;
 &lt;li&gt;&lt;bdi class="name"&gt;Jerry Cruncher&lt;/bdi&gt; - 2nd place&lt;/li&gt;
&lt;/ul&gt;
</pre>

<div class="hidden">
<pre class="brush: css">body {
  border: 1px solid #3f87a6;
  max-width: calc(100% - 40px - 6px);
  padding: 20px;
  width: calc(100% - 40px - 6px);
  border-width: 1px 1px 1px 5px;
}
</pre>
</div>
</div>

<p>{{ EmbedLiveSample('bdi-sample-3','','120','','','bdi-example') }}</p>

<h2 id="Specifications" name="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', 'semantics.html#the-bdi-element', '&lt;bdi&gt;')}}</td>
   <td>{{Spec2('HTML WHATWG')}}</td>
   <td></td>
  </tr>
  <tr>
   <td>{{SpecName('HTML5 W3C', 'textlevel-semantics.html#the-bdi-element', '&lt;bdi&gt;')}}</td>
   <td>{{Spec2('HTML5 W3C')}}</td>
   <td></td>
  </tr>
 </tbody>
</table>

<h2 id="Browser_compatibility" name="Browser_compatibility">ブラウザーの互換性</h2>

<div class="hidden">このページの互換性一覧表は構造化データから生成されています。データに協力していただけるのであれば、 <a class="external" href="https://github.com/mdn/browser-compat-data">https://github.com/mdn/browser-compat-data</a> をチェックアウトしてプルリクエストを送信してください。</div>

<p>{{Compat("html.elements.bdi")}}</p>

<h2 dir="ltr" id="See_also" name="See_also">関連情報</h2>

<ul>
 <li><a href="https://www.w3.org/International/articles/inline-bidi-markup/">Inline markup and bidirectional text in HTML</a></li>
 <li><a href="https://www.w3.org/International/articles/inline-bidi-markup/uba-basics">Unicode Bidirectional Algorithm basics</a></li>
 <li><a href="/ja/docs/Web/Localization">ローカライズと国際化</a></li>
 <li>関連 HTML 要素: {{HTMLElement("bdo")}}</li>
 <li>関連 CSS プロパティ: {{cssxref("direction")}}, {{cssxref("unicode-bidi")}}</li>
</ul>