CSS-комірка таблиці однакової ширини


148

У мене є невизначена кількість елементів комірок таблиці всередині контейнера таблиці.

<div style="display:table;">
  <div style="display:table-cell;"></div>
  <div style="display:table-cell;"></div>
</div>

Чи існує чистий CSS спосіб отримати комірки таблиці рівними по ширині, навіть якщо в них вміст різного розміру?

Дякую.

Редагувати: Максимальна ширина означає, що я думаю, скільки у вас є комірок?


Як визначається кількість стовпців: клієнтська чи серверна сторони?
— Ямбріансвіт

Після того, як я спробував кілька методів, я думаю, якщо ви хочете мати кілька рядків і хочете, щоб вони були однакової ширини, використовуйте flexbox замість таблиці
— Ерік

Відповіді:


299

Ось робоча загадка з невизначеною кількістю комірок: http://jsfiddle.net/r9yrM/1/

Ви можете зафіксувати ширину для кожного з батьків div( таблиці ), інакше це буде 100%, як зазвичай.

Хитрість полягає у використанні table-layout: fixed;та деякій ширині кожної комірки для її запуску, тут 2%. Це призведе до іншої алгоритми таблиці, тієї, де браузери дуже намагаються дотримуватися вказаних розмірів.
Перевірте Chrome (і IE8 - якщо потрібно). З останнім Safari все гаразд, але я не можу згадати сумісність цього фокусу з ними.

CSS (відповідні інструкції):

div {
    display: table;
    width: 250px;
    table-layout: fixed;
}

div > div {
    display: table-cell;
    width: 2%; /* or 100% according to OP comment. See edit about Safari 6 below */
}

EDIT (2013): Остерігайтеся Safari 6 в OS X, він має table-layout: fixed; помилку (або, можливо, просто інший, сильно відрізняється від інших браузерів. Я не перечитав макет таблиці таблиць CSS2.1 REC;)). Будьте готові до різних результатів.


1
Дякую, це здається відповіддю. Я не знаю чому, але якщо я встановив ширину на 2%, він фактично видаляє кожен стовпчик на 2%. Але 100%, здається, працює чудово. Будь-яка ідея, що там відбувається?
— Гаррі

3
Я зіткнувся з тією ж проблемою, що потрібно використовувати 100% ширину на стільниках таблиці. Це сталося через чіткий виправлення, застосований до батьківського елемента з display: table. Оскільки комірки зі 100% шириною не працюють в IE8, для мене виправлення було видалити очищення. Сподіваємось, це комусь допомагає.
— Алекс Барретт

Щоб розширити цю проблему, це працює для простих макетів (1x1, 2x2, 3x3 тощо), але для складних макетів (1x3x1, 1x2x3x4 тощо) потрібні додаткові divs, display:tableщоб вони використовувались так, як ніби вони були рядками, а не display:tabl-rowяк деякі могли очікувати. Приклад тут .
— filoxo

2
100% ширина не працювала на IE8 (здивування), але початкова пропозиція на 2% дає правильні результати.

1
100% ширина також не працювала в IE10. Він зробив роботу в IE11. І 1% -на ширина, зроблена Mobile Safari, демонструє надто вузькі колонки. Тож я в кінцевому підсумку використовував CSS-хак, орієнтований на IE9 та IE10: Злом .my-cell { width: 100%; }; @media screen and (min-width:0\0) { .my-cell { width: 1%; } }CSS звідси: stackoverflow.com/a/24321386/6962
— Henrik N

29

HTML

<div class="table">
    <div class="table_cell">Cell-1</div>
    <div class="table_cell">Cell-2 Cell-2 Cell-2 Cell-2Cell-2 Cell-2</div>
    <div class="table_cell">Cell-3Cell-3 Cell-3Cell-3 Cell-3Cell-3</div>
    <div class="table_cell">Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4Cell-4</div>
</div>​

CSS

.table{
    display:table;
    width:100%;
    table-layout:fixed;
}
.table_cell{
    display:table-cell;
    width:100px;
    border:solid black 1px;
}

DEMO.


Тут не працює загадка. У клітинах завжди 25%.
— netAction

Це рішення не дуже масштабоване для нічого динамічного, наприклад, навігації по сайту, керованої клієнтом.
— Ерік К

Напевно, ви праві і btw, це майже два роки anser @QuantumDynamix. Маєте щось краще на увазі? Чому б просто не поділитися своєю ідеєю, нехай світ знає кращі речі :-)
— Альфа

15

Просто використання max-width: 0в display: table-cellелементі працювало для мене:

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  max-width: 0px;
  border: 1px solid gray;
}
<div class="table">
  <div class="table-cell">short</div>
  <div class="table-cell">loooooong</div>
  <div class="table-cell">Veeeeeeery loooooong</div>
</div>


1
Тут просто закидають, але 0pxце не є дійсною одиницею. Це просто повинно бути 0.
— Гевін

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

6

Замініть

  <div style="display:table;">
    <div style="display:table-cell;"></div>
    <div style="display:table-cell;"></div>
  </div>

з

  <table>
    <tr><td>content cell1</td></tr>
    <tr><td>content cell1</td></tr>
  </table>

Подивіться на всі проблеми, які намагаються змусити діви виконуватись як таблиці. Вони повинні були додати table-xxx, щоб імітувати макети таблиць

Таблиці підтримуються і працюють дуже добре у всіх браузерах. Навіщо їх ровити? той факт, що вони повинні були імітувати, це доказ того, що вони зробили свою справу і добре.

На мою думку, використовуйте найкращий інструмент для роботи, і якщо ви хочете табличні дані або щось, що нагадує табличні таблиці, просто працюйте.

Дуже пізня відповідь, яку я знаю, але яку варто озвучити.


2
+1 тому, що це працює і тому, що CSS все ще працює, у 2014 році це не робиться правильно у всіх браузерах.
— Юк

6
Іноді потрібно мати табличний макет для речей, які не є табличними даними. наприклад , елементи навігації , які слід використовувати <nav>, <ul>і т.д.
— Бен

1
Для чуйності ідеально мати розкладку на основі діва. Відображення таблиць у мобільних пристроях - це біль у дупі.
— Пабло Рінкон

Намагання наслідувати таблицю виключає чуйний дизайн. Я згоден, якщо ви хочете чуйний дизайн, столи - це не вибір.
— DeveloperChris

2
Таблиці були створені для відображення табличних даних: це було, і це будуть HTML-елементи, які використовуються для відображення табличних даних, чому б хто-небудь викидав їх (з цією метою)? Макет таблиці не імітується : він вже деякий час є частиною рекомендації CSS2, і трапляється, що розташування таблиць HTML за замовчуванням є display: table-etc(цілком природно). Я не витрачаю своїх днів на створення посилань, що імітують діви чи диви, що імітують таблиці, прольоти чи входи: я просто використовую CSS для стилізації. Нарешті, удачі з IE9 для застосування будь-якого іншого значення displayвластивості до елементів таблиці, tr, td.
— FelipeAls

1

це спрацює для всіх

<table border="your val" cellspacing="your val" cellpadding="your val" role="grid" style="width=100%; table-layout=fixed">
<!-- set the table td element roll attr to gridcell -->
<tr>
<td roll="gridcell"></td>
</tr>
</table>

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


0

Ось вам:

http://jsfiddle.net/damsarabi/gwAdA/

Ви не можете використовувати ширину: 100 пікселів, оскільки дисплей є стільниковою коміркою. Однак ви можете використовувати Max-width: 100px. то ваша коробка ніколи не набере більше 100 пікс. але вам потрібно додати переповнення: приховано, щоб переконатися, що конкурент не кровоточить в інші клітини. Ви також можете додати пробіл: spacerap, якщо хочете утримати висоту від збільшення.


0

Це можна зробити, встановивши стиль стільника комірки на width: autoта вміст порожнім. Стовпці тепер однакові, але вміст не містить.

Щоб вставити вміст у комірку, додайте divcss:

position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;

Також потрібно додати position: relativeдо комірок.

Тепер ви можете розмістити фактичний вміст у розказаному діві вище.

https://jsfiddle.net/vensdvvb/

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