divの外でテーブルがオーバーフローしています


94

幅が明示的に宣言されているテーブルが親の外側にオーバーフローしないようにしようとしていますdiv。私はこれを何らかの方法でを使用して実行できると思いますがmax-width、これを機能させることができないようです。

次のコード(ウィンドウが非常に小さい)がこれを引き起こします。

<style type="text/css">
  #middlecol {
    width: 45%;
    border-right:2px solid red;
  }
  #middlecol table {
    max-width:100% !important;
  }
</style>

<div id="middlecol">
  <center>
    <table width="400" cellpadding="3" cellspacing="0" border="0" align="center">
      <tr>
        <td bgcolor="#DDFFFF" align="center" colspan="2">
          <strong>Notification!</strong>
        </td>
      <tr>
        <td width="50">
          <img src="http://www.example.com/img.png" width="50" height="50" alt="" border="0">
        </td>
        <td>
          Lorem ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
        </td>
      </tr>
    </table>
  </center>
 </div>

赤い線はの右の境界線ですdiv。ブラウザウィンドウを小さくすると、テーブルが収まらないことがわかります。


2
トピック外:は使用しないでください<center>。それは何年もの間廃止されてきました。その上、あなたはすでにalign="center"あなたのテーブルにいます。
ЯegDwight

これは残念ながら私にはコントロールできないものです。div内のコンテンツは、実際には私が生成していないファイルから含まれています。CSSにしか触れることができませんが、できれば<center>を削除します。
waiwai933

回答:


24

次のようにして向きを変えます。

<style type="text/css">
  #middlecol {
    border-right: 2px solid red;
    width: 45%;
  }

  #middlecol table {
    max-width: 400px;
    width: 100% !important;
  }
</style>

また、私はあなたに助言します:

  • centerタグを使用しない(非推奨)
  • 使用しないでくださいwidthbgcolor属性を、CSSでそれらを設定する(widthbackground-color

(レンダリングされたテーブルを制御できると仮定)


幅を100%にすると、マージン:右は無視されます。水平バースクロールが発生します
ジェシー

208

を使用して、テーブルが親divを超えて拡張されないようにすることができtable-layout:fixedます。

以下のCSSは、テーブルをその周囲のdivの幅に拡大します。

table 
{
    table-layout:fixed;
    width:100%;
}

ここでこのトリックを見つけまし


63
これにより、すべての列が同じ幅になるように強制されます...あまり役に立たない
Serj Sagan 2013

11
実際には、列を異なる幅にすることもできます。幅を<col>sまたは最初の行の<td>sで指定する必要があります(テキストサイズに基づいてフローさせる)。MDNから:「修正済み:表と列の幅は、表と列の要素の幅またはセルの最初の行の幅によって設定されます。後続の行のセルは列の幅に影響しません。」
philfreo 2014年

1
どうもありがとうございます。これはあなたが私にしてくれた大きな助けでした...
Parthan_akon

67

大まかな回避display: table策は、含まれているdiv を設定することです。


8
これは見事で、まさに私が探していたものです。他の人を助けるために、いくつかのグーグル可能な文字列があります:私はCSSを使用して親divをオーバーフローに合わせるか、背景をオーバーフローするテーブルコンテンツをカバーするようにしようとしました。これは完全に機能しました。どうもありがとうございました。
trisweb 2012

補遺。これが適用されるコンテキストに注意してください。これは、動作のようなテーブルレイアウトを伝え、それにより、テーブル行、テーブルセルなどの他のスタイル属性の存在を伝えるために使用されます。表形式のレイアウトはフロートされません。時には、display:tableプロパティだけでは十分ではありません
questzen

何時間も答えを求めて、ここにもやって来ました。検索エンジンの文字列:div内のテーブルはスクロールしません、Firefox。テーブル付きのDivはスクロールしません、Firefox。div内のテーブルに表示されるスクロールバーはありません。
2015

2
いくつかのことを試しましたが、display:tableを最上位の親divに追加するだけです。問題は解決しました。ありがとうございます。
GünayGültekin

長いヘッダー名と長いセルコンテンツを持つテーブルに最適なソリューション。ありがとう!
Ege Bayrak

34

上記の解決策をすべて試しましたが、うまくいきませんでした。上下に3つのテーブルがあります。最後のものがオーバーフローしました。私はそれを使ってそれを修正しました:

/* Grid Definition */
table {
    word-break: break-word;
}

エッジモードのIE11の場合、これを次のように設定する必要があります。 word-break:break-all


12

最初はジェームス・ローラックの方法を使いました。ただし、これによりの幅がすべて変更されましたtd

私にとっての解決策はwhite-space: normal、カラムに使用することでした(これはに設定されていますwhite-space: nowrap)。このようにして、テキストは常に壊れます。を使用word-wrap: break-wordすると、単語の途中でも、必要なときにすべてが壊れることが保証されます。

CSSは次のようになります。

td, th {
    white-space: normal; /* Only needed when it's set differntly somewhere else */
    word-wrap: break-word;
}

word-wrap: break-wordテーブル内の単語が読みにくくなる可能性があるため、これが常に望ましい解決策になるとは限りません。ただし、テーブルを適切な幅に保ちます。


5

上記のほとんどすべてを試しましたが、うまくいきませんでした...以下は

word-break: break-all;

これは、親div(テーブルのコンテナー)に追加されます。



-3

width="400"テーブルの上にがあり、それを削除すると動作します...

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.