blob: df27781b4c8b54b6ed670dc161d12c4e8f4c1075 (
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
|
---
title: Positioning
slug: Archive/Mozilla/XUL/PopupGuide/Positioning
tags:
- XUL
- XUL Popup Guide
translation_of: Archive/Mozilla/XUL/PopupGuide/Positioning
---
<p>
<span id="Positioning_Popups"></span>
</p>
<h3 id=".E3.83.9D.E3.83.83.E3.83.97.E3.82.A2.E3.83.83.E3.83.97.E3.81.AE.E9.85.8D.E7.BD.AE" name=".E3.83.9D.E3.83.83.E3.83.97.E3.82.A2.E3.83.83.E3.83.97.E3.81.AE.E9.85.8D.E7.BD.AE">ポップアップの配置</h3>
<p>スクリーン上でポップアップの配置を制御するにはいくつか方法があります。
</p><p><span id="Default_Positioning_of_Popups"></span>
</p>
<h4 id=".E3.83.9D.E3.83.83.E3.83.97.E3.82.A2.E3.83.83.E3.83.97.E3.81.AE.E3.83.87.E3.83.95.E3.82.A9.E3.83.AB.E3.83.88.E9.85.8D.E7.BD.AE" name=".E3.83.9D.E3.83.83.E3.83.97.E3.82.A2.E3.83.83.E3.83.97.E3.81.AE.E3.83.87.E3.83.95.E3.82.A9.E3.83.AB.E3.83.88.E9.85.8D.E7.BD.AE">ポップアップのデフォルト配置</h4>
<p>トップレベルのメニューポップアップは、デフォルトでは、関連付けられたメニューやボタンの下端がポップアップの上端に重なるように表示されます。水平方向には、メニューやボタンの左端がメニューポップアップの左端と一直線になります。
</p><p>サブメニューは、デフォルトでは親メニューアイテムの右側に、メニューの上端と親メニューアイテムの上端が一直線になるように配置されます。ただし、テキストが右から左へと表示される (<span style="color: green;">right to left</span>)ロケールでは、サブメニューは左に表示されます。
</p><p>トップレベルメニューとサブメニューのどちらの場合でも、下や右にメニューの全体の大きさを表示する十分なスペースが無ければ、上や左に表示されます。どちらの側にも十分なスペースが無ければ、メニューの大きさが縮小されます。
</p><p><code id="a-popup"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/popup">popup</a></code> 属性や <code id="a-context"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/context">context</a></code> 属性によって取り付けられたポップアップでは、デフォルトでは、ポップアップの左上角 (右から左のロケールでは右上角) がマウスがクリックされた位置になるように表示されます。コンテキストメニューは、同じ場所をふたたびクリックするだけでメニューを消せるように、右下に数 pixel オフセットされて表示されます。コンテキストメニューがキーボードのみによって開かれた場合、ドキュメントの左上の隅にメニューが表示されます。
</p><p>ツールチップは、必ず現在のマウス位置の近くに、少しだけ垂直方向にオフセットされて表示されます。
</p><p><span id="The_position_attribute"></span>
</p>
<h4 id="position_.E5.B1.9E.E6.80.A7" name="position_.E5.B1.9E.E6.80.A7">position 属性</h4>
<p>すべての種類のポップアップは、2 通りの方法で表示位置を制御できます。1 つめは、ポップアップの <span id="m-openPopup"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopup">openPopup</a></code></span> メソッドを使う時に位置を指定する方法です。これはスクリプトによってポップアップを開く時に使用します。2 つめは、menupopup、panel、tooltip 要素にいくつかの属性を設置して位置を指定する方法です。以下で説明する 3 つの属性は、これら 3 種類の要素で同じように機能します。
</p><p><code id="a-position"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/position">position</a></code> 属性は、ポップアップが取り付けられた要素に対する位置あわせの方法を指定します。
</p>
<ul><li>menu や button、toolbarbutton 要素内に置かれた menupopup では、<code>position</code> 属性はそれら親要素に対してどのようにアンカーされるかを制御します。
</li><li><code id="a-popup"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/popup">popup</a></code> 属性によって取り付けられた menupopup では、<code>position</code> 属性は <code>popup</code> 属性を持つ要素に対してどのようにアンカーされるかを制御します。
</li><li>コンテキストメニュー、すなわち <code id="a-context"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/context">context</a></code> 属性によって取り付けられ、マウスをコンテキストクリックすることで開かれたメニューでは、<code>position</code> 属性は無視されます。同じ場所をふたたびクリックするだけで閉じられるように、メニューは数 pixel オフセットされて表示されます。
</li><li>ツールチップでは、<code>position</code> 属性は <code id="a-tooltip"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/tooltip">tooltip</a></code> 属性を持つ要素に対してどのようにアンカーされるかを制御します。ツールチップでは通常 <code>position</code> 属性を使う必要はないでしょう。デフォルトの位置であるマウスポインタの近くに表示させるだけでいいはずです。
</li></ul>
<p>たとえば、
</p>
<pre><menupopup id="editItems" position="end_before">
<menuitem label="Cut"/>
<menuitem label="Copy"/>
<menuitem label="Paste"/>
</menupopup>
<label value="Clipboard" popup="editItems"/>
</pre>
<p>この例では、menupopup が <code id="a-popup"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/popup">popup</a></code> 属性によって取り付けられており、ラベルを左クリックするとポップアップが表示されます。position 属性は 「end_before」 の位置にポップアップを表示するように指定されており、これによりポップアップはラベルの右側に、上端をそろえて表示されます。position 属性が取り得る値にはいくつか種類があるので、それぞれのケースでどのようにポップアップの位置あわせが行われるかを示す画像と共にここで説明します。
</p><p>以下は左から右の (<span style="color: green;">left to right</span>)ユーザーインターフェイスであることを想定しています。右から左の (<span style="color: green;">right to left</span>)ユーザーインターフェイスでも同じ値を使用できますが、ポップアップの表示位置や位置あわせは逆側になります。 </p>
<table>
<tbody><tr>
<td><b><code>before_start</code></b>
<p>ポップアップの左辺とアンカーの左辺が一直線になり、ポップアップの底辺がアンカーの上端に接する。
</p>
</td><td><img alt="Image:Popupguide-position-beforestart.png">
</td></tr>
<tr>
<td><b><code>before_end</code></b>
<p>ポップアップの右辺とアンカーの右辺が一直線になり、ポップアップの底辺がアンカーの上端に接する。
</p>
</td><td><img alt="Image:Popupguide-position-beforeend.png">
</td></tr>
<tr>
<td><b><code>after_start</code></b>
<p>ポップアップの左辺とアンカーの左辺が一直線になり、ポップアップの上端がアンカーの底辺に接する。この値はメニューボタンで一般的に使われる。
</p>
</td><td><img alt="Image:Popupguide-position-afterstart.png">
</td></tr>
<tr>
<td><b><code>after_end</code></b>
<p>ポップアップの右辺とアンカーの右辺が一直線になり、ポップアップの上端がアンカーの底辺に接する。
</p>
</td><td><img alt="Image:Popupguide-position-afterend.png">
</td></tr>
<tr>
<td><b><code>start_before</code></b>
<p>ポップアップの上端とアンカーの上端が一直線になり、ポップアップの右辺がアンカーの左辺に接する。
</p>
</td><td><img alt="Image:Popupguide-position-startbefore.png">
</td></tr>
<tr>
<td><b><code>start_after</code></b>
<p>ポップアップの底辺とアンカーの底辺が一直線になり、ポップアップの右辺がアンカーの左辺に接する。
</p>
</td><td><img alt="Image:Popupguide-position-startafter.png">
</td></tr>
<tr>
<td><b><code>end_before</code></b>
<p>ポップアップの上端とアンカーの上端が一直線になり、ポップアップの左辺がアンカーの右辺に接する。この値はサブメニューで使用される。
</p>
</td><td><img alt="Image:Popupguide-position-endbefore.png">
</td></tr>
<tr>
<td><b><code>end_after</code></b>
<p>ポップアップの底辺とアンカーの底辺が一直線になり、ポップアップの左辺がアンカーの右辺に接する。
</p>
</td><td><img alt="Image:Popupguide-position-endafter.png">
</td></tr>
<tr>
<td><b><code>overlap</code></b>
<p>ポップアップの左上角がアンカーの左上角と合わさるように表示される。
</p>
</td><td>
</td></tr>
<tr>
<td><b><code>after_pointer</code></b>
<p>マウスポインタの位置から何 pixel か垂直方向にオフセットされてポップアップが表示される。
</p>
</td><td>
</td></tr>
</tbody></table>
<p>menupopup に position 属性が無ければ、ポップアップはデフォルトの位置、この場合はマウスポインタの位置に表示されます。
</p><p>スクリプトから <span id="m-openPopup"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopup">openPopup</a></code></span> メソッドによってポップアップを開く時には、position 属性の代わりに 第 2 引数で位置を指定できます。たとえば、次のようなコードで上の例のポップアップを開くことができます。
</p>
<pre>menupopup.openPopup(label, "end_before", 0, 0, false, false);
</pre>
<p>上の例と同じく、位置の指定が 「end_before」 となっていることに注目してください。両方に値が指定された場合、openPopup に与えられた値の方が属性よりも優先されます。ただし、openPopup の引数 attributesOverride (最後の引数、上の例では false) が true だと、openPopup に与えられた値よりも属性の方が優先されます。これにより、スクリプトと XUL コードはポップアップの開き方に関してさまざまな方法で協調することができます。
</p><p><span id="Positioning_using_Coordinates"></span>
</p>
<h4 id=".E5.BA.A7.E6.A8.99.E3.81.AB.E3.82.88.E3.82.8B.E9.85.8D.E7.BD.AE" name=".E5.BA.A7.E6.A8.99.E3.81.AB.E3.82.88.E3.82.8B.E9.85.8D.E7.BD.AE">座標による配置</h4>
<p>openPopup の引数 x と y によって、ポップアップの位置をさらに変更することができます。ポップアップはアンカーによって位置が決定された後、引数 x と y によって特定の距離だけオフセットされます。この例は <a href="ja/XUL/PopupGuide/OpenClose#The_openPopup_method">openPopup メソッド</a> の節にあります。
</p><p>スタイルシートや <code id="a-style"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/style">style</a></code> 属性によって menupopup や panel、tooltip に margin が指定されていると、その margin はポップアップの外側に対して適用されます。次の例では menupopup の上部に 2 ex の margin があり、そのためポップアップが開かれる時にはボタンの底辺から 2 ex 離れて表示されます。 </p>
<pre><button label="Popup" type="menu">
<menupopup style="margin-top: 2ex;">
<menuitem label="Cat"/>
<menuitem label="Dog"/>
</menupopup>
</button>
</pre>
<p>この手法はツールチップに対して内部的に使用されています。Firefox ブラウザを見てみると、ツールチップはマウスポインタの位置ではなく、少し下に表示されるのがわかります。これはデフォルトのテーマでツールチップの上部に 21 pixel の margin が設定されており、その分だけ下に表示されるようになっているためです。説明対象の要素をツールチップが覆い隠さないようにするためにこの方法が使われています。
</p><p><span id="Screen_Positioning"></span>
</p>
<h4 id=".E7.94.BB.E9.9D.A2.E4.B8.8A.E3.81.AE.E9.85.8D.E7.BD.AE" name=".E7.94.BB.E9.9D.A2.E4.B8.8A.E3.81.AE.E9.85.8D.E7.BD.AE">画面上の配置</h4>
<p>スクリプトから画面上の特定の位置にポップアップを開くには、<span id="m-openPopupAtScreen"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopupAtScreen">openPopupAtScreen</a></code></span> メソッドを使います。この詳細は <a href="ja/XUL/PopupGuide/OpenClose#The_openPopupAtScreen_method">openPopupAtScreen メソッド</a> の節にあります。
</p><p>すべてのポップアップにおいて、<code id="a-left"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/left">left</a></code> 属性 <code id="a-top"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/top">top</a></code> 属性によってポップアップの画面上の表示位置を pixel 座標で指定することができます。これらの属性が使われると、ポップアップはその属性が指定した位置に表示されます。position 属性と同様に、最後の引数が true でなければ <span id="m-openPopup"><code><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Method/openPopup">openPopup</a></code></span> メソッドの引数が優先されます。
</p><p>例を示します。
</p>
<pre><panel left="100" top="200">
<button label="Test"/>
</panel>
</pre>
<p><code id="a-left"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/left">left</a></code> 属性と <code id="a-top"><a href="https://developer.mozilla.org/ja/docs/Mozilla/Tech/XUL/Attribute/top">top</a></code> 属性は、自動で閉じないパネルを使用するときにもっとも便利です。これらの属性を使うと、ポップアップが移動された時に left の位置と top の位置が記録されるようになり、また persist 属性を使うとそれらの属性をセッションをまたいで保存することができます。このようにすると、パネルは常に前回と同じ画面上の位置に開かれるようになります。
</p>
<div class="noinclude">
</div>
|