* レスポンシブWebデザインの為のHTML/CSSのキホン [#ta4e3399]

#setlinebreak(on)

#html(<style>.ib {    display: inline-block;    *display: inline;    *zoom: 1;}</style>)


#contents
-- 関連
--- [[CSSセレクタ]]
--- [[bootstrapのグリッドシステム]]
--- [[jQueryメモ]]

** インライン要素とブロック要素 [#webd5f95]

HTMLの要素には大きく分けてインライン要素、ブロック要素と両方の特性を併せ持つインラインブロック要素があります。
※厳密にはもっと多くの種類がありますが、レスポンシブなWebデザインをするうえで重要なものはこれら3つです。

*** インライン要素 [#c35f2ba9]

インライン要素は基本的に高さや幅、余白といった属性をもちません。 ※ただしIEは独自の仕様でこれらの属性を持つ事ができます。
また、インライン要素を続けて記述すると、要素を横に並べる事ができます。

《主なインライン要素》
span, a, label など

HTML
#myhtml2(){{
<span style="background:red;">インライン要素A</span>
<span style="background:blue;">インライン要素B</span>
<span style="background:green;">インライン要素C</span>
}}


実行結果
#html(<div style="padding:10px;border:1px solid #000">)
#html(<span style="background:red;">インライン要素A</span><span style="background:blue;">インライン要素B</span><span style="background:green;">インライン要素C</span>)
#html(</div>)

&br;

*** ブロック要素 [#j4f9a90f]

幅や高さ、余白などを持つ事ができますが、幅の指定がない場合は、親要素の幅いっぱいまで広がる。
またブロック要素は、要素の終端で自動的に改行される為、複数のブロック要素を横に並べる事はできない。
※幅(width)と回り込み(float)の指定を行う事でブロック要素でも横に並べる事は可能だが、回り込みの特性を理解して使用しないとレイアウト崩れの原因になりやすい。

《主なブロック要素》
div, form, ul, h1, h2 など

#myhtml2(){{
<div style="background:red;">インライン要素A</div>
<div style="background:blue;">インライン要素B</div>
<div style="background:green;">インライン要素C</div>
}}

実行結果
#html(<div style="padding:10px;border:1px solid #000">)
#html(<div style="background:red;">インライン要素A</div><div style="background:blue;">インライン要素B</div><div style="background:green;">インライン要素C</div>)
#html(</div>)

&br;

*** インラインブロック要素 [#t70b3047]

インラインブロック要素は上記の2つの特性を合わせ持つ要素。
幅や高さ、余白などを持つ事ができ、終端の自動改行もない為、要素の横に並べる事も可能。
ただしHTMLのタグにはデフォルトでこれに相当するものがなく、使用するには css の display 属性に inline-block を指定する。
※ただし、古いバージョンのIE(IE7以下とIE8の一部のマイナーバージョン)ではインラインブロック要素をサポートしていない為、別の仕込みが必要(後述)。

HTML
#myhtml2(){{
<div style="display:inline-block;background:red;">インラインブロック要素A</div>
<div style="display:inline-block;background:blue;">インラインブロック要素B</div>
<div style="display:inline-block;background:green;">インラインブロック要素C</div>
}}

実行結果
#html(<div style="padding:10px;border:1px solid #000">)
#html(<div style="display:inline-block;background:red;">インラインブロック要素A</div><div style="display:inline-block;background:blue;">インラインブロック要素B</div><div style="display:inline-block;background:green;">インラインブロック要素C</div>)
#html(</div>)

&br;

** CSSによるインライン/ブロック/インラインブロックの指定 [#k5fcdf2d]

以下のように、CSSでインライン/ブロック/インラインブロックを指定する事が可能。
※ただし、古いバージョンのIE(IE7以下とIE8の一部のマイナーバージョン)ではインラインブロック要素をサポートしていない為、別の仕込みが必要(後述)。

CSSによる指定方法
|要素の種類|CSSの指定|h
|インライン要素|display:inline|
|ブロック要素|display:block|
|インラインブロック要素|display:inline-block|

HTML
#myhtml2(){{
<span style="display:block;background:red;">spanをブロック要素に変更</span>
<div style="display:inline;background:blue;">divをインライン要素に変更</div>
<span style="display:inline-block;background:green;">spanをインラインブロック要素に変更</span>
<div style="display:inline-block;background:green;">divをインラインブロック要素に変更</div>
}}

実行結果
#html(<div style="padding:10px;border:1px solid #000">)
#html(<span style="display:block;background:red;">spanをブロック要素に変更</span><div style="display:inline;background:blue;">divをインライン要素に変更</div><span style="display:inline-block;background:green;">spanをインラインブロック要素に変更</span><div style="display:inline-block;background:green;">divをインラインブロック要素に変更</div>)
#html(</div>)

&br;

** レスポンシブなページを作成する為の要素指定 [#u4135adf]

ディスプレイサイズが変わってもレイアウト崩れしないようにWebページをデザインする手法は、リキッドレイアウト や レスポンシブWebデザイン と呼ばれる。

レスポンシブなWebページを作成するには、上記のインラインブロック要素をうまく使用する必要がある。
以下のサンプルでは、複数の要素(div)をレイアウトするのに、tableタグを使用した場合と、インラインブロック要素を使用した場合の違いが確認できる。

大きな解像度のディスプレイでみた場合、両者は同じに見えるがブラウザのウィンドウ幅を小さくした場合に、例1の方は画面に表示しきれずにはみ出してしまう事が確認できる。

&br;
#html(<span id="layout_sample" style="cursor:pointer;color:blue;text-decoration:underline;" onclick="window.open('sample_rwd_table_ib.html');">サンプルページ</span>)
&br;

** IE8以下でもインラインブロック要素を使用するには [#y5656eb5]

IE7以下 及び IE8の一部のマイナーバージョンでは 通常の css によるインラインブロックの指定が効かない。
これを回避する為にはCSSを以下の通り記述する。
※これはアスタリスクハックと呼ばれるcssハックの手法の1つ。(Webサイト制作でよく使用される手法)
#myhtml2(){{
<style>
.ib {
    display: inline-block;
    /* 以下の2行を追加 */
    *display: inline;
    *zoom: 1;
}
</style>
}}

上記の ib を 対象要素の class に指定すれば、古いIEでもインラインブロック要素として認識される。

使用例
#myhtml2(){{
<div class="ib" style="background:red;">要素A</div>
<div class="ib" style="background:blue;">要素B</div>
<div class="ib" style="background:green;">要素C</div>
<div class="ib" style="background:yellow;">要素D</div>
}}

実行結果
#html(<style>.ib {    display: inline-block;    *display: inline;    *zoom: 1;}</style><div class="ib" style="background:red;">要素A</div><div class="ib" style="background:blue;">要素B</div><div class="ib" style="background:green;">要素C</div><div class="ib" style="background:yellow;">要素D</div>)


トップ   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS