トップページ  > ウェブ制作チュートリアル  > input要素のスタイルを属性値で指定し分ける
第20章 フォームのスタイリング

★input要素のスタイルを属性値で指定し分ける

input要素のスタイルを属性値で指定し分ける

広告

今回は、「メールアドレス」入力欄と「お名前」入力欄の横幅を揃えようと思います。 入力欄の横幅を揃えるのが本当にスタイルとして良いかどうかはともかく、現在の表示領域に対して横幅70%で統一することにします。

入力欄のスタイルを指定するのですから、input要素にスタイル指定すれば良いように思います。 そこで、form.cssに以下の記述を追加してみましょう。

CSSソース(form.css)

@charset "utf-8";

/***************************************
入力フォーム
***************************************/
#form1 input, #form1 textarea {
	font-size:16px;			/*フォントサイズ*/
	border:1px solid #999999;	/*ボーダー*/
	padding:2px;			/*パディング*/
	border-radius:3px;		/*角丸にする*/
	box-shadow: 1px 1px 1px 1px rgba(0,0,0,0.1) inset;	/*影を付ける*/
}
#form1 input:focus, #form1 textarea:focus {
	box-shadow: 0px 0px 5px 2px #ccccee;		/*影を付ける*/
	outline-style:none;				/*アウトライン無しにする*/
}
#form1 p input {
	width:300px; height:40px;	/*幅と高さ*/
	border:0;			/*ボーダー無し*/
}
#form1 p {
	text-align:center;		/*センタリング*/
	text-indent:0;			/*字下げ幅をゼロにする*/
}
#form1 input {
	width:70%;
}

保存をしたらブラウザで表示してみましょう。

上記のCSSソースで良いように思ったのですが、 「メールアドレス」入力欄と「お名前」入力欄だけではなく、「お問合せ区分」のラジオボタンまで横幅が広がってしまっています。

ラジオボタンはHTMLで <input type="radio"> と指定しているので、CSSで #form1 input {width:70%;} と指定すると、ラジオボタンまでスタイル指定の影響を受けてしまうのです。

このような場合には、属性値セレクタをします。 先ほどform.cssに追加した部分を、以下のように書き換えてください。

CSSソース(form.css)

@charset "utf-8";

/***************************************
入力フォーム
***************************************/
#form1 input, #form1 textarea {
	font-size:16px;			/*フォントサイズ*/
	border:1px solid #999999;	/*ボーダー*/
	padding:2px;			/*パディング*/
	border-radius:3px;		/*角丸にする*/
	box-shadow: 1px 1px 1px 1px rgba(0,0,0,0.1) inset;	/*影を付ける*/
}
#form1 input:focus, #form1 textarea:focus {
	box-shadow: 0px 0px 5px 2px #ccccee;		/*影を付ける*/
	outline-style:none;				/*アウトライン無しにする*/
}
#form1 p input {
	width:300px; height:40px;	/*幅と高さ*/
	border:0;			/*ボーダー無し*/
}
#form1 p {
	text-align:center;		/*センタリング*/
	text-indent:0;			/*字下げ幅をゼロにする*/
}
input[type="text"] ,input[type="email"] {
	width:70%;
}

保存をしたらブラウザで表示してみましょう。 「メールアドレス」入力欄と「お名前」入力欄の横幅が70%で統一され、かつ、ラジオボタンへのスタイルの影響が無くなれば成功です。

今回追加したCSSソースを確認

今回追加したCSSソースの内容を確認しておきましょう。

カンマ区切りでセレクタを並べる

今回追加したCSSソースでは、 input[type="text"] と input[type="email"] という2つのセレクタを、カンマ区切りで並べています。 これは、「input要素のtype属性の値がtextの場合、および、input要素のtype属性の値がemailの場合」という意味です。

セレクタをカンマで区切って並べると、複数のセレクタに対して同じスタイルをまとめて指定することができます。

例:セレクタAとセレクタBに同じスタイルをまとめて指定

セレクタA, セレクタB {
	スタイル内容
}
属性値セレクタ

input[type="text"] は「input要素のtype属性の値がtextの場合」という意味です。 input[type="email"] は「input要素のtype属性の値がemailの場合」という意味です。 このような属性値セレクタを使えば、特定の属性値を持つ要素にだけスタイルを適用できます。

例:属性値がtextの場合にだけスタイルを適用

input[type="text"]{
	スタイル内容
}

属性値セレクタを使うことで、ラジオボタンにはスタイルが適用されずに、テキスト入力欄とメール入力欄のみに横幅70%のスタイルを適用することが可能になります。

インターネット上で提供されているフォームサービスを利用

ここまででフォームの入力画面(contact_jisaku.html)が完成しました。 ただし、あくまでも入力画面であり、実際には問い合わせメールを送信することはできません。

これを実際にメールが送信できるものにしたいのですが、メール送信フォームをすべて自力で作成しようとすると、CGIやPHPなどのサーバー側で処理するプログラムの知識が必要となってきます。

これらの知識はHTMLとCSSの範囲を超えているため、このチュートリアルではメール送信のプログラム部分については扱いません。 メール送信フォームをすべて自力で作成したい方は、さらにCGIやPHPなどのプログラムの勉強をされると良いでしょう。

しかし、実際にメール送信できない単なるフォーム入力画面では、ウェブサイトとして使いものになりません。 そこで、インターネット上で提供されているフォームサービスを利用することで、HTMLとCSSの範囲で実際にメール送信ができるお問合せページを作成していくことにします。

ここまでの制作段階で、「お問合せ(自作)」ページは以下の状態となっています。

まとめ
  1. input要素を対象にスタイル指定すると、一行テキストボックス・ラジオボタンなどがすべて影響を受けてしまう
  2. 要素名[属性名="属性値"] { ~ } の書式で、属性に特定の値が指定されている要素だけを対象にスタイル指定できる
  3. 例えば、input[type="email"] { ~ } なら、「type属性の値がemailのinput要素」がスタイル適用対象になる
<前へ 目次へ 次へ>
広告
Sponsors
広告
MuuMuu Domain!
ドメイン取るならお名前.com
現役エンジニアのオンライン家庭教師【CodeCamp】
サイトに広告を掲載してお小遣いが稼げる!【A8.net】
Node.jsコース
はじめてのプログラミングコース
▲ページ先頭へ
HTMLクイックリファレンスについて
© HTMQ