前回、img要素に float:right; のスタイル指定をして画像を右寄せにして、左側にテキストを流し込みました。
しかし、そのスタイル指定の影響で、後に続く要素まで流し込まれてしまってレイアウトが崩れています。
この問題を解決していきましょう。
フロートの影響をクリアするには、CSSのclearプロパティを使用します。
フロート配置の後に続く要素にclearプロパティを適用すればよいのですが、区切りを分かりやすくするために、まず、HTMLソースにhr要素を追加しましょう。
hr要素は、テーマの区切りを意味します。
index に以下の記述を追加してください。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <link rel="stylesheet" href="base.css"> <title>ウェブサンプル株式会社</title> </head> <body> <div id="pagebody"> <!-- ヘッダ --> <div id="header"> <h1><a href="index "><img src="https://www.htmq.com/wp-content/themes/htmq/htmq-images/logo.png" alt="ウェブサンプル株式会社"></a></h1> </div> <!-- メインメニュー --> <ul id="menu"> <li><a href="index ">ホーム</a></li> <li><a href="product ">製品紹介</a></li> <li><a href="profile ">会社概要</a></li> <li><a href="contact ">お問合せ</a></li> </ul> <!-- ヘッダ画像 --> <div id="img_index"> <img src="./images/img_index.png" alt="あしたをみつめるウェブサンプル株式会社"> </div> <!-- インフォメーション --> <h2>新着情報</h2> <h3>新商品のご案内</h3> <p> <img src="https://www.htmq.com/wp-content/themes/htmq/htmq-images/index0001.png" alt="新商品のイメージ画像" class="infoimg_index"> あいうえおかきくけこさしすせそ(中略) </p> <hr> <h3>展示会への出展</h3> <p> <img src="https://www.htmq.com/wp-content/themes/htmq/htmq-images/index0002.png" alt="展示会への出展のイメージ画像" class="infoimg_index"> あいうえおかきくけこさしすせそ(中略) </p> <hr> <h3>環境への取り組み</h3> <p> <img src="https://www.htmq.com/wp-content/themes/htmq/htmq-images/index0003.png" alt="環境への取り組みのイメージ画像" class="infoimg_index"> あいうえおかきくけこさしすせそ(中略) </p> <hr> <!-- フッタ --> <small>Copyright (c) ウェブサンプル株式会社 All Rights Reserved.</small> </div> </body> </html>
保存をしたらブラウザで表示してみましょう。
hr要素を追加したことで、グレーの罫線が表示されましたが、まだレイアウトは崩れたままで3枚の画像の表示位置(グリッドライン)などが揃っていない状態です。
次に、CSSファイルのbase.cssに以下の記述を追加してください。
@charset "utf-8";
/*============================================
全般的なスタイル
============================================*/
* {
margin:0; padding:0; /*全要素のマージン・パディングをリセット*/
}
body {
background-color:#cccccc; /*ページ全体の背景色*/
background-image:url("images/bg_body.png"); /*ウェブページ全体の背景画像*/
font-size:95%; /* フォントサイズを95%にする */
font-family: "MS ゴシック",sans-serif; /* フォントの種類をゴシック系にする */
line-height:1.5; /* 行の高さを1.5倍にする */
color:#333333; /* 文字色を濃い目のグレーにする */
}
div#pagebody {
width:1000px; margin:0 auto; /*内容全体をセンタリング*/
background-color:#ffffff; /*内容全体の背景色*/
background-image:url("images/bg_pagebody.png"); /*コンテンツ全体の背景画像*/
background-repeat:repeat-y; /*背景画像を縦方向に繰り返す*/
}
img {border:0;} /*画像のボーダーを0にする*/
/*============================================
ヘッダ
============================================*/
div#header {
height:80px; /*ヘッダ部分の高さ*/
}
div#header h1 {
padding:10px 0px 5px 20px; /*見出しの位置調整*/
font-size:18px; /*フォントのサイズ*/
font-family:Arial, Helvetica, sans-serif; /*フォントの種類*/
}
div#header h1 a {text-decoration:none;} /*リンクの下線を無くす*/
/*============================================
メインメニュー
============================================*/
ul#menu {
width:960px; height:50px; /*メインメニュー部分の幅と高さ*/
margin:0px 20px; /*上下マージン0px、左右マージン20px*/
}
#menu li {
list-style-type:none; /*リストマーカー無しにする*/
display:inline; /*リスト項目をインライン表示にする*/
float:left; /*リスト項目を横に並べる*/
}
#menu li a {
background-color:navy; /*背景色*/
color:#ffffff; /*文字色*/
display:block; /*リンク部分をブロック表示にする*/
width:240px; height:35px; /*幅と高さ*/
padding:15px 0px 0px 0px; /*上パディング*/
text-align:center; /*テキストをセンター揃えにする*/
text-decoration:none; /*リンク部分を下線無しにする*/
background-image:url(images/bg_menu1.png); /*背景画像を指定*/
background-repeat:no-repeat; /*背景画像を繰り返さない*/
}
#menu li a:hover {
background-color:#000066; /*リンクにマウスが乗ったら背景色を変更する*/
background-image:url(images/bg_menu2.png); /*リンクにマウスが乗ったら背景画像を変更する*/
}
/*============================================
ヘッダ画像
============================================*/
#img_index {
width:960px; height:360px; /*トップページのヘッダ画像の表示サイズを指定*/
margin:5px 20px; /*マージン*/
}
.infoimg_index {
width:200px; height:150px; /*画像の表示サイズを指定*/
margin:0px 0px 20px 20px; /*マージン*/
float:right; /*画像を右寄せにする*/
}
hr {
clear:both; /*フロート配置をクリアする*/
}
index とbase.cssを保存したら、ブラウザで表示してみましょう。
hr要素によってフロート配置がクリアされれば成功です。
hr要素に clear:both; を指定したことで、hr要素がフロート配置をクリアする役割を果たしています。
small要素でマークアップしているコピーライト表記の部分についても、画像の左側にフロート配置されていたのが、きちんと改行されてから表示されるようになりました。
この画面で確認すると、画像を右にフロートさせたことで、空いた左側のスペースにテキストが流し込まれたのが分かりやすくなったのではないでしょうか。
HTMLだけで要素の配置をしていくと、四角いブロック状のものを縦方向に積み重ねるだけのレイアウトになりがちです。
大きなサイズのブロックであれば縦に積み重ねるだけでも良いかもしれませんが、小さなブロックなら横に並べたほうが、レイアウトがスッキリと収まることもあるでしょう。
「ブロックを横に並べられたらスペースを有効に活用できるのに…」「画像の横にテキストを流し込むにはどうすれば…」これらの問題の多くは、CSSでフロート配置を指定することで解決します。
フロート配置は初心者にはとっつきにくいところがありますが、使いこなせるようになれば、ウェブページ内のちょっとしたレイアウトの整理ができるようになります。
このチュートリアルでは、この先「段組みレイアウト」でもfloatプロパティを使った段組みレイアウトに挑戦するので、floatプロパティの使い方、その動作について、さらに理解を深めてください。
CSSでは、フロート配置などのスタイル指定をすることで、要素の表示位置を変更することができます。
フロート配置を指定する前には左側にあった画像が右寄せされると、なんとなく要素の順序が変わったような印象を受けるかもしれません。
しかし、CSSの指定によって要素の表示位置が変わっても、HTMLソースを変更しない限り、要素の順序は変わりません。
要素の順序が変わったわけではなく、あくまでも表示のされ方が変わっただけなのです。
ウェブページにおける情報構造とスタイリングはそれぞれ独立しているため、CSSの指定によって、どれだけウェブページの見栄えが変わったとしても情報の意味は変わりません。
p要素が段落であることに変わりはなく、p要素の子要素としてimg要素をマークアップしているなら、HTMLソースを変更しない限り画像は段落の一部のままです。
ここまでの制作段階で、サンプルサイトは以下の状態となっています。
<前へ | 目次へ | 次へ> |