回答:
<table style="width: 100%">
<colgroup>
<col span="1" style="width: 15%;">
<col span="1" style="width: 70%;">
<col span="1" style="width: 15%;">
</colgroup>
<!-- Put <thead>, <tbody>, and <tr>'s here! -->
<tbody>
<tr>
<td style="background-color: #777">15%</td>
<td style="background-color: #aaa">70%</td>
<td style="background-color: #777">15%</td>
</tr>
</tbody>
</table>
width attribute
。CSS *style* width
<col>のwidth属性に代わるを使用しています。(複数の人々がそのコメントに賛成投票しているにもかかわらず!!)
span="1"
1がデフォルトなので、不要です。
HTML:
<table>
<thead>
<tr>
<th class="from">From</th>
<th class="subject">Subject</th>
<th class="date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>[from]</td>
<td>[subject]</td>
<td>[date]</td>
</tr>
</tbody>
</table>
CSS:
table {
width: 100%;
border: 1px solid #000;
}
th.from, th.date {
width: 15%
}
th.subject {
width: 70%; /* Not necessary, since only 70% width remains */
}
コードの重複を減らし、懸念事項を分離するために、HTMLとCSSを分離することをお勧めします(構造とセマンティクスにはHTML、プレゼンテーションにはCSS)。
これを古いバージョンのInternet Explorerで機能させるには、テーブルに特定の幅(900pxなど)を指定する必要がある場合があります。そのブラウザは、ラッパーが正確な寸法を持たない場合、パーセント寸法の要素をレンダリングする際にいくつかの問題があります。
以下のCSSを使用してください。最初の宣言により、テーブルが指定した幅に固定されます(HTMLにクラスを追加する必要があります)。
table{
table-layout:fixed;
}
th.from, th.date {
width: 15%;
}
th.subject{
width: 70%;
}
table{table-layout:fixed};.from,.date{width:15%}
は自動的に計算されるため、これで十分です。クラスが他の要素でも使用されていない限り、書き込みth.from
は冗長であり、に短縮できます.from
。
IE7でも機能するCSSファイルにスタイルを保持しながら、クラスを1つだけ使用する別の方法:
<table class="mytable">
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
<style>
.mytable td, .mytable th { width:15%; }
.mytable td + td, .mytable th + th { width:70%; }
.mytable td + td + td, .mytable th + th + th { width:15%; }
</style>
最近では、nth-child()
CSS3(IE9 +)のセレクターを使用することもできます。この場合、nrを指定するだけです。それぞれの列を、隣接するセレクターと一緒に文字列化するのではなく、括弧に入れます。このように、例えば:
<style>
.mytable tr > *:nth-child(1) { width:15%; }
.mytable tr > *:nth-child(2) { width:70%; }
.mytable tr > *:nth-child(3) { width:15%; }
</style>
:nth-child
ソリューションは、パフォーマンスの点で恐ろしいものです。スタイルを設定する要素(th
またはcol
)が3つしかないこの例では、これを(特にユニバーサルセレクターとともに)使用する正当な理由はありません。さらに、幅をth
最初の行のに設定するだけです。.mytable td
最初の例では、冗長です。
tr
かどうか、次にそれらがに属して.mytable
いるかどうかをチェックします。「nth」を本当に使用したい場合は、次のようなものがおそらくはるかに優れています.mytable th:nth-of-type(1) {width: 15%}; .mytable th:nth-of-type(2) {width: 70%};
。この場合、3番目の列幅を指定する必要もありません。
.mytable th+th{width: 70%}.mytable th+th+th{width:15%}
。「n番目」のセレクター自体は非常に便利ですが、この特定のケース(3列のみの小さなテーブル)は実際には必要ありません。使用table-layout: fixed
すると、これだけでも実行できますtable{table-layout:fixed}th:first-child+th{width:70%}
。
これらは私の2つの提案です。
クラスの使用。他の2つの列の幅は、ブラウザによってそれぞれ15%に自動的に設定されるため、指定する必要はありません。
table { table-layout: fixed; }
.subject { width: 70%; }
<table>
<tr>
<th>From</th>
<th class="subject">Subject</th>
<th>Date</th>
</tr>
</table>
クラスを使用せずに。3つの異なる方法ですが、結果は同じです。
a)
table { table-layout: fixed; }
th+th { width: 70%; }
th+th+th { width: 15%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
b)
table { table-layout: fixed; }
th:nth-of-type(2) { width: 70%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
c)これは私のお気に入りです。b)と同じですが、ブラウザのサポートが向上しています。
table { table-layout: fixed; }
th:first-child+th { width: 70%; }
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
</table>
あなたの体(またはテーブルをラップしているdiv)の「設定」に応じて、これを行うことができるはずです:
body {
width: 98%;
}
table {
width: 100%;
}
th {
border: 1px solid black;
}
th.From, th.Date {
width: 15%;
}
th.Date {
width: 70%;
}
<table>
<thead>
<tr>
<th class="From">From</th>
<th class="Subject">Subject</th>
<th class="Date">Date</th>
</tr>
</thead>
<tbody>
<tr>
<td>Me</td>
<td>Your question</td>
<td>5/30/2009 2:41:40 AM UTC</td>
</tr>
</tbody>
</table>
table { table-layout: fixed; }
.subject { width: 70%; }
<table>
<tr>
<th>From</th>
<th class="subject">Subject</th>
<th>Date</th>
</tr>
</table>
<table>
<col width="130">
<col width="80">
<tr>
<th>Month</th>
<th>Savings</th>
</tr>
<tr>
<td>January</td>
<td>$100</td>
</tr>
<tr>
<td>February</td>
<td>$80</td>
</tr>
</table>
代わりにこれを試してください。
<table style="width: 100%">
<tr>
<th style="width: 20%">
column 1
</th>
<th style="width: 40%">
column 2
</th>
<th style="width: 40%">
column 3
</th>
</tr>
<tr>
<td style="width: 20%">
value 1
</td>
<td style="width: 40%">
value 2
</td>
<td style="width: 40%">
value 3
</td>
</tr>
</table>
border属性を使用しないでください。スタイルのニーズすべてにCSSを使用してください。
<table style="border:1px; width:100%;">
<tr>
<th style="width:15%;">From</th>
<th style="width:70%;">Subject</th>
<th style="width:15%;">Date</th>
</tr>
... rest of the table code...
</table>
しかし、そのようなCSSの埋め込みはお勧めできません。代わりにCSSクラスを使用して、CSSルールを外部CSSファイルに配置する必要があります。
これは:nth-child
、セレクターなどをサポートしていない古いブラウザーでも機能する、CSSでそれを行うためのもう1つの最小限の方法です:http : //jsfiddle.net/3wZWt/。
HTML:
<table>
<tr>
<th>From</th>
<th>Subject</th>
<th>Date</th>
</tr>
<tr>
<td>Dmitriy</td>
<td>Learning CSS</td>
<td>7/5/2014</td>
</tr>
</table>
CSS:
table {
border-collapse: collapse;
width: 100%;
}
tr > * {
border: 1px solid #000;
}
tr > th + th {
width: 70%;
}
tr > th + th + th {
width: 15%;
}
テーブルタグの後にcolgroupを追加します。ここで列の幅と数を定義します。そしてtbodyタグを追加します。trをtbodyの中に入れます。
<table>
<colgroup>
<col span="1" style="width: 30%;">
<col span="1" style="width: 70%;">
</colgroup>
<tbody>
<tr>
<td>First column</td>
<td>Second column</td>
</tr>
</tbody>
</table>
style="column-width:300px;white-space: normal;"