【解説】<COLGROUP>と<col>の使い方とは?

このQ&Aのポイント
  • <COLGROUP>と<col>は、表をグループ化するための要素です。
  • <COLGROUP>を使用すると、テーブル内の列をまとめてスタイリングすることができます。
  • 具体的な使い方として、<COLGROUP>で列のグループを作成し、<col>で各列の幅やスタイルを指定することができます。
回答を見る
  • ベストアンサー

<COLGROUP>の使い方が理解できません?

最近なのですが、<COLGROUP>、<col>というものの存在を知りました。 色々調べてみるのですが、飲み込みの悪い私にはいまいち理解することが出来ません。 これは表をグループ化するものなのですよね? 私の理想とマッチしている機能であれば使ってみたいのですが・・・ 例えば横3列、縦10列あった場合、一番左は背景赤、中hは青、右は黄と背景を指定する場合、最初に<COLGROUP>で各グループ化しておけば、<td>や<tr>を構わなくともcssで指定した<COLGROUP>にclassなどで指定を行っておけば、縦10列に一発で指定が反映されるのでしょうか?? すみません、説明すら間々ならない状態なのですが、こんな使い方をする為のものでしょうか?? ただ私の今の設定だと、先ほどの縦10列合った場合、それがclassだった場合は、10個全ての<td>に指定を行わなければならないので、ちょっとおかしいなと思っている次第です。 どなたか、私のお話がご理解いただける方がいらっしゃいましたら、アドバイスいただけたら幸いです。 よろしくお願いいたします。

  • HTML
  • 回答数2
  • ありがとう数2

質問者が選んだベストアンサー

  • ベストアンサー
  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.2

#1><td>への指定はいらないのですか?? すでに述べたように、各それぞれの<TD>への指定は必要ないです。 <COLGROUP> は、縦方向の<TD>をグループ化しますので、どのTDへという個別の指定は必要ありません。(列単位でグループ化されます) #1>またspan 属性を使うということの具体的な意味が理解できません・・・。 質問文にでてくる<TABLE>では、3列で3つの<COLGROUP>ですから必要ないですが、 <COLGROUP span="2"> のように組にする列数を指定できます。 span="2" と指定すると、2つの列をグループ化したことになります。 指定を省略した場合は span="1" (1列)とみなされます 同様のことは、 <col class="left"><col class="mid"><col class="right"> の様にできます。 col を使う場合でも <col span="2" class="mid"> のような指定ができます。 また、 <colgroup><col span="2 class="mid"></colgroup> のようにcolgroup の内容として指定することもできます。 (この場合colgroup にはspan の指定はしません) ほとんど同じように使えるのですが、違いはというと意味が違うということです。 colgroup は、構造的なグループを表しますが、col は、そのような意味がありません。 #1>…という順序で各<tr>、<td>に影響を与えるということでしょうか?? そういうことです。 span 指定無しの<colgroup>は、1つの列(全体)を表しますので、 その並びがそれぞれの列に対応します。 影響の範囲は、実際にブラウザで表示して確かめてみれば、聞いてみるまでもなく明かなことです。

yuyukina
質問者

お礼

何度も有難う御座いました。 大変ご丁寧な説明を頂き、私でもなんとか理解が出来ました。 あとは自分で色々試して効果などを勉強したいと思います。 本当に有難う御座いました。

その他の回答 (1)

  • BLUEPIXY
  • ベストアンサー率50% (3003/5914)
回答No.1

><COLGROUP>にclassなどで指定を行っておけば、縦10列に一発で指定が反映されるのでしょうか?? >こんな使い方をする為のものでしょうか?? そのとおりです。 >10個全ての<td>に指定を行わなければならないので、ちょっとおかしいな <td> には、指定を行う必要はありません。 複数列をまとめるというような意味なら 縦複数列まとめる場合には、span 属性を使うか col エレメントを使います。 あと、古いNNだと使えないので注意が必要です。 (使えるのはNN6以降) 質問の例だとこんな感じ <style> <!-- colgroup.colleft { background-color:red; } colgroup.colmid { background-color:blue; } colgroup.colright { background-color:yellow; } --> </style> <table> <colgroup class="colleft"></colgroup> <colgroup class="colmid"></colgroup> <colgroup class="colright"></colgroup> <tr> <th>左</th> <th>中</th> <th>右</th> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td>&nbsp;</td> </tr> </table>

yuyukina
質問者

お礼

とてもご丁寧な回答本当に有難う御座います。 なんとなく理解できてきたのですが、まだ少し分からない部分があるのでお聞きしてもよろしいでしょうか? ><td> には、指定を行う必要はありません。 >複数列をまとめるというような意味なら >縦複数列まとめる場合には、span 属性を使うか >col エレメントを使います。 こちらが分かりません!!<td>への指定はいらないのですか??またspan 属性を使うということの具体的な意味が理解できません・・・。 あと、ソースを書いていただき有難う御座います。 そこで、<table>と<tr>の間に記述した、 <colgroup class="colleft"></colgroup> <colgroup class="colmid"></colgroup> <colgroup class="colright"></colgroup> の記述意味?というか指定範囲は各順序でこの様に反映されると考えていいのでしょうか? <tr> <th>左</th>→1 <th>中</th>→2 <th>右</th>→3 </tr> <tr> <td>&nbsp;</td>→1 <td>&nbsp;</td>→2 <td>&nbsp;</td>→3 </tr> これが1で<colgroup class="colleft"></colgroup> これが2、<colgroup class="colmid"></colgroup> これが3、<colgroup class="colright"></colgroup> という順序で各<tr>、<td>に影響を与えるということでしょうか?? 飲み込み悪くてすみません・・・。 今一度アドバイスいただけたらと思います。 宜しくお願いします。

関連するQ&A

  • CSS+HTMLでTBODYスクロールさせたい

    「複数行の見出し行(THEAD)で複数行のデータ行(TBODY)をスクロールさせたい」 こんにちわ、HTML+CSSでご質問させていただきます。 ターゲットは、IE7、IE8、IE9です。 http://javascript123.seesaa.net/article/303954410.html を参考に、見出し行固定、のデータスクロールテーブルを cssを使って実現しようと思ってます。 上記URLのサンプルソースをそのままコピーして、 HTMLとして動かすと期待どおりの動きをいたします。 そのサンプルソースの見出し行を複数行にしたく、 以下のように修正いたしましたが、 見出し行2行のうちの1行分しか表示されません。 下記の様になります。 http://apooz.obata.tk/test.html 変更した箇所はtbodyの開始位置をヘッダーの高さ倍にしたかったので、 out_Div内のpadding-topを修正。 あとは、”調査時期”というカラムをTHEADとTBODYに増やしました。 <tr> <th class="coL0" colspan="5">調査時期</th> </tr> 試行錯誤いろいろしましたが、着眼点が悪かったのか、 スキル不足も手伝って、時間ばかり消化しております。 何かヒントなる情報いただけると幸いです。 宜しくお願い致します。 ------------------ソース ここから------------------ <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title>CSS でヘッダ固定、データ行を スクロールさせるテーブル。</title> <style type="text/css"> <!-- #sclTbl { /* スクロール対象のテーブル */ background-color: #fff; /* テーブルの背景色 borderの色になる */ border-collapse:separate; /* 枠線の表示の仕方 */ font-size: 16px;/* 文字のサイズ */ } #out_Div { /* 全体の枠。ここにヘッダを格納 */ position: relative; /* 相対位置 */ padding-top: 52px; /* #in_Div の開始位置 */ width: 480px; /* 列幅の合計+セル間の幅(2px)の合計+20px 程度 */ border: 1px solid #0099cc; /* 外枠 */ background-color: #fff; /* 白 */ } #in_Div {/* tbodyが入っている。ここがスクロール対象*/ overflow: auto; /* スクロールバー*/ height: 133px; /* tbodyを表示する高さ */ } #sclTbl thead tr {/* ヘッダ 見出し行,位置を #out_Div の左上端に移動 */ position: absolute; /* 絶対位置 */ top: 0px; /* 上からの位置 */ left: 0px; /* 左からの位置 */ background-color: #fff; } #sclTbl thead tr th{/* thead 'th'のスタイル */ background-color: #0099cc; /* 背景色 */ color: #fff; /* 文字色 */ padding: 3px 0px; } #sclTbl tbody tr td{/* tbody 'td'のスタイル */ background-color: #dcdcdd; color: blue; padding: 3px 6px; } .coL0 { width: 30px; }/* colgroupの列幅指定 */ .coL1 { width: 100px; } .coL2 { width: 120px; } --> </style> </head> <body> <div id="out_Div"> <div id="in_Div"> <table id="sclTbl"> <!--colgroup tableの列をグループ化し、列幅指定--> <colgroup class="coL0"></colgroup> <colgroup class="coL1"></colgroup> <colgroup class="coL2"></colgroup> <colgroup class="coL1" span="2"></colgroup> <colgroup class="coL3"></colgroup> <thead> <tr> <th class="coL0" colspan="5">調査時期</th> </tr> <tr> <th class="coL0">No</th> <th class="coL1">都道府県</th> <th class="coL2">県庁所在地</th> <th class="coL1">人口</th> <th class="coL1">面積(km2)</th> </tr> </thead> <tbody> <tr> <td align="center" colspan="5">2011年</td> </tr> <tr> <td>1</td> <td>北海道</td> <td>札幌市</td> <td>5,517,449</td> <td>78,420.61</td> </tr> : (中略) : <tr> <td align="center" colspan="5">2011年</td> </tr> <tr> <td>10</td> <td>群馬県</td> <td>前橋市</td> <td>2,006,903</td> <td>6,363.16</td> </tr> </tbody> </table> </div> </div> </body> </html> ------------------ソースここまで------------------ 大変困ってます。助けてください。m(_ _)m

  • 表の1列だけをCSSを使って右揃えにするには?

    XHTMLとCSSを使ってホームページを作成中の初心者です。 表の中のデータを中央揃えにするのですが、ある1つの列の文字だけは全て右揃えにしたいのです。 A-1  B-1  C-1 A-2  B-2  C-2 A-3  B-3  C-3 という表があったとすると、この中の「C-1、C-2、C-3」は右揃え、他の部分は中央揃えにしたいのです。 もし、表の中のデータ全てを中央揃えにするのであれば、ソース部分は <table class="test"> <colgroup span="1" id="test-a"></colgroup> <colgroup span="1" id="test-b"></colgroup> <colgroup span="1" id="test-c"></colgroup> <tbody> <tr><td>A-1</td><td>B-1</td><td>C-1</td></tr> <tr><td>A-2</td><td>B-2</td><td>C-2</td></tr> <tr><td>A-3</td><td>B-3</td><td>C-3</td></tr> </tbody> </table> のような感じで、CSS部分は table.test td {text-align: center} というようにすればよいかと思います。 また、個別に指定するのであれば、ソース部分は <tbody> <tr><td class="c">A-1</td><td class="c">B-1</td><td class="r">C-1</td></tr> <tr><td class="c">A-2</td><td class="c">B-2</td><td class="r">C-2</td></tr> <tr><td class="c">A-3</td><td class="c">B-3</td><td class="r">C-3</td></tr> </tbody> のような感じで、CSS部分は td.c {text-align: center} td.r {text-align: right} でも良いかと思います。 ただ、データの量が多く、全てのセルに対して <td class="c"> <td class="r"> 等の指定をすることは非常に大変です。 列ごとに横幅の指定をするときなどはCSS部分で colgroup#test-c {width: 20px} 等のようにすると思いますが、例えば、この colgroup#test-c 等を利用してCの列は右揃え、他の列は中央揃えにする方法をご教示お願いします。

    • ベストアンサー
    • CSS
  • 特定の列の<td>または<th>だけにスタイルを

    かけたいということがあります。 例えば、 ---------------------------------------------------------- <style type="text/css"> .tab1 th, .tab1 td { font-weight:normal; text-align:center; background:#fee; } .tab1 .row2 th { /* ----------------(1) */ background:#fff; } .tab1 .col2 th { /* ----------------(2) */ background:#ffff; } </style> <table class="tab1"> <col class="col1"> <col class="col2"> <col class="col3"> <tr class="row1"> <th>1</th> <th>2</th> <th>3</th> </tr> <tr class="row2"> <th>4</th> <td>5</td> <td>6</td> </tr> <tr class="row3"> <th>7</th> <td>8</td> <td>9</td> </tr> <table> ---------------------------------------------------------- だと、 1 2 3 4 5 6 7 8 9 の中の「4」は(1)により背景が白くなります。 しかし、(2)のようにしても「2」の背景は白くなりません。 <col>ってそういうものなのでしょうか? <td>または<th>にidをつけてスタイルをかけるしかないのでしょうか? よろしくお願いします。

    • ベストアンサー
    • HTML
  • セルの幅について

    htmlで指定した幅と開発者ツールで確認した実際の幅、JQUERYで取得できる幅 それぞれ違うのはなぜでしょうか。 具体的なhtmlは以下のようなものです。 table-layout: fixedは都合により使う事ができません。 <script src="./jquery.js" type="text/javascript"></script> <table border="1"> <colgroup> <col width="10"> <col width="20"> <col width="30"> </colgroup> <thead> </thead> <tbody> <tr> <td class="a">a</td> <td class="b">b</td> <td class="c">c</td> </tr> </tbody> </table> <script type="text/javascript"> alert($('.a').width()); </script> 開発者ツールで確認すると左から14 24 34の幅になります。 また、jqueryでセルの幅をwidth()で取得すると 12 22 32となります。 指定 使用しているブラウザはIE8 / IE6です。

  • 【IE6】テーブルにcolspanが入ると幅指定がずれる?

    閲覧いただきありがとうございます。 <Html>にて、<table>を入れているのですが <colspan>すると幅指定がずれてしまいます。 タグ記述のミスなのか、仕様なのかはっきりと分からない為 質問させていただきます。 下記のようなテーブルを作っています。 【テーブル】 テーブル幅 500px 2行 5列:(各列100pxの5等分) 【列内容】 1行目 ├5列全て colspan 2行目 ├1列目:100px ├2-3列目:100+100=200px (colspan=2) ├4-5列目:100+100=200px (colspan=2) ここで、2-3列目に幅200pxに指定した <select>タグを入れると、意図しない幅になってしまいます。 意図している動きは 2-3列目の幅ぴったりに<select>が入ってほしいのですが 4-5列目の4列部分がえぐれてしまい、4-5列目が200pxではなく 100pxぐらいの描画になってしまいます。 そして<select>タグは2-3列目にぴったりと入らず、 後ろに100pxの空きがでてしまいます。 http://kikky.net/pc/css_bug020.html このサイトではIE6ではcolspanがあると幅指定がずれると なっていますが、同一の現象なのでしょうか? 示唆いただければ幸いです。 宜しくお願いします。 --------------記述html--------------- <html> <head> <title> ColSpanテスト </title> </head> <body> <table width="500" border="1" cellspacing="0" cellpadding="0" bordercolor="#000000" style="border-collapse: collapse;" > <colgroup> <col width="100" /> <col width="100" /> <col width="100" /> <col width="100" /> <col width="100" /> </colgroup> <!-- 1行目 --> <tr> <td colspan="5"> span5 </td> </tr> <!-- 2行目 --> <tr> <!-- 1列目 --> <td> </td> <!-- 2-3列目 --> <td nowrap colspan="2" > <select style="width:200px;" size="1" name="sl" id="sl"> <option value="99999">2列にしたい</option> </select> </td> <!-- 4-5列目 --> <td colspan="2" > 200pxなのに・・・ </td> </tr> </table> </body> </html>

  • 表(テーブル)内の文字サイズ一括変換

    <table>タグ内の文字サイズを一括して変換させたくて、 Q.No1470163の質問(2005年6月24日投稿のものです)に対する解答No.6とNo.1を参考に(というかNo.6を殆どコピペして)、表を作ってみました。 地の分より表内の文字を小さくしたかったのですが、Netscape7とFirefox3はうまく小さくなりましたがIE6では文字サイズが変わりません。 ちなみにcssの指示は↓と書きました。 <style type="text/css"> <!-- #sidTable001 tr{font-size: small;} --> </style> どうすればIEでもうまく小さくなるでしょうか?お教え下さい。 なお、当方、初心者です。お手数ですが専門的になるとお手上げなので簡単な方法でお願いします。 ↓以下はQ.No1470163の質問(2005年6月24日投稿のものです)に対する解答No.6の一部引用です。 例示。 <table id="sidTable001" class="sclTable000">  <colgroup>   <col id="sidCol001" class="sclCol000">   <col id="sidCol002" class="sclCol000">  </colgroup>  <tr id="sidTr001" class="sidTr000">   <td id="sidTd011" class="sclTd001">左側01</td>   <td id="sidTd012" class="sclTd002">右側01</td>  </tr>  <tr id="sidTr002" class="sidTr000">   <td id="sidTd021" class="sclTd001">左側02</td>   <td id="sidTd022" class="sclTd002">右側02</td>  </tr> </table> 上記 HTML に対して 全セルに対して : tr{ ~ ;} このテーブルに限った全セルに対して : #sidTable001 tr{ ~ ;} 左側01,右側01に対して : #sidTr001 tr{ ~ ;} 左側01,左側02に対して : tr.sclTd001{ ~ ;} 左側01だけに対して : tr#sidTd011{ ~ ;} 尚、左側01,右側02に対して : tr#sidTd011, tr#sidTd022{ ~ ;} の様な複数の指定も出来ます。 (CLASS で同じCLASS名を付ける方をお勧めしますが、一応技術的に出来るという事で例示をしました。) 回答者:koutarou504さま

    • ベストアンサー
    • HTML
  • <table>のclass指定が継承されない

    <table>に指定したclass指定が、その下の<td>や<tr>に継承されずに困っています。 HTMLを <table class="sample"> <tr> <td>1-1</td> <td>1-2</td> </tr> <tr> <td>2-1</td> <td>2-2</td> </tr> </table> とし、 cssを table, td { border: 2px #2b2b2b solid; } とした場合、新しくhtmlとcssを作ると表自体と全セルに囲み線が作られます。 ですが、今運営しているHPに記述すると、<table>のborderのみしか表示されません。 試しに、<td>にclassを指定しなおしてみると、そのセルにも囲み線が表示されました。 全<td>にclassを指定すれば問題ないのかもしれませんが、それではあまりにも使い勝手が悪いため、何とかhtmlは<table>のみにclassを指定することで全セルに反映させたいと思っています。 考えられる原因としてはどのようなものがありますでしょうか…?

    • ベストアンサー
    • CSS
  • <tr>タグ、<td>タグ

    テーブルでレイアウトを行い、htmlで背景色・cssで文字のスタイルを適用する場合、<tr>タグと<td>タグのどちらに記述するのがよいのでしょうか。IEだと大差は無いようなのですが、firefoxやNetscapeで違いが出てくるように感じます(特にfirefox)。 (1)cssで文字スタイルの場合、<table>タグに<table class="text">といった感じで問題ないでしょうか(table内の文字すべてclassがtextの場合)。それともやはり<td>タグひとつひとつにクラス指定した方が良いのでしょうか。 (2)テーブルに背景色を指定する場合、<tr>タグ・<td>タグのどちらに指定するのが良いのでしょうか。

    • ベストアンサー
    • HTML
  • 表の折り返しについて

    お世話になっています。 セルに表示する内容を折り返さずに表示したく、 下記のHTMLを作成したのですが自動折り返しとなってしまいます。 どなたかわかる方がいらっしゃったら、ご教授お願いいたします。 ・動作環境 OS:WIN XP ブラウザ:IE6 ・ソース <TABLE border="2" cellspacing="0" width=500 rules ="all"> <COLGROUP> <col width="100"> <col width="100"> <col width="100"> <col width="100"> <col width="100"> </COLGROUP> <TR> <TD nowrap>あああああああああああああああああ</TD> <TD nowrap>いいいいいいいいいいいいいいいいい</TD> <TD nowrap>うううううううううううううううううう</TD> <TD nowrap>えええええええええええええええええ</TD> <TD nowrap>おおおおおおおおおおおおおおおおお</TD> </TR> </TABLE>

  • テーブルタグ表示が上手くいかない(html・CSS

    下のタグを使うと、ブログに下記画像上部のように表示されているのですが 理想としては画像の下部分のように綺麗に表示したいです。 自分なりに何度かタグを弄っているのですが何度やっても画像上部のように乱れて表示されてしまい ムキー!っとなってます。 大変申し訳ないのですが、画像の下部分のように表示できるタグを教えてください。 何卒お願いします。 画像内のピンクの部分は実際には<img src="で指定された画像になります。 使ったタグ <table border="1"> <td><table id="table-03"> <colgroup> </colgroup><tr> <td><a href="jpg"><img src="i.jpg" alt="" width="150" height="220" class="aligncenter size-full wp-image-227" /></a></td> <td><table id="table-03"> <colgroup> </colgroup> <tr> <tr><td>あああ名</td> <td>いいい</td> </tr> <tr> <td>ううう</td> <td>えええ</td> </tr> <tr> <td>おおお</td> <td>かかかかか~</td> </tr> </table></td> </tr> </table> </DIV> </colgroup><tr> <td><a href="jpg"><img src="i.jpg" alt="" width="150" height="220" class="aligncenter size-full wp-image-227" /></a></td> <td><table id="table-03"> <colgroup> </colgroup> <tr> <tr><td>あああ名</td> <td>いいい</td> </tr> <tr> <td>ううう</td> <td>えええ</td> </tr> <tr> <td>おおお</td> <td>かかかかか~</td> </tr> </table></td> </tr> </table> </DIV>

専門家に質問してみよう