Подгонка столбца таблицы 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 - это не работает, когда у меня есть более одного столбца, который мне нужно уменьшить до минимального размера.
Octopoid 02

6
Это верно для макета, но таблицы абсолютно подходят для табличных данных.
Octopoid 02

2
Вы должны использовать div вместо таблиц. Затем вы можете назначить процентные значения для их ширины, чтобы она соответствовала ширине страницы.
sqe 02

6
Таблицы не следует использовать для построения структуры . Вы можете использовать таблицы для данных, которые обычно входят в таблицы. Octopoid не использует тег таблицы для структуры, он используется для отображения данных. Это правильное использование тега таблицы.
gewh 02

Ответы:


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

Добавить ж-авто родной самозагрузки 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.