Webサイト専門プログラマの言いたい放題

元システムエンジニアがサイト制作とプログラミングについて好き放題しゃべります。

お問い合せフォームのレスポンシブ化

f:id:wp-lesson:20151013233123j:plain

お問い合せフォームのレスポンシブ化

今夜のレッスンではお問い合せフォームのテーブルタグを
スタイルシートCSS)を使ってレスポンシブ化する方法を
扱いました。

お問い合せフォームのような「表」はHTMLの作法に照らすと
テーブルタグで書くべきところです。

テーブルタグとは、縦何行、横何列という表(テーブル)の
表示に特化したタグです。

ところがテーブルタグそのままだと、スマホのように画面の
サイズが狭いデバイスで表示したとき、表が入りきらずに
左右にギュッと縮んでしまいます。

すると、各列の中にある入力欄が表の外へはみ出したり、
見出しのラベルが折り返してしまったり、
入力欄が極端に狭くなって入力し辛くなったり、
いろんな弊害が生じます。

そこで、スタイルシートCSS)を使います。

画面の横幅が一定のサイズ以下になったときに、
表の列を横並びから縦並びに切り替えるのです。

───────────────────
 お名前 (必須)
───────────────────
[             ]
───────────────────
 メールアドレス (必須)
───────────────────
[             ]
───────────────────

こんなイメージです。

縦にすれば、入力欄が狭すぎることもありませんし
見出しが折り返す心配もなくなります。

具体的な方法

まず、メディアクエリの文法を使って特定の画面サイズ以下の場合だけ
適用されるスタイルシートCSS)の記述欄を用意します。

@media (max-width: 600px) {
  ここに書く
}

次に、問い合せフォームのHTMLを構成するテーブルタグを指し示し、
セルの表示形式(display属性)を変更します。

@media (max-width: 600px) {
  table.contact th,table.contact td {
    display: block;
  }
}

枠線やセルの背景色などを装飾するスタイルシートCSS)も追加
しないと見た目がイマイチですが、本質的な「縦並び化」は上記の
コードでOKです。

ここで抑えておきたいHTMLとCSSの基礎知識

HTMLには<table>や<div>の他、たくさんの種類のタグがありますが、
タグによってブラウザでの表示のされ方が違います。

<table>タグの内側に書く<th>や<td>は表の1つ1つのセルを
表しますが、同じ行の中に書き並べると必ず横方向に並びます。

これは、<th>タグと<td>タグだから横方向に並んで表示されるのではなく、
タグの表示のされ方を決定する「display」属性が、<th>タグと<td>タグの場合
「table-cell」という初期値になっているからです。

この初期値はあらかじめHTMLの仕様として規定されているので、
サイトを作る人がわざわざスタイルシートCSS)に書かなくても
全てのブラウザが初期値として自動的に割り当ててくれます。

(だから、この仕組みに気付きにくいのです)

つまりブラウザは、それぞれのHTMLタグにどの「display」属性が
割り当ててあるかによって画面への表示(レンダリング)方法を判断しているのです。

ちなみに<div>タグの「display」属性は初期値が「block」です。
「block」が指定されたタグは、縦幅と横幅の概念を帯び、HTMLに記述された順番に
上から下へとピッタリ並んで表示されます。それがブラウザの仕様です。

なので、<th>や<td>の「display」属性を「block」に変更すれば、
<div>タグと全く同じように縦並びに変わるというわけです。
裏ワザでもなんでもありません。

原理原則に則った正当な方法です。

完全マンツーマンのオンラインレッスンのご案内

リクルート社が運営するスキルアップサイト「教える学べる」3つ星講師です。

≫ 生徒さんの口コミレビューをご確認ください


f:id:wp-lesson:20151222150112j:plain

≫ ページ内の「先生に聞いてみる」ボタンでお気軽にご相談ください

f:id:wp-lesson:20151222145958j:plain

平日の夜は予約が埋まりやすいのでお早めにご相談ください。
Facebookでもプログラミング&コーディングの本質を投稿しています。
Facebook(友達限定のプライベート投稿で本質的な情報発信中)