Floatプロパティを利用して段組みをしたにもかかわらず、段組みが正しく入れ子状態にならず、枠を突き抜けてしまう現象と対策について紹介します。
現象
Floatプロパティを利用してdivタグで段組みをしたにもかかわらず、段組みが正しく入れ子状態にならず、枠を突き抜けてしまう場合があります。(下図参照)
この現象は、IE7では起きず、IE8,Firefoxで発生することが多いです。
コード例
以下のコードで再現できます。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<link rel="stylesheet" href="div-layout.css" />
</head>
<body>
<div class="container">
<div class="header"></div>
<div class="leftColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="rightColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="footer"></div>
</div>
</body>
</html>
body {
background-color:#e4e1dc;
}
.container {
text-align:center;
margin-left:auto;
margin-right:auto;
background-color: #FFFFFF;
width:680px;
}
.header {
height:64px;
background-color:#303030;
}
.footer {
margin-top:16px;
height:64px;
background-color: #303030;
}
.leftColumn {
margin-top:8px;
width:140px;
float:left;
}
.rightColumn {
margin-top:8px;
width:460px;
float:left;
border-left: 1px solid #303030;
}
原因
多くの場合フッタ部分でclear:leftの指示がされていないためです。
フッタ部のレイアウトを定義するcssスタイル定義にclear:leftを追加するか、フッタ部分の直前でclear:leftのスタイルを指定してください。
修正したコード
上記のコードの場合、以下のコードに修正します。
フッタのクラスに、clear:left; スタイルを追記し、フッタで左寄せをキャンセルする動作にしています。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<link rel="stylesheet" href="div-layout.css" />
</head>
<body>
<div class="container">
<div class="header"></div>
<div class="leftColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="rightColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="footer"></div>
</div>
</body>
</html>
body {
background-color:#e4e1dc;
}
.container {
text-align:center;
margin-left:auto;
margin-right:auto;
background-color: #FFFFFF;
width:680px;
}
.header {
height:64px;
background-color:#303030;
}
.footer {
clear:left; /* 追加 */
margin-top:16px;
height:64px;
background-color: #303030;
}
.leftColumn {
margin-top:8px;
width:140px;
float:left;
}
.rightColumn {
margin-top:8px;
width:460px;
float:left;
border-left: 1px solid #303030;
}
修正結果
追加すると、下図の表示となり正しくレイアウトされます。
別の修正方法
以下のコードの対処法もあります。
endColumnクラスを定義し、段組み終了後に空のendColumnクラスのdiv枠を挿入してfloat:left をクリアします。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<title></title>
<meta charset="utf-8" />
<link rel="stylesheet" href="div-layout.css" />
</head>
<body>
<div class="container">
<div class="header"></div>
<div class="leftColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="rightColumn">
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
aaa<br />
</div>
<div class="endColumn"></div>
<div class="footer"></div>
</div>
</body>
</html>
body {
background-color:#e4e1dc;
}
.container {
text-align:center;
margin-left:auto;
margin-right:auto;
background-color: #FFFFFF;
width:680px;
}
.header {
height:64px;
background-color:#303030;
}
.footer {
margin-top:16px;
height:64px;
background-color: #303030;
}
.leftColumn {
margin-top:8px;
width:140px;
float:left;
}
.rightColumn {
margin-top:8px;
width:460px;
float:left;
border-left: 1px solid #303030;
}
/* 追加 */
.endColumn {
clear: left;
}
著者
iPentecのメインデザイナー
Webページ、Webクリエイティブのデザインを担当。PhotoshopやIllustratorの作業もする。
最終更新日: 2024-01-06
作成日: 2009-11-15