Створення стовпця таблиці Bootstrap відповідно до вмісту


85

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

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">
<table class="table table-responsive">
        <tbody>
            <tr>
                <th>Name</th>
                <th>Payment Method</th>
                <th></th>
            </tr>
            <tr>
                <td>Bart Foo</td>
                <td>Visa</td>
                <td><a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a></td>
            </tr>
        </tbody>
    </table>

Це виглядає так:

Табличний приклад

З деяким підсвічуванням firebug, ширина стовпця вийшла такою широкою:

Ширина стовпця

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

Як зробити так, щоб цей стовпець опускався до ширини його вмісту?

(Як ніколи - Існуючі класи завантажувальної стрічки> чистий CSS> Javascript)


Опублікувавши це, я просто подумав - якщо я просто правильно вирівняю цей стовпець, я думаю, це приблизно те саме - якщо в інших стовпцях буде достатньо даних, щоб їм знадобився простір, вони все одно повернуть його назад. EDIT: Doh - це не працює, якщо у мене є більше одного стовпця, який мені потрібно опустити до мінімального розміру.
Октопоїд

6
Це справедливо для макета, але таблиці абсолютно підходять для табличних даних.
Октопоїд

2
Замість таблиць слід використовувати div. Потім ви можете призначити відсоткові значення для їх ширини, щоб вони відповідали ширині сторінки.
sqe

6
Таблиці не слід використовувати для структури . Ви можете використовувати таблиці для даних, які зазвичай потрапляють у таблиці. Octopoid не використовує тег таблиці для структури, він використовується для відображення даних. Це правильне використання тегу таблиці.
gewh

Відповіді:


158

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

.table td.fit, 
.table th.fit {
    white-space: nowrap;
    width: 1%;
}

7
Гах - я б поставив це за tdправило, а потім застосував до th- це чудово працює, дякую. :) (Сподіваюся, Ви не проти, я теж додав це правило у вашу відповідь)
Октопоїд

22

Перевірено на Bootstrap 4.5 та 5.0

Жодне з рішень не працює для мене. tdОстанній стовпець по- , як і раніше займає всю ширину. Тож ось рішення працює.

Додайте table-fitдо свогоtable

table.table-fit {
    width: auto !important;
    table-layout: auto !important;
}
table.table-fit thead th, table.table-fit tfoot th {
    width: auto !important;
}
table.table-fit tbody td, table.table-fit tfoot td {
    width: auto !important;
}

Ось один для sassвикористання.

@mixin width {
    width: auto !important;
}

table {
    &.table-fit {
        @include width;
        table-layout: auto !important;
        thead th, tfoot th  {
            @include width;
        }
        tbody td, tfoot td {
            @include width;
        }
    }
}

1
це єдине рішення, яке працює з bs4. Дякую тонна!
TheWiz

12

Старе запитання, але я приїхав сюди шукати це. Я хотів, щоб стіл був якомога меншим, відповідно до його вмісту. Рішенням було просто встановити ширину таблиці на довільне невелике число (наприклад, 1 піксель). Я навіть створив клас CSS для обробки:

.table-fit {
    width: 1px;
}

І використовуйте його так:

<table class="table table-fit">

Приклад: JSFiddle


2
Питання стосується лише деяких стовпців таблиці, а не всіх стовпців таблиці
GabiM

2
Так, але, маючи потребу знайти рішення моєї проблеми, я прибув сюди. Я пояснив це у своїй відповіді.
Педро Вальтер,

2
Це все ще недоречна та неправильна відповідь на це питання.
Maritim

8

Додайте до елемента таблиці клас w-auto native bootstrap 4, і ваша таблиця відповідатиме його змісту.

введіть тут опис зображення


1
Цей працював у мене у Firefox, і це фактичне рішення Boostrap.
paperduck

4

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

 <tr>
    <td class="text-nowrap">A</td>
    <td class="w-100">B</td>
 </tr>

1

Ви можете обернути свою таблицю навколо тегу div так, як це допомогло мені також.

<div class="col-md-3">

<table>
</table>

</div>

0

<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />

<h5>Left</h5>
<table class="table table-responsive">
    <tbody>
        <tr>
            <th>Action</th>        
            <th>Name</th>
            <th>Payment Method</th>
        </tr>
        <tr>
            <td  style="width:1px; white-space:nowrap;">
                <a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a>
                <a role="button" class="btn btn-primary btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Edit</a>
                <a role="button" class="btn btn-danger btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Delete</a>                
            </td>        
            <td>Bart Foo</td>
            <td>Visa</td>
        </tr>
    </tbody>
</table>

<h5>Right</h5>

<table class="table table-responsive">
    <tbody>
        <tr>                    
            <th>Name</th>
            <th>Payment Method</th>
            <th>Action</th>            
        </tr>
        <tr>

            <td>Bart Foo</td>
            <td>Visa</td>
            <td  style="width:1px; white-space:nowrap;">
                <a role="button" class="btn btn-default btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">View</a>
                <a role="button" class="btn btn-primary btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Edit</a>
                <a role="button" class="btn btn-danger btn-xs" href="/Payments/View/NnrN_8tMB0CkVXt06nkrYg">Delete</a>                
            </td>            
        </tr>
    </tbody>
</table>

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