CSSのtd幅の絶対位置を使用


103

こちらのJSFIDDLEをご覧ください

td.rhead { width: 300px; }

CSS幅が機能しないのはなぜですか?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

また、位置の効果は何ですか?修正よりも理由を探しています。それがどのように機能するかを理解したいと思っています。

tdの幅が300ピクセルではありません


display: table-cellを尊重しませんwidth(同じように動作しませんdisplay: inline)。私はあなたが何を求めているのか理解できませんposition fixed|absolute
Explosion Pills

@ExplosionPillsは、実際のコードではテーブルを固定に設定しているためです。ご想像のとおり、私はページ上部のタイムラインを達成しようとしています。したがって、position属性が幅に影響する場合に備えて説明します。
ジェイク

回答:


144

これはあなたが聞きたいことではないかもしれませんが、display: table-cell幅を尊重せず、テーブル全体の幅に基づいて折りたたまれます。display: block指定した幅の要素をテーブルセル自体の内部に置くだけで、これを簡単に回避できます。

<td><div style="width: 300px;">wide</div></td>

セルの位置はすべてテーブルに対して静的であるため、<table>それ自体がposition: fixed絶対であるか絶対である場合でも、大きな違いはありません。

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

編集:私は信用することはできませんが、コメントが言うように、あなたはmin-width代わりにwidthテーブルセルの代わりに使用することができます。


31
+1-以前にこの回避策を使用しました。奇妙なことに、min-width上のTDChromeとFFで動作するように思えるん:jsfiddle.net/Mkq8L/7
ティム・メドラ

2
実際、いつものように、質問を投稿した後、私はそれがmin-width: 300pxうまくいくことに気づきました!(@TimMedoraあなたは数秒速くなりました!)
Jake

最良の答えは、display:table-cell behaviourに言及することです。ありがとう!
ジェイク

この動作は私には理にかなっています。同じ列の2つのセルに2つの異なる幅を設定するとどうなりますか?でもmin-width問題ないので、一番大きいものを取ってください。
Ciro Santilli郝海东冠状病六四事件法轮功

3
これはハックです。お勧めしません。組み合わせたtdの幅がテーブルの幅をオーバーフローしています。これが問題です。HTML構造を追加してこれを修正するべきではありません。
デビッド

28

あなたは使う方が良いです table-layout: fixed

Autoがデフォルト値であり、大きなテーブルでは、ブラウザがすべてのサイズが適切かどうかを確認するために反復するため、クライアント側に多少の遅延が発生する可能性があります。

修正済みの方がはるかに優れており、ページにすばやくレンダリングされます。テーブルの構造は、テーブルの全幅と各列の幅に依存します。

ここでは、元の例に適用されます。JSFIDDLE、残りの列が押しつぶされて内容が重なっていることに注意してください。これをもう少しCSSで修正できます(最初のTRにクラスを追加するだけです)。

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

ここで実際に見られる:JSFIDDLE


11

提供されたリンクで機能しない理由は、300pxの列と52の列をそれぞれ7列に表示しようとしているためです。列の数を縮小すると機能します。画面にその多くを収めることはできません。

列を強制的にフィットさせたい場合は、次の設定を試してください。

body {min-width:4150px;}

私のjsfiddleを参照してください:http: //jsfiddle.net/Mkq8L/6/ @mikeまだコメントできません。


2
+1は、表の幅のしきい値が本体の幅とともに増加することを検出します。
ジェイク

8

その理由は、テーブルの幅を指定しておらず、tdの束全体がオーバーフローしているためです。

これは、たとえば、私はテーブルに5000pxの幅を与えました、私はあなたの要件に合うと思いました。

table{
    width:5000px;
}

これは、提供したコードとまったく同じで、テーブルの幅に追加しただけです。

私はあなたのTDがデフォルトのテーブル幅をはるかに超えているので、何が起こっていると思います。各trで約45のtd(つまり、jsfiddleではなく質問で提供したコード)を引き出した場合、それは正確に機能します。


2
+1は、テーブル幅のしきい値があることを示します。問題は、全体の幅が事前にわからないことです。デフォルトの表の幅はいくつですか?
ジェイク

本当に分からない。私が知っているのは、列が多すぎるとテーブルが押しつぶされて、すべての子ノードの幅が役に立たなくなることだけです。私はこの前に遭遇したが、私は「まだmは、デフォルト値を見つけるためにたぶん私は質問としてこれを依頼する必要があります。。
彼ホイを

私はこの問題を解決すると信じていstackoverflow.com/questions/14767459/...を
彼ホイ

これは実際の答えであり、高評価の答えではありません。幅は、コンテンツがテーブル全体の幅を超えていない場合にのみ設定できます。
デビッド

5

これを試してみてください。

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
うわー!ありがとう♥
ivahidmontazer 2016年

このコードがOPに役立つ理由/方法の説明を追加してください。これは、将来の視聴者が学ぶことができる答えを提供するのに役立ちます。詳細については、このメタ質問とその回答を参照してください。
異教の猿

1
のwidth属性はHTML5では非推奨であることに注意してください。
simhumileco 2017年

5

使ってみる

table {
  table-layout: auto;
}

Bootstrapを使用する場合、デフォルトでクラスにtableありtable-layout: fixed;ます。



3

私のクレイジーなソリューションです。)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

テーブルの幅がたとえば100%の場合、tdに20%などのパーセント幅を使用してみてください。


2

divの最初のセルのコンテンツをラップします。例:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

これがjsfiddleです。


1

次のものも使用できます。

.rhead {
    width:300px;
}

しかし、これは一部のブラウザーでのみ発生します。私が正しく覚えている場合、IE8はこれを許可しません。全体として、width=""属性を<td>それ自体の中に置くだけの方が安全です。

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