HOME

フォーム

マークアップ

方法A:テーブルの使用

○視覚的には、フォーム・コントロールとラベルを整理できる良い方法で、特に大きい複雑なフォームには向いている。
○シンプルなフォームにテーブルを使用するのは無駄に思われる。

Name:
Email:
 

<form action="/path/to/script" method="post">
    <table>
        <tr>
            <th>Name:</th>
            <td><input type="text" name="name" /></td>
        </tr>
        <tr>
            <th>Email:</th>
            <td><input type="text" name="email" /></td>
        </tr>
        <tr>
            <th>&nbsp;</th>
            <td><input type="submit" value="submit" /></td>
        </tr>
    </table>
</form>

★複雑なフォームのレイアウトを制御するのにCSSに頼れば、多くの<span>や<div>タグを追加する必要があり、テーブルを使うよりソースが肥大化する。
シンプルな場合は、テーブルを使用しない方法を選ぶほうがよい。

▲このページのトップへ

方法B:テーブルは使用しない

○シンプルなマークアップにより、テキストブラウザや小さな画面のデバイスにおいてもそれなりに表示される。
○視覚的に、<br />タグを使用するだけなので、窮屈なレイアウトになる。

Name:
Email:

<form acion="/path/to/script" method="post">
    <p>
        Name: <input type="text" name="name" /><br />
        Email: <input type="text" name="email" /><br />
        <input type="submit" value="submit" />
    </p>
</form>

窮屈さを改善するために、<input>要素に多少のマージンを追加するスタイルを適用する。

スタイルシート

Name:
Email:

input {
	margin: 6px 0;
	}

▲このページのトップへ

方法C:シンプルかつアクセシブル

○シンプルなマークアップにより、テキストブラウザや小さな画面のデバイスにおいてもそれなりに表示される。
○さまざまな長さのラベルやコントロールを考慮しており、整列にまつわる問題がない。
○重要なアクセシビリティ機能がある。



スタイルシート

デフォルトのマージンを上書きするスタイルを設定する



#thisform p {
	margin: 6px 0;
	}

★ラベルとフォーム・コントロールのグループが<p>タグでマークアップされており、ラベル要素の後ろで改行により項目を区切っているため、ラベルの長さが異なっていてもフォーム・コントロールが整列する。
★<label>要素について
−<label>タグを使用してラベルと対応するフォーム・コントロールを関連付ける。コントロールの種類は問わない。ここでは、「Name:」および「Email:」という見出しを、個々の情報が入力されることになるテキスト入力ボックスと対を成すよう、それぞれ<label>タグでマークアップする。
−<label>タグのfor属性値として、対応しているフォーム・コントロールのid属性値を追加することとなり、スクリーンリーダーはフォーム・コントロールに対応したラベルをレイアウトとは関係なく適切に読み上げることができるようになる。
★ラベルをフォーム・コントロールのid属性値と関連付けることで、フォームに構造を付与する。
★<label>を使用することにより、チェックボックスまたはラジオボタンのクリッカブルエリアが広がる。

<form action="/path/to/script" id="thisform" method="post">
    <p><label for="name">Name:</label><br />
    <input type="text" id="name" name="name" /></p>
    <p><label for="email">#mail:</label><br />
    <input type="text" id="email" name="email" /></p>
    <p><input type="checkbox" id="remenber" name="remenber" /><label for="remenber">Remember this info?</label></p>
    <p><input type="submit" value="submit" /></p>
</form>

▲このページのトップへ

方法D:フォームを定義する

○構造化マークアップはテキストブラウザや小さな画面のデバイスにおいてもそれなりに表示される。
○重要なアクセシビリティ機能がある。
○ラベルとフォーム・コントロールはCSSを使用して同じ行にも別々の行にも配置できる。

★デフォルトではほとんどの視覚系ブラウザが<dd>要素を各行でインデントして表示するため、<p>または<br />タグを追加したりCSSを使うことなしに、読みやすいレイアウトでブラウジングすることができる。

スタイルシート

<dd>要素のデフォルトインデントを取り除く

form dd {
	margin: 0;
	}

テーブルを使用したフォーマットの方法Aのようなレイアウトも、フォーム内の<dt>要素をフローとさせることで実現できる。

form dd {
	margin: 0;
	}
form dt {
	float: left;
	padding-right: 10px;
	}

<dt>をフローとさせることで<dd>タグに含まれるフォーム・コントロールは右に整列するが、完全に揃いはしない。

▲このページのトップへ

フォームを使いやすくする

tabindex

・実装が極めて簡単:tabindex属性と数値を追加するだけ。
・運動障碍のユーザを支援:フォームを完全にキーボードで操作できるため。

マークアップ



Remember this info?

<form action="/path/to/script" id="thisform" method="post">
    <p><label for="name">Name:</label><br />
    <input type="text" id="name" name="name" tabindex="1" /></p>
    <p><label for="email">Email:</label><br />
    <input type="text" id="email" name="email" tabindex="2" /></p>
    <p><input type="checkbox" id="remember" name="remember" tabindex="3" />
    <lable for="remember">Remember this info?</label></p>
    <p><input type="submit" value="submit" tabindex="4" /></p>
</form>

accesskey

・運動障碍のあるユーザに役立つばかりでなく、他のユーザにとっても便利。AltキーやCtrlキー(MacユーザならCommandキー)とaccesskeyで指定したキー(ここでは「9」)を同時に押す。

マークアップ



Remember this info?

<form action="/path/to/script" id="thisform" method="post">
    <p><label for="name" accesskey="9">Name:</label><br />
    <input type="text" id="name" name="name" tabindex="1" /></p>
    <p><label for="email">Email:</label><br />
    <input type="text" id="email" name="email" tabindex="2" /></p>
    <p><input type="checkbox" id="remember" name="remember" tabindex="3" />
    <lable for="remember">Remember this info?</label></p>
    <p><input type="submit" value="submit" tabindex="4" /></p>
</form>

フォームのスタイル

テキスト入力コントロールの幅の設定

<input type="text" id="name" name="name" tabindex="1" size="20" />
このsize="20"の20は、ピクセルではなく20字のことであるため、ブラウザのフォーム・コントロール用のデフォルト文字サイズによって、コントロールの実際の幅が異なる可能性がある。
CSSを使用すると、テキスト入力コントロールおよび他のフォーム・このトロールの幅をピクセル単位で設定できる。

すべての<input>要素を200ピクセルの幅にするには、フォームに割り当てるid(この場合はthisform)を利用する。



Remember this info?

#thisform input {
	width: 200px;
	}

submitボタンも<input>要素なので、同じ値が適用されてしまうことを防ぐには、id属性を使用して「Name」および「Email」のこのトロールのみに適用されるようにする。



Remember this info?

#name, #email {
	width: 200px;
	}

<label>を使用してフォントをカスタマイズ



Remember this info?

#thisform label {
	font-family: Verdana, sans-serif;
	font-size: 12px;
	font-weight: bold;
	color: #600;
	}

フォーム内のすべてのテキストに一般的なスタイルを適用し、その後で具体的にラベル固有のスタイルを適用して、フォーム・コントロールを独自にカスタマイズすることもできる。



Remember this info?

#thisform {
	font-family: Georgia, serif;
	font-size: 12px;
	color: #999;
	}
#thisform label {
	font-family: Verdana, sans-serif;
	font-weight: bold;
	color: #600;
	}

▲このページのトップへ

<fieldset>を使用してフォームセクションをグループ化

マークアップ

Sign In



Remember this info?

<form action="/path/to/script" id="thisform" method="post">
    <fieldset>
        <legend>Sign In</legend>
        <p><label for="name" accesskey="9">Name:</label><br />
        <input type="text" id="name" name="name" tabindex="1" /></p>
        <p><label for="email">Email:</label><br />
        <input type="text" id="email" name="email" tabindex="2" /></p>
        <p><input type="checkbox" id="remember" name="remember" tabindex="3" />
        <lable for="remember">Remember this info?</label></p>
        <p><input type="submit" value="submit" tabindex="4" /></p>
    </fieldset>
</form>

<fieldset>と<legend>のスタイルを追加する

スタイルシート

Sign In



Remember this info?

#thisform {
	font-family: Georgia, serif;
	font-size: 12px;
	color: #999;
	}
#thisform label {
	font-family: Verdana, sans-serif;
	font-weight: bold;
	color: #600;
	}
#thisform fieldset {
	border: 1px solid #ccc;
	padding: 0 20px;
	}

★fieldsetの上辺と底辺のパディングを0にしているのは、フォームラベルとコントロールが<p>タグでマークアップされているため、上辺と底辺にはすでに十分なパディングがあるからである。

立体的な<legend>

3Dエフェクトのために、背景を明るいグレーに設定し、<fieldset>要素に使用したボーダーにマッチする1ピクセルのボーダーを<legend>全体の周りに追加し、影をつける効果として底辺と右辺のボーダーの色を若干暗いグレーになるようスタイルを上書きする。

Sign In



Remember this info?

#thisform {
	font-family: Georgia, serif;
	font-size: 12px;
	color: #999;
	}
#thisform label {
	font-family: Verdana, sans-serif;
	font-weight: bold;
	color: #600;
	}
#thisform fieldset {
	border: 1px solid #ccc;
	padding: 0 20px;
	}
#thisform legend {
	font-family: arial, sans-serif;
	font-weight: bold;
	font-size: 90%;
	color: #666;
	background: #eee;
	border: 1px solid #ccc;
	border-bottom-color: #999;
	border-right-color: #999;
	padding: 4px 8px;
	}

▲このページのトップへ