CSSテーブル列の自動幅


100

次のように、最後の列をコンテンツに合わせて自動サイズ調整するにはどうすればよいですか?(最後の列は、コンテンツに合わせて幅を自動サイズ設定する必要があります。3つのli要素がある場合と比較して、縮小する必要があるli要素が1つしかない場合など):

            <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;}

回答:


218

以下はあなたの問題を解決します:

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

柔軟なクラスベースのソリューション

そして、より柔軟なソリューションは、.fitwidthクラスを作成し、その内容が1行に収まるようにしたいすべての列にそれを適用することです。

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

そしてあなたのHTMLで:

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

3
完璧に動作します!(私の場合、テーブルの幅は100%で他の列には幅がありません。これを1つの列に適用します)。IE7 / 8/9のFirefox 12とChrome 19で試験
marcovtwout

うわー、これがhtmlテーブルで可能だとは思っていませんでした。ありがとうございました!
kulpae

14
「.last」クラスを手動で追加する代わりに、セレクターとして「td:last-child」を実行できます。
T.Ho

3
このソリューションtable-layout: fixedは、質問jsfiddle.net/hCkch/1の
David Sherret、2013

1
素晴らしい、仲間!特定の列を「優先順位付け」して、「説明」や「メモ」などの大きな「テキスト」列で複数行に絞り込まないようにするための巧妙なトリック。良いですね!さらに便利にするには、クラス.fitwidthを呼び出してから、複数行にしたくない列にクラスを設定します。回答を編集して追加します。
Joshua Pinter

25

最後の行が折り返されないようにして、希望どおりのサイズにしたい場合は、

td {
 white-space: nowrap;
}

1

最後のテーブルセル以外のすべての幅を指定し、table-layout:fixedと幅をテーブルに追加できます。

設定できます

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

(または、サンダーが代わりに提案したように、これを最後のTDに設定します)。

これにより、インラインLIが壊れないようになります。残念ながら、これは、含まれているUL(およびこの親TD)での新しい幅の計算につながらないため、最後のTDの自動サイズ設定を行いません。

つまり、インライン要素に特定の幅がない場合、TDの幅は常に最初に自動的に計算されます(指定されていない場合)。次に、この計算された幅を持つインラインコンテンツがレンダリングされ、white-space-propertyが適用されて、計算された境界を超えてコンテンツが拡大されます。

したがって、最後のTD内に特定の幅の要素がなければ、それは不可能思います。


駄目だ。それは私が断念しようとしているものです。列の幅を指定したくない。列は自動的にサイズ調整され、最後の列はその中のコンテンツに合わせてサイズ変更されます。
ShaneKm、2011年

使用したクラスのCSS定義を提供できますか?
acme

-2

次のように自動と最小または最大の幅を使用します。

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

1
これは必要に応じて機能しません。コンテンツが小さい場合でも最大幅が使用されます。
marcovtwout

min-widthはテーブルセルには適用されません。
Nick
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.