<?xml version="1.0" encoding="UTF-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">
    <title>ブラウザバグ - CSS HappyLife ZERO</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/bug/" />
    <link rel="self" type="application/atom+xml" href="http://css-happylifezero.com/bug/../feed/bug.xml" />
    <id>tag:css-happylifezero.com,2009-11-10:/bug//6</id>
    <updated>2009-11-14T07:30:00Z</updated>
    
    <generator uri="http://www.sixapart.com/movabletype/">Movable Type Commercial 4.261</generator>

<entry>
    <title>floatを指定したらmarginが2倍になってしまった</title>
    <link rel="alternate" type="text/html" href="http://css-happylifezero.com/bug/ie6/float_margin_x2.shtml" />
    <id>tag:css-happylifezero.com,2009:/bug//6.191</id>

    <published>2009-06-24T10:44:24Z</published>
    <updated>2009-11-14T07:30:00Z</updated>

    <summary> IE6でもっとも有名なバグの一つで、これを知らないと色んなところではまってしま...</summary>
    <author>
        <name>hirasawa</name>
        <uri>http://css-happylifezero.com/</uri>
    </author>
    
        <category term="IE6のバグ" scheme="http://www.sixapart.com/ns/types#category" />
    
    
    <content type="html" xml:lang="ja" xml:base="http://css-happylifezero.com/bug/">
        <![CDATA[<p>
IE6でもっとも有名なバグの一つで、これを知らないと色んなところではまってしまうので覚えておきましょう。
</p>
<p>
このバグの発生条件は、floatプロパティに指定した値と同じ方向にmarginプロパティの指定をする事で発生します。<br />
尚、このバグは先行するフロートボックスが有る場合、後続するフロートボックスには発生しません。
</p>

<h3>スクリーンショット</h3>
<p>
<img src="/img/bug/ie6/ss_float_margin_x2.gif" alt="IE6のスクリーンショット" />
</p>

<h3>サンプル</h3>

<pre class="css">
<code>.contentsArea {
  overflow :hidden;
  width: 530px;
  margin: 0 auto;
  padding: 20px 0;
  background: #333;
}

.mainArea {
  float: left;
  width: 290px;
  margin-left: 20px;
  background: #fff;
}

.subArea {
  float: left;
  width: 180px;
  margin-left: 20px;
  background: #36f;;
  color: #fff;
}</code>
</pre>

<pre class="xhtml">
<code>&lt;div class=&quot;contentsArea&quot;&gt;

&lt;div class=&quot;mainArea&quot;&gt;
&lt;p&gt;メインコンテンツ（.mainArea）&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;!-- / .mainArea --&gt;&lt;/div&gt;

&lt;div class=&quot;subArea&quot;&gt;
&lt;p&gt;サブコンテンツ（.subArea）&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;p&gt;text&lt;/p&gt;
&lt;!-- / .subArea --&gt;&lt;/div&gt;

&lt;!-- / .contentsArea --&gt;&lt;/div&gt;</code>
</pre>

<p>
<code>.mainArea</code>に<code>float: left;</code>と<code>margin-left: 20px;</code>の宣言が有る事で、バグが発生します。<br />
同様の宣言が<code>.subArea</code>にも有りますが、こちらにはバグは発生しません。
</p>

<p>
このサンプルを今見ているブラウザで表示すると以下のようになります。
</p>

<dl class="browserView">
<dt>サンプルのブラウザ上の表示</dt>
<dd>

<div id="float_margin_x2Example01">

<div class="contentsArea">

<div class="mainArea">
<p>メインコンテンツ（.mainArea）</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<!-- / .mainArea --></div>

<div class="subArea">
<p>サブコンテンツ（.subArea）</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<!-- / .subArea --></div>

<!-- / .contentsArea --></div>

<!-- / #float_margin_x2Example01 --></div>

</dd>
<!-- / .browserView --></dl>

<h3>解決方法</h3>
<p>
このバグを解決するには、<code>.mainArea</code>に<code>display: inline;</code>を追加する事で可能です。
</p>

<pre class="css">
<code>* html .mainArea {
  display: inline;
}</code>
</pre>

<p>
今回、スターハックで対応していますが、<code>.mainArea</code>に直接宣言を追加しても問題ありません。<br />
とは言え、IE6対策である事を分かりやすくしておいた方が後々ソースを見た時に把握しやすくなると思いますし、思いがけない不具合などの発生を抑える事ができます。<br />
この宣言を追加したサンプルを今見ているブラウザで表示すると以下のようになります。
</p>

<dl class="browserView">
<dt>サンプルのブラウザ上の表示</dt>
<dd>

<div id="float_margin_x2Example02">

<div class="contentsArea">

<div class="mainArea">
<p>メインコンテンツ（.mainArea）</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<!-- / .mainArea --></div>

<div class="subArea">
<p>サブコンテンツ（.subArea）</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<p>text</p>
<!-- / .subArea --></div>

<!-- / .contentsArea --></div>

<!-- / #float_margin_x2Example01 --></div>

</dd>
<!-- / .browserView --></dl>]]>
        
    </content>
</entry>

</feed>
