30

ここで誰かが私を助けてくれることを願っています。できる限り例を単純化しようとしました。

絶対配置の DIV があります。この例では、ブラウザ ウィンドウを埋めます。この div には、コンテンツが大きすぎて DIV が表示できない場合にスクロール バーを提供するための overflow:auto 属性があります。

DIV 内にデータを表示するテーブルがあり、その幅は 100% です。

コンテンツが垂直方向に大きくなりすぎると、垂直スクロール バーが表示され、スクロール バーに対応するためにテーブルが水平方向にわずかに縮小されると思います。ただし、IE7 では、div 内のすべてのコンテンツに対して水平方向に十分なスペースがまだあるにもかかわらず、水平スクロール バーも表示されます。

これは IE 固有のものです。Firefox は完全に動作します。

以下ソース全文。どんな助けでも大歓迎です。

トニー

<!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 runat="server">
    <title>Table sizing bug?</title>
    <style>
        #maxsize
        {
            position: absolute;
            left: 5px;
            right: 5px;
            top: 5px;
            bottom: 5px;
            border: 5px solid silver;
            overflow: auto;
        }
    </style>
</head>
<body>
    <form id="form1" runat="server">
    <div id="maxsize">
        <p>This will be fine until such time as the vertical size forces a
           vertical scroll bar. At this point I'd expect the table to re-size
           to now take into account of the new vertical scroll bar. Instead,
           IE7 keeps the table the full size and introduces a horizontal
           scroll bar.
        </p>
        <table width="100%" cellspacing="0" cellpadding="0" border="1">
        <tbody>
            <tr>
                <td>A</td>
                <td>B</td>
                <td>C</td>
                <td>D</td>
                <td>E</td>
                <td>F</td>
                <td>G</td>
                <td>H</td>
                <td>I</td>
                <td>J</td>
                <td>K</td>
                <td>L</td>
                <td>M</td>
                <td>N</td>
                <td>O</td>
                <td>P</td>
                <td>Q</td>
                <td>R</td>
            </tr>
        </tbody>
        </table>

        <p>Resize the browser window vertically so this content doesn't
           fit any more</p>
        <p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p>
        <p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p><p>Hello</p>
    </div>
    </form>
</body>
</html>

2010 年 3 月 16 日に追加... GWT のソース コードがこの質問をコメントで示していることを指摘するのは興味深いかもしれないと考えました... http://www.google.com/codesearch/p?hl=en#MTQ26449crI /com/google/gwt/user/client/ui/ScrollPanel.java&q=%22hack%20to%20account%20for%20the%22%20scrollpanel&sa=N&cd=1&ct=rc&l=48

4

8 に答える 8

34

IE7 で過度の水平バーに問題がありました。D Carterのソリューションを少し変更して使用しました

<div style="zoom: 1; overflow: auto;">
   <div id="myDiv" style="zoom: 1;">
      <table style="width: 100%"...
      ...
      </table>
   </div>
</div>

7 未満の IE ブラウザーで動作するには、以下を追加する必要があります。

<!--[if lt IE 7]><style> #myDiv { overflow: auto; } </style><![endif]-->
于 2009-05-18T20:02:29.180 に答える
9

Eran Galperinのソリューションでは、水平スクロールをオフにするだけで、テーブルが垂直スクロールバーに重なる可能性があるという事実を説明できません。これは、IEが「100%」の意味を計算してから、垂直スクロールバーが必要であると判断し、残りの水平スペースを再調整できなかったためだと思います。

ただし、上記のcetnarのソリューションはそれを釘付けにします。

<div style="zoom: 1; overflow: auto;">
   <div id="myDiv" style="zoom: 1;">
      <table style="width: 100%">
      ...
      </table>
   </div>
</div>

これは、私のテストではIE6と7で正しく機能します。私の知る限り、IE6では「」ハックは実際には必要ないようです。

于 2009-10-08T19:39:18.377 に答える
5

変化する:

overflow: auto;

に:

overflow-y:hidden;
overflow-x:auto;
于 2008-09-26T12:25:07.897 に答える
5

さて、これは長い間私を悩ませました。右側に余分なパディングがあるデザインをあまりにも多く作成したため、IEは独自のスクロールバーを完全に無視できます。

答えは次のとおりです。2つのdivをネストし、両方にhasLayoutを指定し、内側のdivをオーバーフローに設定します。

<!-- zoom: 1 is a proprietary IE property.  It doesn't really do anything here, except give hasLayout -->

<div style="zoom: 1;">
   <div style="zoom: 1; overflow: auto">
      <table style="width: 100%"...
      ...
      </table>
   </div>
</div>

http://www.satzansatz.de/cssd/onhavinglayout.html
レイアウトの詳細については、こちらをご覧ください

于 2009-01-23T21:26:46.617 に答える
2

これは、GWT トランクで修正されたと報告されています

于 2009-10-13T13:46:25.883 に答える
0

条件ステートメントに慣れていない限り、これで問題が解決するはずです。 IE オーバーフローの修正

于 2008-09-26T12:10:46.150 に答える
0

残念ながら、これは IE の癖です。純粋な XHTML と CSS を使用して Firefox と同じように動作させる方法はありません。

JavaScript を使用してウィンドウのサイズを検出し、テーブルの幅を動的に設定することができます。あなたが本当にそのルートに行きたいのなら、私はそれについてさらに詳細を追加することができます.

于 2008-12-04T20:25:46.817 に答える