■ テーブル(表)

【メニュー項目】 次の各項目についての解説を参照してください。

  • 基本的なテーブル
  • CSS でテーブルの標準的な枠線の表示を指定するには
  • CSS でテーブルの枠線の表示・非表示を指定するには
  • テーブルの中身を改行しないようにするには
  • テーブル内のフォントを一度に指定するには
  • カラム(セル)を連結(結合)するには
  • テーブルの幅や高さを指定するには
  • カラムの内容を右寄せ、左寄せするには
  • カラムの内容を上寄せ、下寄せするには
  • テーブルの背景色を指定するには
  • テーブルの背景画像を指定するには
  • テーブルを横に二つ並べるには
  • テーブルを左側に配置し後続文章を右側に回り込ませるには
  • テーブルを右側に配置し後続文章を左側に回り込ませるには
  • テーブルを中央に配置するには
  • テーブルの中にスタイルの異なるテーブルを表示には
  • 枠線の太さを変えるには
  • 枠線の色を変えるには
  • 枠線をシンプルにするには
  • テーブルの枠線を点線にするには
  • 杜甫々氏(とほほのWWW入門)ご愛用のテーブル
  • 角の丸いテーブルを表示するには

■ 基本的なテーブル

テーブル(表)を作成するには <table> を用います。

  1. <table>~</table> がひとつのテーブル
  2. <caption>~</caption> が表題
  3. <tr>~</tr> が1行
  4. <th>~</th> がヘッダのセル
  5. <td>~</td> がデータのセル
に対応します。

【各国の首都】
国名首都
日本東京
大韓民国ソウル
中国北京
<table border="1">
   <caption>【各国の首都】</caption>
   <tr><th>国名</th><th>首都</th></tr>
   <tr><td>日本</td><td>東京</td></tr>
   <tr><td>大韓民国</td><td>ソウル</td></tr>
   <tr><td>中国</td><td>北京</td></tr>
</table>

なお、<table>タグの属性 border="1" (または、"") は枠線を表示する指定です。 (上のような標準的な枠線が表示されます。 ただし、"1" 以外の数値を指定することはできません。 枠線の太さや色を指定する場合には、CSSborderプロパティ、または、border-styleborder-widthborder-color の3つのプロパティにより指定します。 )

HTML4.01 までは、<table>要素 以外でも <img>要素<object>要素 でも border属性 が指定できました。 HTML5 では、<img>要素<object>要素 では border属性 は廃止されましたが、例外的に <table>要素 では、標準的な枠線を表示する簡便な指定方法 として残されました。 ところが、HTML 4.01以降で、すでに、border属性非推奨となっており、HTML5文法チェックサイト:http://html5.validator.nu/ では、「HTML5 では廃止されたので CSS による指定を使え」 との指示が出ます。

■ CSS でテーブルの標準的な枠線の表示を指定するには

上記 のように、border属性 で枠線表示をする方法は便利ですが、HTML 4.01以降 非推奨 となっています。 同様の枠線を CSS を使って表示するには、次のようにします。

まず、CSS の設定を、あらかじめ <head>~</head> 間に、

HTMLソース (CSS)
CSS
<head> ~ </head>
<style type="text/css">
<!--
   table  { border: solid 1px #000000; 
            border-collapse: separate; }
   th, td { border: solid 1px #000000; }
-->
</style>

のように書き込んでおきます。 次に、たとえば、

HTMLソース
HTML
<body> ~ </body>
<table>
   <caption>【各国の首都】</caption>
   <tr><th>国名</th><th>首都</th></tr>
   <tr><td>日本</td><td>東京</td></tr>
   <tr><td>大韓民国</td><td>ソウル</td></tr>
   <tr><td>中国</td><td>北京</td></tr>
</table>

と <body> ~ </body> 間に記入すると、

ブラウザー 表示例
【各国の首都】
国名首都
日本東京
大韓民国ソウル
中国北京

のようなブラウザーでの表示が得られます。 ただし、この場合、テーブル個別に別のスタイルを指定しない限り、すべてのテーブルで border属性 によるものと同様の枠線が表示されます。 従って、border属性 のように、枠線の表示・非表示を簡単に切り替える ことはできません。

一般的に、CSS によるスタイルを HTML要素 に簡単に適用するには、ここに示した 型セレクタ (Type selector) を用いる方法以外にも、次に示す クラスセレクタ (Class selectors)クラス属性 を用いる 方法style属性 を用いる方法があります。 しかし、最後の style属性 を用いる方法では、<table>要素 とテーブル内のほとんど全ての <th>要素<td>要素 に対して style属性 の指定を行う必要があります。 つまり、それでなくてもテーブルでは複雑になる タグ の記述がきわめて煩雑になってしまいます。 そのため、通常この指定方法は使用しません。 (おそらく、これが border属性 が HTML5 でも残された理由ではないかと思われます。)

■ CSS でテーブルの枠線の表示・非表示を指定するには

上記CSS による標準的な枠線の表示では、少し border属性 による指定とは使い勝手が異なります。 CSS では、border-styleプロパティの初期値は "none" ですので、テーブルの枠線(より正確には、<table>要素<th>要素<td>要素境界線)は表示されない設定になっています。 従って、border属性 と同様の使い勝手にするには、CSSクラスセレクタ子孫結合子(子孫セレクタ) を活用すれば、次のように簡単にできます。

まず、CSS の設定を、あらかじめ <head>~</head> 間に、たとえば、

HTMLソース (CSS)
CSS
<head> ~ </head>
<style type="text/css">
<!--
   table.border1 { border: solid 1px #000000; 
                   border-collapse: separate; }
   table.border1 th, table.border1 td {
                   border: solid 1px #000000; }
-->
</style>

のように書き込んでおきます。 次に、 <body> ~ </body> 間に、クラス属性 の指定: class="border1" を付けて、

HTMLソース (枠線付きのテーブル)
HTML
<body> ~ </body>
<table class="border1">
   <caption>【各国の首都】</caption>
   <tr><th>国名</th><th>首都</th></tr>
   <tr><td>日本</td><td>東京</td></tr>
   <tr><td>大韓民国</td><td>ソウル</td></tr>
   <tr><td>中国</td><td>北京</td></tr>
</table>

のようにテーブルを記入すると、

ブラウザー 表示例 (枠線付きのテーブル)
【各国の首都】
国名首都
日本東京
大韓民国ソウル
中国北京

のようにブラウザーで枠線付きの表示が得られます。 また、クラス属性 の指定: class="border1" を付けないで、

HTMLソース (枠線なしのテーブル)
HTML
<body> ~ </body>
<table>
   <caption>【各国の首都】</caption>
   <tr><th>国名</th><th>首都</th></tr>
   <tr><td>日本</td><td>東京</td></tr>
   <tr><td>大韓民国</td><td>ソウル</td></tr>
   <tr><td>中国</td><td>北京</td></tr>
</table>

のように <body> ~ </body> 間にテーブルを記入すると、

ブラウザー 表示例 (枠線なしのテーブル)
【各国の首都】
国名首都
日本東京
大韓民国ソウル
中国北京

のように枠線なしの表示が得られます。 ただし、HTML5 では、テーブルをレイアウト目的で使うことは認められていません ので、このような枠線なしのテーブルを使用する場面はそれほどないかもしれません。 そういう状況では、むしろ 先に示した方法 の方が便利かもしれません。

■ テーブルの中身を改行しないようにするには

テーブルの中身を改行させないようにするには、<tr><th><td> などのタグに CSSwhite-spaceプロパティ の値に nowrap を指定します。

ああああああああああいいいいいいいいいいうううううううううう
<table>
  <tr>
    <th style="white-space:nowrap;">ああああああああああああああああああ</th>
    <th>いいいいいいいいいいいいいいいいいい</th>
    <th>うううううううううううううううううう</th>
  </tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブル内のフォントを一度に指定するには

テーブル内のフォントの大きさや色を一度に指定するには、CSSfontfont-sizefont-familyfont-weight)や color などのプロパティを用います。 次の例を参考にしてください。

HTMLソース
CSS
<head> ~ </head>
<style type="text/css" media="screen, print">
<!--
   table.sample { 
      border: solid 1px #000000; 
      border-collapse: separate; 
   }
   table.sample td, table.sample th {
      border: solid 1px #000000;
      color: red;
      font-size: 200%;
      font-family: "MS ゴシック";
   }
-->
</style>
HTML
<body> ~ </body>
<table class="sample">
   <caption>【各国の首都】</caption>
   <tr><th>国名</th><th>首都</th></tr>
   <tr><td>日本</td><td>東京</td></tr>
   <tr><td>大韓民国</td><td>ソウル</td></tr>
   <tr><td>中国</td><td>北京</td></tr>
</table>

ブラウザー 表示例
【各国の首都】
国名首都
日本東京
大韓民国ソウル
中国北京

上の基本的なテーブルと比べてみてください。

※ クラス名: "sample" は文書内でより適当な名前に変更してください。

■ カラム(セル)を連結(結合)するには

カラム(セル)を横や縦に連結するには <td><th>colspan="n"rowspan="n" 属性を指定します。 n には連結するカラム(セル)の数を指定します。

横連結
縦連結○○○
□□□
<table>
 <tr><td colspan="2">横連結</td><!-- 空き --></tr>
 <tr><td rowspan="2">縦連結</td><td>○○○</td></tr>
 <tr><!-- ここは縦連結のため空き--><td>□□□</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブルの幅や高さを指定するには

テーブルの幅や高さを指定するには、<table><tr><th><td> に対して CSSwidthプロパティheightプロパティ を用います。

東京都12,345,678
広島県987,654

 →
東京都12,345,678
広島県987,654


<table>
 <tr><td>東京都</td><td>12,345,678</td></tr>
 <tr><td>広島県</td><td>987,654</td></tr>
</table>
<table style="width:200px; height:80px;">
 <tr><td>東京都</td><td>12,345,678</td></tr>
 <tr><td>広島県</td><td>987,654</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

HTML5 では、HTML4.01 までと異なり、<table> タグに width属性height属性は指定できないので注意してください。

■ カラムの内容を右寄せ、左寄せするには

<tr><th><td>CSStext-alignプロパティ により指定することで、カラムの内容を 右寄せ中央揃え左寄せ にすることができます。

東京都12,345,678
広島県987,654

 →
東京都12,345,678
広島県987,654

 →
東京都12,345,678
広島県987,654

<table style="width:150px;">
 <tr><td>東京都</td><td>12,345,678</td></tr>
 <tr><td>広島県</td><td>987,654</td></tr>
</table>
<table style="width:150px;">
 <tr><td>東京都</td><td style="text-align:right;">12,345,678</td></tr>
 <tr><td>広島県</td><td style="text-align:right;">987,654</td></tr>
</table>
<table style="width:150px;">
 <tr><td>東京都</td><td style="text-align:center;">12,345,678</td></tr>
 <tr><td>広島県</td><td style="text-align:center;">987,654</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

HTML5 では、HTML4.01 までと異なり、<table><tr><th><td> などのタグに align属性
(= 廃止)は指定できない
ので注意してください。

■ カラムの内容を上寄せ、下寄せするには

<tr><th><td>CSSvertical-alignプロパティ による指定をするすることで、カラムの内容を上に寄せたり、下に寄せたり、また中央配置にしたりすることができます。

これは下寄せです。 これは上寄せです。 これは中央配置です。
<table style="height:45px;">
  <tr>
    <td style="vertical-align:bottom;">これは下寄せです。</td>
    <td style="vertical-align:top;">これは上寄せです。</td>
    <td style="vertical-align:center;">これは中央配置です。</td>
  </tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

HTML5 では、HTML4.01 までと異なり、<table><tr><th><td> などのタグに valign属性 (= 廃止)は指定できないので注意してください。

■ テーブルの背景色を指定するには

テーブルに背景色を指定するには、<table><tr><th><td>CSSbackground-colorプロパティ を用います。

■■●●
□□◎◎
◇◇○○
<table style="background-color:#ffcccc">
  <tr><th>■■</th><th>●●</th></tr>
  <tr><td>□□</td><td>◎◎</td></tr>
  <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

HTML5 では、HTML4.01 までと異なり、<table><tr><th><td> などのタグに bgcolor属性 (= 廃止)は指定できないので注意してください。

■ テーブルの背景画像を指定するには

テーブルに背景色や背景画像を指定するには、<table><tr><th><td>CSSbackground-image を用います。

■■●●
□□◎◎
◇◇○○


   +
colosseo
画像:colosseo.jpg


■■●●
□□◎◎
◇◇○○
<table style="background-image:url(colosseo.jpg);">
 <tr><th>■■</th><th>●●</th></tr>
 <tr><td>□□</td><td>◎◎</td></tr>
 <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

HTML5 では、HTML4.01 までと異なり、<table><tr><th><td> などのタグに background属性 (= 廃止)は指定できないので注意してください。

■ テーブルを横に二つ並べるには

テーブルを横に二つ並べるには、<table>CSSfloatプロパティ を用います。 また、それに続く文章などが回りこまないようにするため、2つ目のテーブルの後の要素には clearプロパティ を設定します。

ああああ
ああああ
ああああ
ああああ

<table style="float:left; margin: 0px 5px;">
  <tr><td>ああ</td><td>ああ</td></tr>
  <tr><td>ああ</td><td>ああ</td></tr>
</table> 
<table style="float:left; margin: 0px 5px;">
  <tr><td>ああ</td><td>ああ</td></tr>
  <tr><td>ああ</td><td>ああ</td></tr>
</table>
<br style="clear:left;">

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブルを左側に配置し後続文章を右側に回り込ませるには

テーブルを左側に配置し後続文章を右側に回り込ませるには、<table>CSSfloatプロパティ を用います。 また、あるところから後の文章などが回り込まないようにするためには、<br><p><div> などの要素で clearプロパティ を設定します。

ああああ
ああああ
いいいい
いいいい
うううう
うううう
ここで改行します。
改行しました。
{ float: left; } の場合,後続の文章は通常の <br> だけでは
この位置に改行されますが,<br> に style="clear:left;" とした
style属性を追加すると,行頭を表より下の左端(left)から表示できる
この位置に改行されます。
<table style="float:left; margin:0px 1em;">
   <tr><td>ああ</td><td>ああ</td></tr>
   <tr><td>ああ</td><td>ああ</td></tr>
   <tr><td>いい</td><td>いい</td></tr>
   <tr><td>いい</td><td>いい</td></tr>
   <tr><td>うう</td><td>うう</td></tr>
   <tr><td>うう</td><td>うう</td></tr>
</table> 
ここで改行します。<br>改行しました。
<br>{ float: left; } の場合,後続の文章は通常の &lt;br&gt; だけでは
<br>この位置に改行されますが,&lt;br&gt; に <em>style="clear:left;"</em> とした
<br> style属性を追加すると,行頭を表より下の左端(left)から表示できる
<br style="clear:left;">この位置に改行されます。

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブルを右側に配置し後続文章を左側に回り込ませるには

テーブルを右側に配置し後続文章を左側に回り込ませるには、<table>CSSfloatプロパティ を用います。 また、あるところから後の文章などが回り込まないようにするためには、<br><p><div> などの要素で clearプロパティ を設定します。

ああああ
ああああ
いいいい
いいいい
うううう
うううう
ここで改行します。
改行しました。
{ float: right; } の場合,後続の文章は通常の <br> だけでは
この位置に改行されますが,<br> に style="clear:right;" とした
style属性を追加すると,行頭を表より下の左端(left)から表示できる
この位置に改行されます。
<table style="float:right; margin: 0px 1em;">
   <tr><td>ああ</td><td>ああ</td></tr>
   <tr><td>ああ</td><td>ああ</td></tr>
   <tr><td>いい</td><td>いい</td></tr>
   <tr><td>いい</td><td>いい</td></tr>
   <tr><td>うう</td><td>うう</td></tr>
   <tr><td>うう</td><td>うう</td></tr>
</table> 
ここで改行します。<br>改行しました。
<br>{ float: right; } の場合,後続の文章は通常の &lt;br&gt; だけでは
<br>この位置に改行されますが,&lt;br&gt; に <em>style="clear:right;"</em> とした
<br> style属性を追加すると,行頭を表より下の左端(left)から表示できる
<br style="clear:right;">この位置に改行されます。

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブルを中央に配置するには

テーブルを中央に配置するには、<table> に対して CSSmargin-leftmargin-right の2つのプロパティでともに "auto" を指定します。 これらのプロパティの値は、marginプロパティを用いても指定可能です。 指定方法の詳細は、 これらのプロパティの解説を見てください。

■■●●
□□◎◎
◇◇○○
<table style="margin: 0px auto;">
 <tr><th>■■</th><th>●●</th></tr>
 <tr><td>□□</td><td>◎◎</td></tr>
 <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のような枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ 枠線の太さを変えるには

テーブルの枠線の太さを変えるには、<table>CSSborder-widthプロパティ を用います。

ただし、border-widthプロパティ を指定する場合には、border-styleプロパティ の指定も一緒に行わないと、一般的に枠線は表示されません。(IE8は例外的に表示されるようです。) これは、border-styleプロパティ の初期値が "none"(枠線なし)になっているためです。

指定方法の詳細は、 border-widthプロパティ解説を見てください。

■■●●
□□◎◎
◇◇○○
<table style="border-style:solid; border-width: 2px 1em 0.5em 6px;">
 <tr><th>■■</th><th>●●</th></tr>
 <tr><td>□□</td><td>◎◎</td></tr>
 <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のようなセルの枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ 枠線の色を変えるには

テーブルの枠線の色を変えるには、<table>CSSborder-colorプロパティ を用います。 指定方法の詳細は、 border-colorプロパティ解説を見てください。

なお、以下例では枠線の太さの変更も併せて行っていますので、枠線を表示するためには、さらに、border-styleプロパティ の指定も必要です。(「枠線の太さを変えるには」を参照。)

■■●●
□□◎◎
◇◇○○
<table style="border-style:solid; border-width:3px;
              border-color:#ff0000 #00ff00 #00ff00 #ff0000;">
 <tr><th>■■</th><th>●●</th></tr>
 <tr><td>□□</td><td>◎◎</td></tr>
 <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のようなセルの枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ 枠線をシンプルにするには

テーブルの枠線をシンプルにするには、<table> に CSSborder-collapseプロパティborder-styleプロパティborder-widthプロパティ を用います。

■■●●
□□◎◎
◇◇○○
<table style="border-collapse:collapse; border-style:solid; border-width:2px;">
 <tr><th>■■</th><th>●●</th></tr>
 <tr><td>□□</td><td>◎◎</td></tr>
 <tr><td>◇◇</td><td>○○</td></tr>
</table>

※ 上のようなセルの枠線を表示するには、そのCSSの設定 を、<head>~</head> 間に書き込んでおく必要があります。

■ テーブルの枠線を点線にするには

テーブルの枠線を点線にするには、CSSborderプロパティborder-styleプロパティ などを使って点線の枠線を引きます。

HTMLソース
CSS
<head> ~ </head>
<style type="text/css">
<!--
   .dot, .dot th, .dot td { border-style: none; }
   .dot    { border-bottom: 1px dotted gray; 
             border-left: 1px dotted gray; border-spacing: 0px; }
   .dot th { border-top: 1px dotted gray; 
             border-right: 1px dotted gray; border-spacing: 0px; }
   .dot td { border-top: 1px dotted gray; 
             border-right: 1px dotted gray; border-spacing: 0px; }
-->
</style>
HTML
<body> ~ </body>
<table class="dot">
   <tr><th>あああ</th><th>あああ</th></tr>
   <tr><td>あああ</td><td>あああ</td></tr>
   <tr><td>あああ</td><td>あああ</td></tr>
   <tr><td>あああ</td><td>あああ</td></tr>
</table>

ブラウザー 表示例
ああああああ
ああああああ
ああああああ
ああああああ

<table>, <th>, <td> の3要素について、既定値でテーブルの 枠線を表示する設定 がされている場合には、上のように { border-style: none; } という指定で、リセットしておく必要があります。

■ 杜甫々氏(とほほのWWW入門)ご愛用のテーブル

「とほほのWWW入門」の各ページで使用されている次のようなスタイルのテーブルは、実は HTML4.01 までの規格により作成されております(2012.05.25現在)。

【Windows日本語フォント】
フォント名説明
MS ゴシックMicrosoft 等幅ゴシック。
MS 明朝Microsoft 等幅明朝。
MS PゴシックMicrosoft プロポーショナルゴシック。
MS P明朝Microsoft プロポーショナル明朝。
MS UI GothicMicrosoft ユーザインタフェース用ゴシック。

しかし、ここに表示したものは、HTML5 と CSS で作成したものであり、次のようにすると作れます。

HTMLソース
CSS
<head> ~ </head>
<style type="text/css">
<!--
   TABLE.kw { /* KeyWord */
      border-color:#808080 #ffffff #ffffff #808080;
      border-width: 1px;
      border-style: solid;
      border-spacing: 0px; 
      padding: 0px;
   }
   TABLE.kw TH, TABLE.kw TD { /* KeyWord */
      border-color:#ffffff #808080 #808080 #ffffff;
      border-width: 1px;
      border-style: solid;
      padding: 2.2px;
   }
   TABLE.kw TH { /* KeyWord */
      background-color:#c0c0c0;
   }
-->
</style>
HTML
<body> ~ </body>
<table class="kw" style="margin:0px auto;">
   <caption style="text-align:left;">
      【Windows日本語フォント】
   </caption>
   <tr bgcolor="#c0c0c0"><th>フォント名</th><th>説明</th></tr>
   <tr><td style="white-space:nowrap;">MS ゴシック</td>
       <td>Microsoft 等幅ゴシック。</td>
   </tr>
   <tr><td style="white-space:nowrap;">MS 明朝</td>
       <td>Microsoft 等幅明朝。</td>
   </tr>
   <tr><td style="white-space:nowrap;">MS Pゴシック</td>
       <td>Microsoft プロポーショナルゴシック。</td>
   </tr>
   <tr><td style="white-space:nowrap;">MS P明朝</td>
       <td>Microsoft プロポーショナル明朝。</td>
   </tr>
   <tr><td style="white-space:nowrap;">MS UI Gothic</td>
       <td>Microsoft ユーザインタフェース用ゴシック。</td>
   </tr>
</table>

各設定がどのように反映されているのかを考えてみると、テーブルの見栄えに関する指定の勉強にもなると思われます。

■ 角の丸いテーブルを表示するには

「とほほのWWW入門」逆引きリファレンスページでは、HTML4.01 以前の手法として、角の丸いテーブルは、下記のように 5種類の画像を用いて実現できると紹介されております。

rtbl1 rtbl5 rtbl2
rtbl5 本文・・・ rtbl5
rtbl3 rtbl5 rtbl4
<!DOCTYPE html>
<html>
   <head>
      <meta lang="ja" charset="UTF-8">
      <title>サンプル</title>
      <style type="text/css">
      <!--
         TABLE.sample { border-collapse:collapse; }
         TABLE.sample, TABLE.sample TR, TABLE.sample TD {
             font-size: 1%; border-style: solid; border-color: #000000; border-spacing:0px;
             border-width:0px; padding:0px; margin:0px; 
         }
         TABLE.sample TD.normal { font-size: medium;  }
         IMG  {
             border-style: none; border-spacing:0px; border-width:0px; padding:0px; margin:0px; 
         }
      -->
      </style>
   </head>
   <body>
      <table class="sample">
        <tr>
          <td><img src="../image/rtbl1.gif" alt="rtbl1" height="20" width="20"></td>
          <td><img src="../image/rtbl5.gif" alt="rtbl5" height="20" width="100"></td>
          <td><img src="../image/rtbl2.gif" alt="rtbl5" height="20" width="20"></td>
        </tr>
        <tr>
          <td><img src="../image/rtbl5.gif" alt="rtbl5" height="50" width="20"></td>
          <td class="normal" style="background-image: url(../image/rtbl5.gif);">本文・・・</td>
          <td><img src="../image/rtbl5.gif" alt="rtbl5" height="50" width="20"></td>
        </tr>
        <tr>
          <td><img src="../image/rtbl3.gif" alt="rtbl3" height="20" width="20"></td>
          <td><img src="../image/rtbl5.gif" alt="rtbl5" height="20" width="100"></td>
          <td><img src="../image/rtbl4.gif" alt="rtbl4" height="20" width="20"></td>
        </tr>
      </table>
   </body>
</html>

確かに、実際これをIEで表示すると このように なります。

しかし、HTML5+CSS3 では、このような面倒なことをしなくても簡単に角の丸いテーブルが作成できます。 また、さらに4つの角の丸みを個別に変えることも可能です。

それは、CSS3 では border-radius という便利なプロパティが用意されているからです。 ただし、非常に残念なことに IE8 はこのプロパティには未対応です。(最新のブラウザーでは対応済みにものがほとんどです。)

以下は、Firefox などの border-radiusプロパティに対応済みのブラウザーで表示してみてください。(IE9 は OK です。)


あああ いいい ううう
かかか ききき くくく
さささ ししし すすす
<html>
   <head>
      <title>サンプル:角の丸いテーブル</title>
      <style type="text/css">
      <!--
         TABLE.radius { 
            border-style:solid; 
            border-width:10px; 
            border-color:green; 
            border-radius: 2em 0.6em 1em 0.3em; 
         }
         TABLE.radius TR, TABLE.radius TD {
            color: #ffffff; 
            background-color:#8484ee ;
         }
         TD.topl {  /* Top-Left */
            border-radius: 1.4em 0px 0px 0px;
            padding-left: 0.6em; 
         }
         TD.left {  /* Left */
            padding-left: 0.6em; 
         }
         TD.btmr {  /* Bottom-Right */
            border-radius: 0px 0px 0.4em 0px;
            padding-right: 0.35em;
         }
         TD.right { /* Right */
            padding-right: 0.35em;
         }
      -->
      </style>
   </head>
   <body>
      <table class="radius">
        <tr><td class="topl">あああ</td><td>いいい</td><td class="right">ううう</td></tr>
        <tr><td class="left">かかか</td><td>ききき</td><td class="right">くくく</td></tr>
        <tr><td class="left">さささ</td><td>ししし</td><td class="btmr">すすす</td></tr>
      </table>
   </body>
</html>

■ テーブルの中にスタイルの異なるテーブルを表示には

たとえば、別項の 角の丸いテーブル杜甫々氏ご愛用のテーブル

あああいいいううう
かかかきききくくく
さささしししすすす
【Windows日本語フォント】
フォント名説明
MS ゴシックMicrosoft 等幅ゴシック。
MS 明朝Microsoft 等幅明朝。
MS UI GothicMicrosoft UI用ゴシック。

を、標準的なテーブル:

種 類表 示
角の丸いテーブル「角の丸いテーブル」
を表示する場所
杜甫々氏ご愛用の
テーブル
「杜甫々氏ご愛用のテーブル」
を表示する場所

の対応するセルに収めて表示したいとします。 このとき、そのまま挿入すると、

種 類表 示
角の丸いテーブル
あああいいいううう
かかかきききくくく
さささしししすすす
杜甫々氏ご愛用の
テーブル
【Windows日本語フォント】
フォント名説明
MS ゴシックMicrosoft 等幅ゴシック。
MS 明朝Microsoft 等幅明朝。
MS UI GothicMicrosoft UI用ゴシック。
( セル内の 2つのテーブルのセル境界線 が.....!)

のようになってしまいます。 あれれ!!!??? セルの境界線の表示スタイル が本来のものとは異なっています。 これは、内側の2つの <table>要素<th>要素<td>要素 では、いずれも 外側のテーブルで設定した <th>要素<td>要素 に対するスタイルが適用されている ためです。 ただし、この2つでは、原因が少し異なります。

まず、外側のテーブル のスタイルは、

<style type="text/css">
<!--
   table.border1 { 
      border: solid 1px #000000; 
      border-collapse: separate; 
   }
   table.border1 th, table.border1 td { 
      border: solid 1px #000000; 
   }
-->
</style>

のようになっています。 また、その後に記述した 角の丸いテーブル<th>要素<td>要素 のスタイルは、

         TABLE.radius TR, TABLE.radius TD {
            color: #ffffff; 
            background-color:#8484ee ;
         }
         TD.topl {  /* Top-Left */
            border-radius: 1.4em 0px 0px 0px;
            padding-left: 0.6em; 
         }
         TD.left {  /* Left */
            padding-left: 0.6em; 
         }
         TD.btmr {  /* Bottom-Right */
            border-radius: 0px 0px 0.4em 0px;
            padding-right: 0.35em;
         }
         TD.right { /* Right */
            padding-right: 0.35em;
         }

のようになっています。 これを見ると、border-style プロパティ の指定は一切なく、初期値 "none" をそのまま利用することによって、{ border-style: none; } を指定する形になっています。 従って、外側のテーブルの border-style プロパティ の値 "solid"border-width プロパティ の値 "1px"border-color プロパティ の値 "#000000" が適用された結果、上のような表示となっているのです。 これは、容易に修正可能で、

         TABLE.radius TR, TABLE.radius TD {
            border-style: none;
            color: #ffffff; 
            background-color:#8484ee ;
         }
         TD.topl {  /* Top-Left */
            border-radius: 1.4em 0px 0px 0px;
            padding-left: 0.6em; 
         }
         TD.left {  /* Left */
            padding-left: 0.6em; 
         }
         TD.btmr {  /* Bottom-Right */
            border-radius: 0px 0px 0.4em 0px;
            padding-right: 0.35em;
         }
         TD.right { /* Right */
            padding-right: 0.35em;
         }

のように明示的に、border-style プロパティ の値: "none" を指定すれば OK です。 (ただし、次に述べるとおり、 "radius"クラス の定義が "border1"クラス の定義より後に記述されていること が前提条件です。)

一方、杜甫々氏ご愛用のテーブル: のスタイルは、

         TABLE.kw { /* KeyWord */
            border-color:#808080 #ffffff #ffffff #808080;
            border-width: 1px;
            border-style: solid;
            border-spacing: 0px; 
            padding: 0px;
         }
         TABLE.kw TH, TABLE.kw TD { /* KeyWord */
            border-color:#ffffff #808080 #808080 #ffffff;
            border-width: 1px;
            border-style: solid;
            padding: 2.2px;
         }
         TABLE.kw TH { /* KeyWord */
               background-color:#c0c0c0;
         }

のようになっています。 よく見ても、とくに CSS によるスタイル指定がもれているところはなさそうです。 にもかかわらず、外側のテーブルのスタイルが適用されているのは、この 杜甫々氏ご愛用のテーブル<th>要素<td>要素 では、外側のテーブルの "border1"クラス によるスタイルとこのテーブルの "kw"クラス によるスタイルが、ともに指定された形 になっているからです。

クラス属性の解説 にあるとおり、この場合、後に定義したクラスのスタイル指定が優先 されます。 実は、"kw"クラス の定義は外部 CSS ファイル内に記述してあるため、ページ内で CSS を記述した "border1"クラス の方が後から定義されています。 そのため、"border1"クラス のスタイル指定が優先されて、上のような表示となるのです。 これを避けるためには、<th>要素<td>要素 について、

  1. "border1"クラス も外部 CSS ファイルのスタイル指定に含めて、"kw"クラス より前に記述する。
  2. ページ内の CSS の指定で、"kw"クラス と同じスタイル(のクラス)を "border1"クラス より後に記述して適用する。

のどちらかで対処できます。 一般的には、方法1 の方がベターです。 しかし、このページはちょっと特殊で、上のような望ましくない表示状態も一緒に示したいので、方法2 で対処しました。 その結果が次のものです。

種 類表 示
角の丸いテーブル
あああいいいううう
かかかきききくくく
さささしししすすす
杜甫々氏ご愛用の
テーブル
【Windows日本語フォント】
フォント名説明
MS ゴシックMicrosoft 等幅ゴシック。
MS 明朝Microsoft 等幅明朝。
MS UI GothicMicrosoft UI用ゴシック。
(セル内の2つのテーブルは、いずれも本来のスタイルで表示されています。)