Встановити постійну ширину стовпця таблиці незалежно від кількості тексту в її клітинках?


535

У своїй таблиці я встановив ширину першої комірки в стовпчику, який буде 100px.
Однак коли текст в одній із комірок у цьому стовпчику занадто довгий, ширина стовпця стає більше 100px. Як я можу відключити це розширення?


5
stackoverflow.com/questions/1258416/word-wrap-in-a-html-table може допомогти направити вас у правильному напрямку
Justinl

2
У моєму випадку не сталося розширення, а навпаки: небажане зменшення ширини, незважаючи на мою явну декларацію про ширину. Смішно!
Csaba Toth

Єдиним правильним рішенням цього є використання колективної групи зі значками в ній та встановлення ширини.
MightyPork

table-layout:fixed;це рішення
emfi

Відповіді:


607

Я трохи погрався з нею, тому що у мене виникли проблеми з цим з'ясувати.

Ви повинні встановити ширину осередку (або thчи tdпрацював, я встановив обидва) і встановити table-layoutв fixed. Чомусь ширина комірок залишається фіксованою лише тоді, коли встановлена ​​ширина таблиці (я думаю, це нерозумно, але whatev).

Крім того, корисно встановити overflowвластивість, hiddenщоб запобігти появі зайвого тексту із таблиці.

Ви також не забудьте залишити всі межі та розміри для CSS.

Гаразд, ось що я маю:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

Ось це в JSFiddle

У цього хлопця була схожа проблема: Ширина комірок таблиці - фіксація ширини, загортання / обрізання довгих слів


77
Важливо , щоб помітити це: «Браузер буде потім встановити ширину стовпців на основі ширини осередків в першому рядку таблиці», від stackoverflow.com/questions/570154 / ...
daniloquio

12
Це працює, коли ширина таблиці не фіксована. jsfiddle.net/lavinski/CGCFW/3 Вам просто потрібен динамічний рядок, щоб зайняти залишок місця.
Даніель Літт

2
@DanielLittle також можна встановити ширину таблиці в 1px; з overflow: visibleдля таблиць динамічного розміру, до тих пір , поки розмір осередків фіксований і перелив видно , що не має значення , якщо розмір самої таблиці більше або менше , ніж фактичні клітини.
Ман

Що ви могли б зробити, якщо ваш td має "width = 30%;"
71ГА

Будь ласка, додайте перелив: прихований @ RokoC.Buljan
Alex Grande

177

Дивіться: http://www.html5-tutorials.org/tables/changing-column-width/

Після тегу таблиці використовуйте елемент col. вам не потрібен закриваючий тег.

Наприклад, якщо у вас було три стовпці:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

25
Це! Це відповідь HTML5, і вона химерно працює, не потребуючи перестрибувати дурні обручі. Крім того, ви можете використовувати <col class = "someClassName"> замість того, щоб зберегти свої ширини в CSS і не забруднити свій HTML інформацією про стиль.
Джон Мюнш

2
@ У вас, можливо, виникли інші проблеми, що вирішили цю проблему, такі як CSS, стиль вбудованого тексту або неправильний doctype тощо. Це безумовно працює, це стандартний спосіб встановлення стилів стовпців.
Самер Алібхай

Я не впевнений, чи взагалі це "шлях HTML5". Здається, що colgroup / col у html5 реально використовується лише для маркування прольотів. MDN не згадує про використання атрибуту стилю в тегах col (крім того, що він успадковує його від глобальних атрибутів) і говорить лише про bgcolor: "... використовувати властивість CSS ... для відповідних <td> елементів". developer.mozilla.org/en-US/docs/Web/HTML/Element/col .
Стівен Панцер

5
Для мене працював стиль таблиці table-layout: fixed; width: 100%;. Дякую!
nrodic

Це ще не все / остаточно, але w3schools також не згадує про використання colдля цього. Він пропонує використовувати css, застосований до <td>(або a <th>) - w3schools.com/tags/att_td_width.asp
Don Cheadle

128

Просто додайте <div>тег всередину <td>або <th>визначте ширину всередині <div>. Це вам допоможе. Більше нічого не працює.

напр.

<td><div style="width: 50px" >...............</div></td>

2
Я поєднав це рішення з також вказавши мінімальну ширину / максимальну ширину для тієї ж ширини пікселів, щоб бути на безпечній стороні. Нарешті це працює. Я не знаю, чому мені доводиться запускати всі ці зайві раунди, просто поправді, смішно ...
Csaba Toth

1
Не знаєте, як це краще, ніж встановити той самий css style="width: 50px"на<td>
Дон Чейдл

2
@mmcrae Краще, оскільки він працює, встановлення ширини <td>не робить.
Madbreaks

66

Якщо вам потрібна одна руда більше стовпців фіксованої ширини, а інші стовпці мають змінити розмір, спробуйте встановити і те, min-widthі інше max-widthзначення.


Це працювало для мене, коли явно встановлювати ширину з table-layout: fixed;не робив.
Джордан Мак

Святе лайно! Жодне з інших рішень не працювало або було занадто незграбним! Це спрацювало чудово! Жодного діва теж не потрібно!
NeilRoy

29

Це потрібно записати у відповідний CSS

table-layout:fixed;

краще таблицю сортування з тегами div, тоді всередині div використовуйте переповнення: auto
vinoth kumar

Працював для мене, коли я поєднував його з групами стовпців: <таблиця style = "таблиця-макет: виправлена"> <colgroup> <col style = "width: 50%"> <col style = "width: 50%"> </ colgroup> <tbody> ... </tbody> </table>.
Russ Bateman

Ця стаття Кріса Койєра це добре пояснює: css-tricks.com/fixing-tables-long-strings
cssyphus

24

Що я роблю:

  1. Встановіть ширину td:

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. Встановіть ширину td за допомогою CSS:

    <td style="width:200px; height:50px;">
  3. Знову встановіть ширину як максимальну та мінімальну за допомогою CSS:

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

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

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

тоді:

<td class="td_size">

Розмістіть атрибут класу до будь-якого <td>ви хочете.


Це було єдиним рішенням, яке, здавалося, працює у всіх випадках без накладення зайвих, потенційно небажаних обмежень.
Сем

3

Я цим користувався

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

Не забувайте ntch-child (2) (або 3, 4 і так далі)

таблиця td nth-child (n + 1) {...} охоплюватиме всіх, окрім першої колонки
Ед Рандалл

2

Якщо ви не хочете фіксованого макета, вкажіть клас для розміру стовпця відповідним чином.

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>

2

Це також допомагає, помістити в останню "клітинку наповнювача", шириною: авто . Це займе простір і залишить усі інші розміри, як зазначено.


2

Зробіть прийняту відповідь на невеликі екрани, коли менша за фіксовану ширину.

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

JS Fiddle

https://jsfiddle.net/w9s3ebzt/



1

KAsun має правильну ідею. Ось правильний код ...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

Відповідно до моєї відповіді, тут також можна використовувати головку таблиці (яка може бути порожньою) та застосовувати відносну ширину для кожної комірки голови таблиці. Ширина всіх комірок у тілі таблиці буде відповідати ширині головки їх стовпців. Приклад:

HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

Переглянути результат

Як варіант, використовуйте, colgroupяк пропонується у відповіді Хатітіна


0

Я використовую елемент :: after у комірці, де я хочу встановити мінімальну ширину незалежно від присутнього тексту, як це:

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

Мені не потрібно встановлювати ширину на батьківському столі та не використовувати макет таблиці.


-4

Я виявив, що відповідь KAsun працює краще, використовуючи vw замість px так:

<td><div style="width: 10vw" >...............</div></td>

Це була єдина укладка, яка мені потрібна була для регулювання ширини стовпців


-5

Не потрібно встановлювати "fixed"- все, що вам потрібно, це налаштування, overflow:hiddenоскільки встановлена ​​ширина стовпця.


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