<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>WEBの落書帳</title>
    <link rel="alternate" type="text/html" href="http://webcreator-note.com/" />
    <link rel="self" type="application/atom+xml" href="http://webcreator-note.com/atom.xml" />
    <id>tag:webcreator-note.com,2008-09-08://1</id>
    <updated>2008-11-05T01:26:55Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Pro 4.25</generator>

<entry>
    <title>[CSS]floatによるブラウザ間のズレの問題(2)</title>
    <link rel="alternate" type="text/html" href="http://webcreator-note.com/css/cssfloat2.php" />
    <id>tag:webcreator-note.com,2008://1.9</id>

    <published>2008-11-04T06:15:40Z</published>
    <updated>2008-11-05T01:26:55Z</updated>

    <summary> floatを使ったコーディングで気をつけることその２です。 ...</summary>
    <author>
        <name>ミルト</name>
        
    </author>
    
        <category term="CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://webcreator-note.com/">
        <![CDATA[<p>
floatを使ったコーディングで気をつけることその２です。
</p>]]>
        <![CDATA[<p>
「floatを使ったコーディングは難しい」と最初は思うかもしれませんが、きちんとしたルールに則って使ってあげれば
決して難しいことではないのです。<br />
フルCSSレイアウトをマスターする上でも重要になりますので必ずマスターしてくださいね。
</p><p>
さて、前回はIE6のバグでしたが今回はfloatの解除に関する問題です。<br />
基本的にfloatを使ったら必ず<span class="aka">clearで解除する</span>と覚えて下さい。<br />
このエントリでは、&lt;img&gt;要素にfloatを付けて文字を回り込ませるという使い方ではなく、<br />
&lt;div&gt;等のブロックレベル要素をfloatしてレイアウトを組む時の方法になります。
</p>

<h3>ブロックレベルとインラインレベル</h3>
<p>
まず、「ブロックレベル」と「インラインレベル」ってご存知でしょうか。<br />
htmlタグと呼ばれる要素は２種類に分別することができます。それが上の２つです。<br />
見分け方はいたって簡単で、並べると横に並んでいくか縦に並んでいくかの違いです。
</p><p>
ブロックレベル要素...<b>並べると縦に並んでいく</b><br />
(例)&lt;h1&gt;,&lt;p&gt;,&lt;div&gt;,&lt;table&gt;,&lt;ul&gt;
</p><p>
インラインレベル要素...<b>並べると横に並んでいく</b><br />
(例)&lt;a&gt;,&lt;span&gt;,&lt;img&gt;,&lt;font&gt;,&lt;strong&gt;
</p><p>
たいていの場合、&lt;div&gt;要素を使ってレイアウトをすると思いますが、<br />
この&lt;div&gt;はブロックレベル要素ですので本来横に並ぶことはありません。<br />
だから、floatを使用して複数の&lt;div&gt;を横に並べるという作業が必要となるのです。
</p>


<h3>解除をしないとどうなるか</h3>


<textarea name="code" id="code" class="css" rows="1" cols="1">
　・
　・
　・
<style type="text/css" rel="stylesheet">
<!--
#wrapper{
  width: 290px;
  padding: 10px;
  background-color: #eee;
}

#box1{
  width: 130px;
  height: 150px;
  background-color: #fc9346;
  float: left;
}

#box2{
  width: 130px;
  height: 150px;
  float: right;
  background-color: #95fff9;
}

#box3{
  width: 250px;
  margin-top: 50px;
  background-color: #d3ff6b;
}
-->
</style>
</head>
<body>
<div id="wrapper"><!-- ▼wrapper▼ -->
<div id="box1">box1</div>
<div id="box2">box2</div>
<div id="box3">box3</div>
</div><!-- ▲wrapper▲ -->
</body>
</html>
</textarea>
<p>
<b>Firefox</b><br />
<img src="/image/002_01.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>IE7</b><br />
<img src="/image/002_02.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>IE6</b><br />
<img src="/image/002_03.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>Google Chrome</b><br />
<img src="/image/002_04.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>Opera</b><br />
<img src="/image/002_05.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
またブラウザによって分かれてしまいますね。<br />
ちゃんと解除しないといけないことが分かります。
</p>

<h3>clearを追加してみる</h3>
<p>
それでは、上記のソースの#box3にclear: both;を追加してfloatを解除してみます。
</p><p>
<b>Firefox</b><br />
<img src="/image/002_06.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>IE7</b><br />
<img src="/image/002_07.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>IE6</b><br />
<img src="/image/002_08.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>Google Chrome</b><br />
<img src="/image/002_09.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
<b>Opera</b><br />
<img src="/image/002_10.gif" alt="floatを使ったコーディング" />
</p>
<div style="margin-bottom: 4em;"><span></span></div>
<p>
まだ統一されないですね。<br />
どこが違うかと探してみると、IE以外は#box3のmargin-top: 50px;が効いていません。<br />
先ほどから、floatはclearで解除といっていましたが、実は正確に言うと<a href="http://mb.blog7.fc2.com/blog-entry-62.html" target="_blank">clearは「floatの解除」ではない</a>のです。<br />
覚えていただきたいのは、<span class="ala">clearを使った時にはmargin-topを使わない方がいい</span>ということです。
</p>


<h3>解決法</h3>
<p>
では、どうすればいいか？<br />
この場合だと#box1か#box2の両方にmargin-bottomを指定することで解決することができます。<br />
他には、#box3の前に空の&lt;div&gt;を作りそこにclearを指定することで#box3にmargin-topが使えるようになります。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
<div id="wrapper"><!-- ▼wrapper▼ -->
<div id="box1">box1</div>
<div id="box2">box2</div>
<div style="clear: both;"></div>
<div id="box3">box3</div>
</div><!-- ▲wrapper▲ -->
</textarea>



<h3>clearを使わない方法</h3>
<p>
以下のコードを親要素に指定する事で解決する事が出来ます。<br />
ここでの親要素は「wrapper」ですので「wrapper」に指定しています。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
#wrapper:after {
  content : "";
  display : block;
  visibility: hidden;
  height : 0;
  clear : both;
}
</textarea>
<p>
CSS全文記述すると以下のようになります。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
#wrapper{
  width: 290px;
  padding: 10px;
  background-color: #eee;
}

#wrapper:after {
  content : "";
  display : block;
  visibility: hidden;
  height : 0;
  clear : both;
}

#box1{
  width: 130px;
  height: 150px;
  margin-bottom: 50px;
  background-color: #fc9346;
  float: left;
}

#box2{
  width: 130px;
  height: 150px;
  margin-bottom: 50px;
  float: right;
  background-color: #95fff9;
}

#box3{
  width: 250px;
  background-color: #d3ff6b;
  clear: both;
}
</textarea>]]>
    </content>
</entry>

<entry>
    <title>[CSS]floatによるブラウザ間のズレの問題(1)</title>
    <link rel="alternate" type="text/html" href="http://webcreator-note.com/css/cssfloat1.php" />
    <id>tag:webcreator-note.com,2008://1.8</id>

    <published>2008-10-28T05:18:18Z</published>
    <updated>2008-10-28T10:02:50Z</updated>

    <summary>  テーブルレイアウトからCSSでのレイアウトに切り替える時に最初に覚える要素「...</summary>
    <author>
        <name>ミルト</name>
        
    </author>
    
        <category term="CSS" scheme="http://www.sixapart.com/ns/types#category" />
    
    <category term="css" label="CSS" scheme="http://www.sixapart.com/ns/types#tag" />
    <category term="html" label="html" scheme="http://www.sixapart.com/ns/types#tag" />
    
    <content type="html" xml:lang="ja" xml:base="http://webcreator-note.com/">
        <![CDATA[ <p>
テーブルレイアウトからCSSでのレイアウトに切り替える時に最初に覚える要素「float」<br />
今回はその時の注意点と検証と解決法を紹介します。
</p>]]>
        <![CDATA[<p>
このカテゴリでは、CSSでのブラウザ間のズレの修正やありがちな間違い、<br />
IE6対策などを紹介します。
</p>

<h3>テーブルレイアウトからCSSレイアウトへ</h3>
<p>
第１回は、最初につまづきやすいfloatを使ったレイアウトです。<br />
テーブルレイアウトからいざフルCSSで記述してみたもののIEと他のブラウザの見え方が違う<br />
ということで諦めてしまう方も少なからずいると思います。<br />
私も最初にCSSを使ってコーディングをした時苦しんだものです。
</p><p>
では最初にテーブルレイアウトで、背景が灰色で横幅350pxのボックスの中に<br />
50pxの間隔を空けて100pxのボックスを２つ配置します。<br />
以下のようになります。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">

<table width="350" height="50" bgcolor="#eeeeee" cellpadding="0" cellspacing="0" border="0">
<tr>
<td width="50">&nbsp;</td>
<td width="100" bgcolor="#00ff00">&nbsp;</td>
<td width="50">&nbsp;</td>
<td width="100" bgcolor="#0000ff">&nbsp;</td>
<td width="50">&nbsp;</td>
</tr>
</table>
</textarea>
<p>
実際に表示すると以下のようになります。
</p><p>
<img src="/image/001_1.jpg" border="1" alt="サンプル" />
</p>
<h3>floatを使う</h3>
<p>
それぞれのボックス名をcontainer,box1,box2にしてCSSで上記のレイアウトのように並べてみます。
</p>


<textarea name="code" id="code" class="css" rows="1" cols="1">
#container{
  width: 350px;
  height: 50px;
  background-color: #eee;
}

#box1{
  width: 100px;
  height: 50px;
  float: left;
  margin-left: 50px;
  background-color: #0f0;
}

#box2{
  width: 100px;
  height: 50px;
  float: left;
  margin-left: 50px;
  background-color: #00f;
}
</textarea>
<p>
プレビューは以下の通りです。今回はブラウザ毎に見てみます。
</p><p>
<b>Firefox3</b><br />
<img src="/image/001_1.jpg" border="1" alt="サンプル" />
</p><p>
<b>IE7</b><br />
<img src="/image/001_1.jpg" border="1" alt="サンプル" />
</p><p>
<b>IE6</b><br />
<img src="/image/001_2.jpg" border="1" alt="サンプル" />
</p><p>
<b>Opera</b><br />
<img src="/image/001_1.jpg" border="1" alt="サンプル" />
</p><p>
<b>Google Chrome</b><br />
<img src="/image/001_1.jpg" border="1" alt="サンプル" />
</p><p>
IE6だけ表示が異なってしまいました。<br />
結論からいいますと、これは<b>IE6のバグ</b>になります。<br />
floatを指定した方向と、marginを指定した方向が同じ方向の場合、<br />
<strong style="color: #f00;">IE6のみ倍のmarginが適用されてしまいます</strong>。<br />
ただし、そのmarginは親要素に対してのみです。


</p>
<h3>解決法は色々ありますが...</h3>
<p>
IE6だけ違うのですからIE6のみ適用するCSSを記述すればいい。<br />
所謂CSSハックです。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
/* hide from Mac IE \*/
* html #box1{
  margin-left: 25px;
}
/* */ 
</textarea>
<p>
最初に言っておきますと<b>ハックは出来る限り使わない方がいい</b>です。<br />
何故なら、これは苦肉の策であってその後のメンテナンス性も考えるととてもオススメできる方法ではありません。<br />
それではmarginではなくpaddingを使うのはどうでしょうか。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
#box1{
  width: 100px;
  height: 50px;
  float: left;
  padding-left: 50px;
  background-color: #0f0;
}
</textarea>
<p>
これでも一応は解決します。このIE6のバグはmarginのみ発生するのでpaddingを使えば問題がありません。<br />
しかし、box1でpaddingを使いたくなった場合、box1内にまた&lt;div&gt;&lt;/div&gt;を作る構造にしなくてはなりません。
</p>
<h3>最善の解決策</h3>
<p>
最初からこれだけ書けばよかった気もしますが、上記の方法では問題があることを言いたかったのです。<br />
それでは解決方ですが、<strong style="color: #f00;">display&#58; inline&#59;</strong>を追加するだけになります。
</p>
<textarea name="code" id="code" class="css" rows="1" cols="1">
#box1{
  width: 100px;
  height: 50px;
  float: left;
  margin-left: 50px;
  background-color: #0f0;
  display: inline;
}
</textarea>
<p>
本来&lt;div&gt;要素はブロックレベルですから、display&#58; inline&#59;を付加することによってインラインレベルになって
しまうのではと思われるかもしれませんが、float属性が付いている時のみdisplay要素は無視される仕様になっています。<br />
これで全く問題なく解決することが出来ます。
</p>
]]>
    </content>
</entry>

<entry>
    <title>当サイトについて</title>
    <link rel="alternate" type="text/html" href="http://webcreator-note.com/post.php" />
    <id>tag:webcreator-note.com,2008://1.7</id>

    <published>2008-10-27T04:27:15Z</published>
    <updated>2008-10-27T04:29:40Z</updated>

    <summary> 当サイトはWEBのクリエイター達が合同で更新するサイトです。 htmlは勿論、...</summary>
    <author>
        <name>ミルト</name>
        
    </author>
    
    
    <content type="html" xml:lang="ja" xml:base="http://webcreator-note.com/">
        <![CDATA[<p>
当サイトはWEBのクリエイター達が合同で更新するサイトです。<br />
htmlは勿論、CSS、JavaScript、Flash、PHP等やデザイン、ユーザビリティ、運営等、<br />
複数人だからこそできる多岐多様に及びWEBの情報を発信していくことを目的としています。
</p><p>
今はまだベータ版みたいな状態でちゃんとした「about」ページもないので簡単に当サイトの概要を
書いておきます。
</p>]]>
        
    </content>
</entry>

</feed>

