Сила таблицы столбцов фиксированной ширины расширяется на контейнере - PullRequest
10 голосов
/ 14 сентября 2011

Очевидно классическая проблема, но "решения", которые я нашел, не сработали, включая различные другие вопросы по SO.

Если моя таблица шире, чем ее контейнер, я хочу, чтобы ширина ячейки таблицы оставалась фиксированной и не менялась в соответствии с контейнером.

Воспроизводимый HTML (<td> сгенерировано с помощью PHP):

<html>
  <head></head>

  <body>
    <table>
      <tr>
        <?php for($i=0;$i<15;$i++) { 
           echo "<td style='width:150px;border-right:1px solid black;'>".($i+1)."</td>"; 
        } ?>
      </tr>
    </table>
    <div style='background:chartreuse;width:150px'>This is 150px wide.</div>
  </body>
</html>

Что я пробовал:

  • table-layout:fixed
  • span контейнер с display:inline-block набором
  • div контейнер со встроенным блоком

Кажется, должен быть простой способ заставить предыдущий код генерировать таблицу, которая переполняет тело.

Может кто-нибудь помочь?

Редактировать

Возможно, это не ясно из моей предыдущей формулировки, но я хочу сам указать ширину столбца.

Я пытаюсь сделать это без указания явной ширины таблицы. Только ТД заставят стол шире, что (должно?) Заставит контейнер шире.

Кроме того, встроенный CSS доступен только для примера.

Ответы [ 2 ]

11 голосов
/ 14 сентября 2011
<!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>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
</head>

<body>
<div style="margin: 0pt auto; width: 980px;">
  <div style="500px;overflow:scroll">
    <table style="width: 100%; table-layout: fixed;">
      <tbody>
        <tr>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
          <td style="width:150px;border-right:1px solid black;">This is 150px wide.</td>
        </tr>
      </tbody>
    </table>
    <div style="background:chartreuse;width:150px">This is 150px wide.</div>
  </div>
</div>
</body>
</html>
0 голосов
/ 14 сентября 2011

Используя мой HTML в моем вопросе, вот правильная разметка, комплименты @ Bala.

<html>

  <head></head>

  <body>
    <table style='table-layout:fixed;width:100%'>
      <tr>
        <?php for($i=0;$i<15;$i++) { echo "<td style='width:150px;border-right:1px solid black;'>".($i+1)."</td>"; } ?>
      </tr>
    </table>
    <div style='background:chartreuse;width:150px'>This is 150px wide.</div>
  </body>

</html>
...