Таблиця переповнена за межами 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тег (він застарів)
  • Не використовуйте width, bgcolorатрибути, встановіть їх з допомогою CSS ( widthа background-color)

(припускаючи, що ви можете керувати таблицею, яка була відображена)


Якщо я роблю width: 100%, це ігнорує моє поле: right. що спричиняє прокрутку горизонтальної смуги
Джессі

208

Ви можете запобігти розширенню таблиць за межі батьківського div за допомогою table-layout:fixed.

CSS нижче змусить ваші таблиці розширюватися до ширини div, що його оточує.

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

Я знайшов цей фокус тут .


63
Це змушує всі колони мати однакову ширину ... не дуже корисно
Серж Саган

11
Насправді ви все ще можете робити стовпці різної ширини, вам просто потрібно вказати ширину в <col>s або в першому рядку <td>(порівняно з тим, щоб дозволити їй текти залежно від розміру тексту). З MDN: "фіксовано: ширина таблиці та стовпця встановлюється шириною елементів таблиці та col або шириною першого рядка комірок. Клітинки в наступних рядках не впливають на ширину стовпців."
philfreo

1
Дуже дякую. Це була для мене великою допомогою ...
Parthan_akon

67

Грубою роботою є встановлення display: tableвмісту div.


8
Це чудово, саме те, що я шукав. Щоб допомогти іншим, ось кілька пошукових рядків: я намагався використовувати CSS, щоб помістити батьківський div до переповнення, або підігнати фон, щоб покрити переповнений вміст таблиці. Це спрацювало чудово, дякую!
trisweb

Просто додаток, будь ласка, зверніть увагу на контекст, де це застосовується, це використовується для надання макету таблиці, як поведінка, а отже, наявність інших атрибутів стилю, таких як рядок таблиці, комірка таблиці. Табличні макети не плаваючі. У той час відображення: лише властивості таблиці недостатньо
квест

Також прийшов сюди після багатогодинного копання відповіді. Рядки для пошукової системи: таблиця всередині div не прокручується, firefox. Div з таблицею не прокручується, firefox. У таблиці div немає смуг прокрутки, які відображаються в таблиці
anevaude

2
Я спробував кілька речей, але я просто додаю display: table у верхній батьківський div. Проблему вирішено, дякую.
Günay Gültekin

Найкраще рішення для таблиць з довгими іменами заголовків та довгим вмістом комірок. Дякую!.
Еге Байрак

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"столі є, приберіть його, і воно буде працювати ...

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.