2009-07-31 10 views
1

まだテーブルベースのレイアウトを使用しているサイトにCSSベースのタブナビゲーションを追加しています。タブリストをtd内に配置すると、視覚的に「ギャップ」があります。 tdにwidth:100%の空のdivを置くと、タブリストが正しく表示されます。 (テーブル外でも正常に動作します)TDが余った空のDIVを持っているときに、ULが単独のときにレイアウトがIEで変わるのはなぜですか?

divはタブを正しくレイアウトする理由はありますが、コンテンツフリーのdivを追加しないと、より適切な方法がありますか?人々は私が話しているかを見ることができるようにスクリーンショットで、Bacon Driven Coding: Why does layout change in IE when UL is alone in a TD vs having an extra empty DIV?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 

<html xmlns="http://www.w3.org/1999/xhtml" > 
    <head><title> 
    Strange gap 
</title> 
    <style type ="text/css" > 
/* stolen from http://unraveled.com/publications/css_tabs/, then hacked to death */ 

ul.tabnav { /* general settings */ 
border-bottom: 1px solid #cbcbcd; /* set border COLOR as desired */ 
list-style-type: none; 
padding: 3px 10px 3px 10px; /* THIRD number must change with respect to padding-top (X) below */ 
margin: 3px 0px 0px 0px; /* Right on top of the next row */ 
} 

ul.tabnav li { /* do not change */ 
display: inline; 
} 

ul.tabnav li.current { /* settings for selected tab */ 
border-bottom: 1px solid #fff; /* set border color to page background color */ 
background-color: #fff; /* set background color to match above border color */ 
/* border: solid 1px red; */ 
} 

ul.tabnav li.current a { /* settings for selected tab link */ 
background-color: #fff; /* set selected tab background color as desired */ 
color: #000; /* set selected tab link color as desired */ 
position: relative; 
top: 1px; 
padding-top: 4px; /* must change with respect to padding (X) above and below */ 
} 

ul.tabnav li a { /* settings for all tab links */ 
padding: 3px 4px; /* set padding (tab size) as desired; FIRST number must change with respect to padding-top (X) above */ 
border: 1px solid #cbcbcd; /* set border COLOR as desired; usually matches border color specified in #tabnav */ 
background-color: #cbcbcd; /* set unselected tab background color as desired */ 
color: #666; /* set unselected tab link color as desired */ 
margin-right: 0px; /* set additional spacing between tabs as desired */ 
text-decoration: none; 
border-bottom: none; 
} 

/* end css tabs */ 
    </style>   
    </head> 
    <body> 

      <table> 
       <tr> 
        <td> 
        I'm making some tab navigation with css. I copied the code 
        from <a href=" http://unraveled.com/publications/css_tabs/"> http://unraveled.com/publications/css_tabs/</a>, 
        and hacked it up. There's an odd behavior that I see on IE (v 7). 
        There's a gap below. 

        </td> 
       </tr> 
       <tr> 
       <td> 
         <ul class="tabnav"> 
          <li class="current"><a >Home</a></li> 
          <li ><a >Search</a></li> 
         </ul> 
       </td> 
       </tr> 
       <tr> 
        <td> 

        No gap below this 

        </td> 
       </tr> 
       <tr> 
       <td > 
       <div style="width: 100%"><!-- This div forces the menu to render properly in IE7. I don't know why --></div> 
         <ul class="tabnav"> 
          <li class="current"><a >Home</a></li> 
          <li ><a>Search</a></li> 
         </ul> 
       </td> 
       </tr> 
       <tr> 
        <td> 

        why? The difference is the presence of a div with style="width: 100%" on it in the second 
        case. I don't know why this fixes the rendering; I'd like a better way to do it without adding an 
        extra empty div. This page should be in standards mode (or at least non-quirks mode). 

        </td> 
       </tr> 
      </table> 

      For comparison, it works fine outside of a table: 

         <ul class="tabnav"> 
          <li class="current"><a >Home</a></li> 
          <li ><a >Search</a></li> 
         </ul> 

    </body> 
</html> 

が、私は今、私のブログにこれをクロスポストしました:

は、ここに私のテストケースです。ギャップがリストを持つIEの面白い方法によって引き起こされる

Mind the Gap http://www.bacondrivencoding.com/2008/wp-content/uploads/2009/07/ie7.PNG

+0

あなたのコードをコピーして貼り付けただけで、Firefox 3.5とIE 7(バージョン7.0.6000.16830)では私と同じように見えます。 –

+0

テーブルの中にリストを持つ妥当な理由は全く見当たりません。 – You

+0

さて、私はテーブルベースのレイアウトReal Soon Nowからサイトを壊す予定です。私は多くのカスタムコントロールを持つasp.netサイト内にあるコードを継承しました。 (だから私は最小限のテストケースを作ったのです) –

答えて

0

は、ここでのスクリーンショットです。 ulタグには<li>しか含まれていない可能性があるため、IEは明らかにリスト項目間の空白が不適切であり、先行するリスト項目の内側に移動すると考えています(<a>)。

これにより、選択されたタブの白い背景が<ul>の下の枠と重なるようになります(その位置付けのため)。

この例では、これを解決する最も簡単な方法は、単にul.tabnav li.currentの背景色を削除することです。実際、国境は何もしないので、ルールセット全体を削除することができます。そのどれもが、あなたが実際のサイト上でそれを修正するのに役立ちますしない場合


は、最後の手段は<li>タグ外のすべての空白を取り除くためにである可能性があります。例えば。

<ul><li><a>Home</a></li><li>etc.</li></ul> 

またはこのような何かあなたは書式設定の一部うわべだけを保持する場合:

<ul><!-- 
    --><li><a>Home</a></li><!-- 
    --><li>etc.</li><!-- 
    --></ul> 

しかし、その空白はまた、あなたが追加する必要があるだろうので、タブ間の間隔の責任だことすべてですそれを元に戻すための右マージン。

+0

素晴らしい、ありがとう! –

関連する問題