セルの幅をコンテンツに合わせる


266

次のマークアップを考えると、CSSを使用して、1つのセル(列内のすべてのセル)を、ストレッチ(デフォルトの動作)ではなく、その中のコンテンツの幅に合わせることができますか?

<style type="text/css">
td.block
{
border: 1px solid black;
}
</style>
<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

編集:私は幅をハードコーディングできることを知っていますが、その列に入るコンテンツは動的であるため、私はむしろそれをしたくありません。

下の画像を見ると、最初の画像はマークアップが生成するものです。2番目の画像は私が欲しいものです。

ここに画像の説明を入力してください


質問が理解できません。最後の列を特定の幅に制限しますか?
MetalFrog

8
@diEchoかなり明確だと思いました。写真を1つか2つ追加します。
マンスフィールド

回答:


451

あなたの質問を理解しているかどうかはわかりませんが、私はそれに挑戦します。例のJSfiddle

HTML:

<table style="width: 100%;">
<tr>
    <td class="block">this should stretch</td>
    <td class="block">this should stretch</td>
    <td class="block">this should be the content width</td>
</tr>
</table>

CSS:

td{
    border:1px solid #000;
}

tr td:last-child{
    width:1%;
    white-space:nowrap;
}

3
<table style="width:100%">代わりに書く理由<table width="100%" >
diEcho

17
@diEchoその部分は記述しませんでした。これはサンプルコードからのものです。いずれにしても、要素に幅属性を使用することは悪い習慣です。この簡単な例では、インラインCSSで問題ありませんが、これが本番レベルのコードである場合は、ファイルに抽象化する必要があります。
MetalFrog 2012年

45
このIMOを行うためのよりクリーンな方法は、 "nostretch"(またはそのようなもの)と呼ばれるスタイルを定義し、CSSでnostretchを定義して、width:1%とnowrapを持たせることです。次に、最後のTDには「class = "nostretch block"」が含まれます。これにより、必要なセルを「拡張しない」ことができます。
Tim Holt

3
これは良い解決策ですが、悲しいことに、Bootstrap 3では、ボタングループが次のように折り返されます。jsfiddle.net / wexdX / 326どうすればそれを抑制できるでしょうか。
マーティンブラウン

5
これは、コンテンツがwidth:1%より広い場合にのみ機能します-正しいですか?コンテンツがwidth:1%より小さい場合、セルは大きくなるためです。
アダム・


8

私にとって、これはテーブルとその列に最適な自動調整と自動サイズ変更です(cssを使用してください!important ...が必要な場合のみ)

.myclass table {
    table-layout: auto !important;
}

.myclass th, .myclass td, .myclass thead th, .myclass tbody td, .myclass tfoot td, .myclass tfoot th {
    width: auto !important;
}

テーブルまたはテーブルの列にCSS幅を指定しないでください。テーブルのコンテンツが大きい場合は、画面サイズを超えます。


3

CSSの幅を要素の1%または100%に設定することは、私が見つけたすべての仕様に従って、親に関連しています。執筆時点のBlink Rendering Engine(Chrome)とGecko(Firefox)は、1%または100%(列を縮小するか、列を使用可能なスペースを埋める)を適切に処理するようですが、すべてのCSS仕様に従って保証されていません適切にレンダリングできることがわかりました。

1つのオプションは、テーブルをCSS4フレックスdivに置き換えることです。

https://css-tricks.com/snippets/css/a-guide-to-flexbox/

これは新しいブラウザ、つまりIE11 +で機能します。記事の下部にある表を参照してください。


1

これを行うには多くの方法があります!

私が間違っている場合は私を修正しますが、問題はこの種の結果を探しています。

<table style="white-space:nowrap;width:100%;">
<tr>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:50%">this should stretch</td>
<td class="block" style="width:auto">this should be the content width</td>
</tr>
</table>

最初の2つのフィールドは残りのページを「共有」します(注:50%のフィールドにテキストを追加すると、より多くのスペースが必要になります)、最後のフィールドは常にテーブルを支配します。

テキストを折り返してよければ、white-space:nowrap;を移動できます。3番目のフィールドのスタイルに
合わせて、そのフィールドで新しい行を開始する唯一の方法になります。

または、最後のフィールドに長さを設定できます。幅:150ピクセル、最初の2つのフィールドにはパーセンテージを残します。

お役に立てれば!


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