2009-06-26 14 views
1

IE8で正しく動作しないCSSがあります。それはFF3でうまく動作しますが、IE8ではリスト項目の間に白いボックスがあり、全体がバグです。ここIE/FFの互換性に関するCSSの問題

は質問

#golist { 
    width:900px; 
    margin-top:20px; 
    margin-right:auto; 
    margin-left:auto; 
} 
#listing { 
    list-style:none; 
    margin:0; 
    padding:0; 
} 
    #listing li { 
     float:left; 
     display:block; 
     width:128px; 
     background:#fff; 
     border:1px solid #000000; 
     height:96px; 
    } 
    #listing li a { 
     border:none; 
    } 
    #listing p { 
     margin-bottom:0; 
    } 


    /* ---- show-hide elements ---- */ 

    #listing li .show{ 
     display:block; 
     width:128px; 
     height:96px; 
    } 
    #listing li .hide { 
     color:#121212; 
     text-align: left; 
     height: 0; 
     overflow: hidden; 
     background-image:url(bghover.png); 
    } 
    #listing li:hover .hide, #listing li.over .hide { 
     cursor: pointer; 
     height: 96px; 
     width:128px; 
     text-align:center; 
    } 
    #listing li:hover .show, #listing li.over .show { 
     height: 0; 
     overflow: hidden; 
    } 

    #listing li a, #listing li a:visited, #listing li a:active { 
     color:#121212; 
     font-size:12px; 
     text-decoration:none; 
    } 
    #listing li a:hover { 
     color:#121212; 
     text-decoration:none; 

    } 

そして、ここでのCSSはコード自体である:

<div id=golist> 
    <ul id=listing> 
    <li class=show> 
     <a href=#> 
     <img src=images/image.jpg height=96px width=128px border=0> 
     </a> 
     <div class=hide> 
     <a href=link.html>Link</a> 
     <p>Some info</p> 
     </div> 
    </li> 
    </ul> 
</div> 

アイデアが画像と128x96ボックスを持つことです。マウスオーバーすると、レイヤーがテキストでポップアップします。

答えて

2

スタート:

* { padding: 0; margin: 0 } 

は、その後、あなたはすべてのブラウザは、すべての属性に独自のパディングとマージンを追加してそれに応じてコードを調整する必要があります。

あなたはFirefoxとSafariでそれに満足しているポイントにそれを得れば、適切なIEのスタイルシートに引き出すために条件文を使用します。あなたのスタイルシートで

<!--[if IE 6]><link href="css/CSSName_IE6.css" rel="stylesheet" type="text/css"><![endif]--> 
<!--[if IE 7]><link href="css/CSSName_IE7.css" rel="stylesheet" type="text/css"><![endif]--> 
<!--[if IE 8]><link href="css/CSSName_IE8.css" rel="stylesheet" type="text/css"><![endif]--> 

のみオーバーライド必要とするものオーバーライドします。

マスターCSS

.iframestyle { float: left; margin-right: 3px; width: 305px; } 

IE 6

.iframestyle { width: 309px; height: 263px; } 

IE 7

.iframestyle { width: 309px; margin-top: 0px; } 

IE 8

.iframestyle { width: 305px; margin-top: 0px; } 

(何らかの理由でIE 8は、幅の再宣言を必要とするかもしれない。)

3

ここでは、このことについて見つけることができます。

それはIE 6からスタイルを隠すが、標準に準拠ブラウザにそれらが表示されるように、実際にはとても簡単です:http://webdesign.about.com/od/internetexplorer/a/aa082906.htm

これは記事の一部です。子セレクタを使用します。

私が作成した1つのデザインでは、マージンとパディングを必要とする2列のレイアウトを作成しました。これは私がIE 6でページを見たとき、私はボックスモデルの違いを打ったFirefoxのための私の最初のCSSスタイルシートは、このような行が含まれていることを意味:これはFirefoxとSafariで完璧ページラインを作っ

div#nav { width: 150px; margin-left: 20px; } 

しかし、IEでは、nav列が右端に押し過ぎていました。

したがって、私は子セレクタを使用するように行を変換しました。 #nav divのは、bodyタグの子であるので、私は読むためにラインを変更:これはIEのすべてのそれの特性を失うDIV #navを作っやって、もちろん

body > div#nav { width: 150px; margin-left: 20px; } 

をので、私は中に追加する必要がいくつかのIEのスタイルは、IE 6を大丈夫に見えるようにします。私はCSSに次の行を追加:

#nav { width: 150px; margin-left: 10px; } 

私のページは、FirefoxとSafariに良い見て、まだであればCSSのこのラインの配置が重要です。 IEの行が最初に来る必要があります。 FirefoxとSafariはその行を読み込み、文書内のbody> div#navic selectorよりも優先されます。 IE 6は最初の行を読み、スタイルを設定します。子セレクタを認識しないので、子セレクタは無視されます。 IE 7が登場すると、FirefoxやSafariのように動作します。

標準に準拠したブラウザを最初に設計してから、IEのクォークをサポートするようにCSSを変更すると、デザインに手​​間をかけずに、実際に設計するより多くの時間を費やすことになります。使用して、あなたのCSSファイルで、デフォルトのパディングとマージンのすべてをクリアすることにより