主要なコントロールについては、XUL controls - Mozillaでその外観と機能を確認できます。
XULの要素はHTMLのそれに近いものがあります。しかしXULとHTMLは異なるため、混同しないように注意が必要です。
description要素は、テキストを表示するために使用します。
<description value="TEST" />
<description>TEST</description>
label要素は、他のコントロール要素に説明を付ける目的で使用します。ただテキストを表示するだけならば、description要素を用います。
関連付けるコントロールのid属性と同じ値を、control属性に指定します。
<label value="TEST" control="foo" /> <textbox id="foo" />
そうしてlabelをクリックすると、関連付けられたコントロール、この例ではtextboxにフォーカスが合います。

テキストが途中で改行されても良い場合には、value属性ではなくタグの間に記述します。
<label>TEST</label>
href属性でURLを指定することで、label要素からそのページを開けるようになります。このとき同時に「class="text-link"」の指定もする必要があり、さもなくばリンクは有効とならず、フォーカスを合わせることもできません。
<label href="http://example.com" value="AA" /> <label href="http://example.com" class="text-link" value="BB" />

リンクをクリックすると、href属性で設定されているページが新しいタブで開きます。
<button label="A" />
<button label="B" accesskey="b" oncommand="alert('BB')" />

既定では、このように縦に並びます。これを横に並べるにはhbox要素で囲みます。
accesskey属性で要素にショートカットキーを割り当てられます。割り当てるキーは任意ですが、通常はlabel属性に含まれる文字にします。そのときlebel属性を実体参照で指定しているならば、それに合わせてaccesskey属性の値も実体参照とすべきです。
accesskey属性の指定がユーザーインターフェイスにどのように反映されるかは、プラットフォームやロケールに依存します。accesskey - XUL | MDN
たとえば次のようにaccesskey属性を設定すると、
<button label="Character" accesskey="C" />
<button label="Character" accesskey="c" />
<button label="キャラクタ" accesskey="c" />
<button label="キャラクタ" accesskey="キ" /> <!-- これは検証のため -->
ロケールの設定に応じて、以下のように表示されます。
![]() 英語 環境 |
![]() 日本語 環境 |
英語環境ではlabelにaccesskeyの文字が含まれている場合には、その文字が下線付きで表示され、さもなくばlabelの後にかっこで囲まれて表示されます。日本語環境では、つねにかっこで表示されます。
キーの入力では大文字/小文字の区別はされませんが、英語環境ではlabelにその文字が大文字/小文字ともに含まれている場合には、区別されて表示されます。
上記の例ではaccesskey属性にカタカナを割り当てていますが、これは検証のためであり、実際は英数字に限定すべきです。ショートカットキーのコードをウィンドウに送信することで任意の文字をキーとして使用することは可能ですが、それは実用的ではないため、実際にはキーボードから入力できる文字のみとします。
<textbox value="foo" /> <textbox value="bar" multiline="true" />

リストはlistboxでボックスを構成し、その項目はlistitemで定義します。
<listbox rows="3"> <listitem label="A" /> <listitem label="B" /> <listitem label="C" /> <listitem label="D" /> </listbox>

listcolsとlistcolで列を定義し、項目 (listitem) は列ごとにlistcellで定義します。
<listbox rows="3">
<listcols>
<listcol flex="1" />
<listcol flex="1" />
</listcols>
<listitem>
<listcell label="AAA" />
<listcell label="1" />
</listitem>
<listitem>
<listcell label="B" />
<listcell label="222" />
</listitem>
</listbox>

listheadとlistheaderで定義します。
<listbox rows="3">
<listhead>
<listheader label="AAA" />
<listheader label="BBB" />
</listhead>
<listcols>
<listcol flex="1" />
<listcol flex="1" />
</listcols>
<listitem>
<listcell label="1" />
<listcell label="2" />
</listitem>
<listitem>
<listcell label="3" />
<listcell label="4" />
</listitem>
</listbox>

listboxでは、ユーザーのドラッグによりヘッダの幅を変更することはできません。そのような用途ならば、ツリーを使用します。
各列の幅はflex属性で指定します。1つの列にだけ指定した場合は、その列が空いたスペースを埋めるように拡大されます。複数の列に指定した場合は、それぞれの数値の比で幅が決定されます。flex - Mozilla | MDN
| コード | 表示 |
|---|---|
<listcol /> <listcol /> |
![]() |
<listcol /> <listcol flex="1" /> |
![]() |
<listcol flex="1" /> <listcol flex="1" /> |
![]() |
<listcol flex="2" /> <listcol flex="1" /> |
![]() |
<hbox> <!-- ここに置かれた要素は水平に並べて配置される --> </hbox> <vbox> <!-- ここに置かれた要素は垂直に並べて配置される --> </vbox>
<hbox> <button label="A" /> <button label="B" /> <button label="C" /> </hbox>

box要素は、既定ではhbox要素と同等です。ただしorient属性をverticalとすると、vboxと同等となります。
<vbox> <button label="A" /> <button label="B" /> <button label="C" /> </vbox>

<groupbox> <caption label="A" /> <description value="100" /> <description value="200" /> </groupbox>

caption要素には、任意の要素を内包させることができます。そのような用途ではcaptionを開始タグと終了タグで記述し、その内容として目的の要素を間に記述します。
たとえばcheckboxを配置するならば、それは次のようにします。
<caption> <checkbox label="A" id="foo" /> </caption>
さらにこのチェックボックスのチェックが外されたとき、captionやチェックボックス内の要素を無効に見せかけるには、次のようにします。
var checkbox = document.getElementById( 'foo' );
checkbox.addEventListener( 'click', function()
{
var caption = this.parentNode;
// captionは無効化できないため、半透明にして無効化されているように見せかける
caption.nextSibling.style.opacity = this.checked ? 1 : 0.5;
// disabled属性がサポートされるならば、その状態に応じて切り替える
caption.nextSibling.nextSibling.disabled = ! this.checked;
}, false );
radiogroupは、radioをグループ化するの用います。このコントロールはradioをまとめる機能を与えるのみで、境界線が描画されるような外観上の作用はありません。
radiogroupの子要素としなければ、radio要素をユーザーに選択させることはできません。
<radiogroup> <radio label="A" /> <radio label="B" /> <radio label="C" /> </radiogroup>

| 要素 | 説明 | |
|---|---|---|
| スタックとデッキ | stack、deck | 要素を重なった1組のカードのように扱う |
| スタックの配置 | stack | サイズに応じて要素が伸縮 |
| タブボックス | tabbox、tabsなど | ウィンドウ上部にタブを表示 |
| グリッド | grid | 要素を格子状に配置 (表組み) |
| コンテンツパネル | iframe、wizard | HTMLや他のXULファイルの表示 |
| スプリッター | splitter | ボックスの分割 |
タブを実現するには、
の5つの要素を使用します。
<tabbox>
<tabs>
<tab label="AAA" />
<tab label="BBB" />
</tabs>
<tabpanels>
<tabpanel>aaa</tabpanel>
<tabpanel>bbb</tabpanel>
</tabpanels>
</tabbox>

要素を格子状に配置し、表組みを実現できます。
<grid>
<columns>
<column flex="2"/>
<column flex="1"/>
</columns>
<rows>
<row>
<description value="AAA" />
<description value="B" />
</row>
<row>
<description value="CC" />
<description value="DDDD" />
</row>
</rows>
</grid>

コントロールの間に配置することで、それぞれのサイズを変更できるようになります。