Використовуючи CSS td ширину абсолюту, розташуйте


103

Будь ласка, дивіться цей JSFIDDLE

td.rhead { width: 300px; }

Чому ширина CSS не працює?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

Крім того, які ефекти позиції: фіксований, абсолютний тощо мають на ширину td, якщо такі є? Я шукаю причину більше, ніж виправлення. Я сподіваюся зрозуміти, як це працює.

td ширина не 300px за бажанням


display: table-cellне поважає width(так само, як це не працювало б display: inline). Я не розумію, про що ви питаєтеposition fixed|absolute
Вибухові таблетки

@ExplosionPills, оскільки в моєму фактичному коді у мене встановлена ​​таблиця фіксованою. Як ви здогадуєтеся, я намагаюся досягти часової шкали вгорі сторінки. Тому я просто констатую, якщо атрибут позиції впливає на ширину.
Джейк

Відповіді:


144

Це може бути не те, що ви хочете почути, але display: table-cellне враховує ширину і буде згорнуте на основі ширини всієї таблиці. Ви зможете обійти це легко, просто розмістивши display: blockелемент всередині самої комірки таблиці, ширину якої ви вказали, наприклад

<td><div style="width: 300px;">wide</div></td>

Це не повинно мати великої різниці, якщо <table>саме воно є position: fixedабсолютним, оскільки положення комірок статичне відносно таблиці.

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

EDIT: Я не можу брати кредит, але, як йдеться в коментарях, ви можете просто використовувати min-widthзамість цього widthна комірці таблиці.


31
+1 - раніше я використовував це рішення. Як не дивно, min-widthна TD, схоже на роботу в Chrome і FF: jsfiddle.net/Mkq8L/7
Tim Medora

2
Власне, як завжди, розміщуючи питання, я виявляю, що min-width: 300pxпрацює! (@TimMedora у вас було на кілька секунд швидше!)
Джейк

Я думаю, що найкраща відповідь - це згадування дисплея: поведінка стільникових комірок. Дякую!
Джейк

Така поведінка для мене має сенс: що має статися, якщо встановити дві різні ширини для двох комірок на одному стовпчику? З min-widthцим немає жодної проблеми, візьміть найбільшу.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
Це хак, я не рекомендую. Об'єднана ширина td переповнює ширину таблиці. У цьому проблема. Не слід це виправляти, додаючи більше структур HTML.
Девід

28

Вам краще використовувати table-layout: fixed

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

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

Тут він застосований до оригінального прикладу: JSFIDDLE. Ви зауважите, що решта стовпців розбиваються та перекривають їх вміст. Ми можемо це виправити за допомогою ще декількох CSS (все, що мені потрібно було зробити, це додати клас до першої TR):

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

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

Тут в дії: JSFIDDLE


11

Причина, що вона не працює у наданому вами посиланні, полягає в тому, що ви намагаєтеся відобразити стовпчик з 300 пікселями PLUS 52 стовпчики в прольоті 7 стовпців кожен. Скоротіть кількість стовпців і це працює. Ви не можете помістити стільки на екрані.

Якщо ви хочете змусити стовпці підходити, спробуйте встановити:

body {min-width:4150px;}

дивіться мій jsfiddle: http://jsfiddle.net/Mkq8L/6/ @mike Я поки не можу коментувати.


2
+1 для виявлення того, що поріг ширини таблиці збільшується зі збільшенням ширини тіла.
Джейк

8

Причина полягає в тому, що ви не вказали ширину таблиці, а весь ваш куточок td переповнюється.

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

table{
    width:5000px;
}

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

Я вважаю, що те, що відбувається, полягає в тому, що ваші TD-файли значно перевищують стандартну ширину таблиці. Що ви могли побачити, якщо ви витягуєте приблизно 45 своїх Td в кожній tr, (тобто код, який ви вказали у своєму запитанні, а не jsfiddle), він працює точно


2
+1, щоб згадати, що існує поріг ширини таблиці. Проблема полягає в тому, що іноді ми не знаємо загальної ширини перед рукою. Яка ширина таблиці за замовчуванням?
Джейк

Я насправді не знаю. Все, що я знаю, - якщо у вас занадто багато стовпців, таблиця збільшиться, зробивши всі дочірні ширини непотрібними. Я вже стикався з цим раніше, але мені ще належить з'ясувати значення за замовчуванням. Можливо, мені слід це задати як питання.
Він Хуй,

Я вважаю, що я вирішив це питання stackoverflow.com/questions/14767459/…
Він Хуй,

Це фактична відповідь замість високо оціненої. Ширина може бути встановлена, лише якщо вміст не переповнює всю ширину таблиці.
Девід

5

Спробуйте це спрацювати.

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
ОЦЕ ТАК! Дякую ♥
ivahidmontazer

Будь ласка, додайте пояснення, чому / як цей код допомагає ОП. Це допоможе надати відповідь, з якого майбутні глядачі можуть навчитися. Дивіться це мета-питання та його відповіді для отримання додаткової інформації.
Єретична мавпа

1
Зауважте, що атрибут ширини застарілий у HTML5.
simhumileco

5

Спробуйте використовувати

table {
  table-layout: auto;
}

Якщо ви використовуєте Bootstrap, клас за замовчуванням tableмає table-layout: fixed;.


4

Використовуйте властивість компонування таблиці та значення "фіксованого" на вашій таблиці.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

Після налаштування всієї ширини таблиці тепер можна встановити ширину у% від td.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

Ви можете дізнатися більше про це за посиланням: http://www.w3schools.com/cssref/pr_tab_table-layout.asp


3

Моє шалене рішення.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

Якщо ширина таблиці, наприклад, 100%, спробуйте використовувати процентну ширину на td, наприклад, 20%.


2

Оберніть вміст з першої комірки в div, наприклад, так:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

Ось jsfiddle .


1

Ви також можете використовувати:

.rhead {
    width:300px;
}

але це буде лише з деякими браузерами, якщо я правильно пам’ятаю, IE8 цього не дозволяє. Понад усе, безпечніше просто помістити width=""атрибут у <td>себе.

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