Độ rộng tự động của cột bảng CSS


100

Với những điều sau đây, làm cách nào để tạo kích thước cột cuối cùng của tôi tự động cho nội dung của nó? (Cột cuối cùng sẽ tự động thay đổi kích thước chiều rộng cho nội dung. Giả sử tôi chỉ có 1 phần tử li, nó sẽ thu nhỏ lại so với có 3 phần tử li, v.v.):

            <table cellspacing="0" cellpadding="0" border="0">
            <thead><!-- universal table heading -->
                <tr>
                    <td class="tc first"><input type="checkbox" value="true" name="data-1-check-all" id="data-1-check-all"></td>
                    <td class="tc">Type</td>
                    <th>File</th>
                    <th>Sample</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td>Division 5</td>
                </tr>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td class="last">
                        <ul class="actions">
                            <li><a class="iconStats" href="#">Statystyki</a></li>
                            <li><a class="iconEdit" href="#">Edytuj</a></li>
                            <li><a class="iconDelete" href="#">Usuń</a></li>

                        </ul>
                    </td>
                </tr>
            </tbody>
        </table>

Css:

table { table-layout: fixed; width: 100%; }
table tr { border-bottom:1px solid #e9e9e9; }
table thead td, th {border-left: 1px solid #f2f2f2; border-right: 1px solid #d5d5d5; background: #ddd url("../images/sprites4.png") repeat-x scroll 0 100% ; font-weight: bold; text-align:left;}
table tr td, th { border:1px solid #D5D5D5; padding:15px;}
table tr:hover { background:#fcfcfc;}
table tr ul.actions {margin: 0;}
table tr ul.actions li {display: inline; margin-right: 5px;}

Câu trả lời:


218

Những điều sau đây sẽ giải quyết vấn đề của bạn:

td.last {
    width: 1px;
    white-space: nowrap;
}

Giải pháp dựa trên lớp linh hoạt

Và một giải pháp linh hoạt hơn là tạo một .fitwidthlớp và áp dụng lớp đó cho bất kỳ cột nào bạn muốn để đảm bảo nội dung của chúng nằm gọn trên một dòng:

td.fitwidth {
    width: 1px;
    white-space: nowrap;
}

Và sau đó trong HTML của bạn:

<tr>
    <td class="fitwidth">ID</td>
    <td>Description</td>
    <td class="fitwidth">Status</td>
    <td>Notes</td>
</tr>

3
Hoạt động hoàn hảo! (trường hợp của tôi có chiều rộng bảng là 100% và không có cột nào khác có chiều rộng. Áp dụng điều này cho một cột). Đã thử nghiệm trên IE7 / 8/9, Firefox 12 và Chrome 19.
marcovtwout

wow, chưa bao giờ nghĩ rằng điều này là có thể với các bảng html. Cảm ơn bạn!
kulpae

14
Thay vì thêm lớp '.last' theo cách thủ công, bạn chỉ có thể thực hiện 'td: last-child' làm bộ chọn.
T.H

3
Giải pháp này hoạt động tốt mà không table-layout: fixedđược thiết lập trong các css trong câu hỏi jsfiddle.net/hCkch/1
David Sherret

1
Cố gắng lên, anh bạn! Mẹo thực sự thông minh để "ưu tiên" các cột nhất định để đảm bảo chúng không bị dồn lên nhiều dòng bởi các cột "văn bản" lớn, như "Mô tả" hoặc "Ghi chú". Đẹp quá! Để làm cho nó hữu ích hơn nữa, tôi sẽ gọi lớp .fitwidthvà sau đó chỉ cần đặt lớp trên các cột mà bạn không muốn chuyển thành nhiều dòng. Tôi sẽ chỉnh sửa câu trả lời của bạn để thêm điều đó.
Joshua Pinter

25

Nếu bạn muốn đảm bảo rằng hàng cuối cùng không bị quấn và do đó có kích thước theo cách bạn muốn, hãy xem

td {
 white-space: nowrap;
}

1

Bạn có thể chỉ định chiều rộng của tất cả trừ các ô cuối cùng trong bảng và thêm bố cục bảng: cố định và chiều rộng vào bảng.

Bạn có thể đặt

table tr ul.actions {margin: 0; white-space:nowrap;}

(hoặc đặt điều này cho TD cuối cùng như Sander đề xuất thay thế).

Điều này buộc các LI nội tuyến không bị vỡ. Thật không may, điều này không dẫn đến một phép tính chiều rộng mới trong UL chứa (và TD cha này), và do đó không tự động kích thước TD cuối cùng.

Điều này có nghĩa là: nếu một phần tử nội tuyến không có chiều rộng nhất định, thì chiều rộng của TD luôn được tính toán tự động trước (nếu không được chỉ định). Sau đó, nội dung nội tuyến của nó với chiều rộng được tính toán này sẽ được hiển thị và white-space-property được áp dụng, kéo dài nội dung của nó ra ngoài ranh giới được tính toán.

Vì vậy, tôi đoán không thể thực hiện được nếu không có một phần tử trong TD cuối cùng với chiều rộng cụ thể.


không tốt. đó chính xác là điều tôi đang cố gắng tránh. tôi không muốn o chỉ định chiều rộng col. cột phải có kích thước tự động và cột cuối cùng phải được giảm kích thước cho nội dung bên trong nó.
ShaneKm

Bạn có thể cung cấp các định nghĩa CSS cho các lớp bạn đã sử dụng không?
acme

-2

sử dụng tự động và chiều rộng tối thiểu hoặc tối đa như sau:

td {
max-width:50px;
width:auto;
min-width:10px;
}

1
Điều này không hoạt động theo yêu cầu, khi tôi có nội dung nhỏ hơn, nó vẫn sử dụng chiều rộng tối đa.
marcovtwout

chiều rộng tối thiểu không áp dụng cho ô bảng.
Nick
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.