<table>のclass指定が継承されない

このQ&Aのポイント
  • HTMLの<table>に指定したclass指定がその下の<td>や<tr>に継承されずに困っています。
  • <table>にclassを指定した場合、意図したスタイルが全てのセルに反映されない問題が発生しています。
  • 全<td>にclassを指定するのは使い勝手が悪いため、<table>のみにclassを指定してセルに反映させたいと思っていますが、うまくいっていません。
回答を見る
  • ベストアンサー

<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を指定することで全セルに反映させたいと思っています。 考えられる原因としてはどのようなものがありますでしょうか…?

noname#233614
noname#233614
  • CSS
  • 回答数3
  • ありがとう数3

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

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.3

>borderが継承されないと言う点は理解しているのですが、<table>に対して指定したclassがその下に位置する<td>に継承されないという点で困っております。  それは「継承」ではありません。 ★それは、tdに指定したスタイルが適用されないという事です。   カスケード処理の順序( http://momdo.s35.xrea.com/web-html-test/spec/CSS21/cascade.html#cascading-order ) table.sample td{} は、 ・class属性の空白で仕切られた値リストの一つにsampleを持つtable要素の子孫であるtd要素という意味です。詳細度は[0 0 1 2]=12です。  これが適用されないと言う事は、 ・より高い詳細度の指定がある。   一意セレクタ[0100]とか、スタイル属性[1000]   より詳細な記述がある。body div.section table td [0 0 1 4]、 ・同じ詳細度で後述の指定がある。 ・HTMLの文書構造かセレクタの記述に誤りがある。  の何れかでしょう。  Web開発されているなら、開発者ツールが豊富なfirefoxお使いだと思いますがそのアドオンにFirebug( https://addons.mozilla.jp/firefox/details/1843 )があります。それでスタイルが適用されない要素を選択すると、カスケードの順番に従ってスタイルが明示されます。  それを使うのが、最もよくわかる。

noname#233614
質問者

お礼

回答ありがとうございます。 まだ原因は究明できてないのですが、tableとtrを同時に指定する事で解決しましたので、とりあえず問題自体は解決したという事で、閉め切らせて頂きます。 今後、しっかり原因を究明していきたいと思います。 ありがとうございました。

その他の回答 (2)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

borderは継承されないプロパティです。継承されたらまずいです。 [例] <div class="sample">  <h1>見出し</h1>  <p>記事</p> で、div.sample{border:solid 1px red;}と書いて継承されたら<h1>にも<p>にもborderが引かれてしまう。 'border-style' 値: <border-style>{1,4} | inherit 初期値: 個々のプロパティを参照 適用対象: すべての要素 継承: no ★継承されない パーセンテージ: 利用不可 メディア: visual 算出値: 個々のプロパティを参照  ⇒Box model - CSS 2.1 spec (ja)( http://momdo.s35.xrea.com/web-html-test/spec/CSS21/box.html#propdef-border-style ) table.sample{ border: solid 2px gray; } table.sample th,table.sample td{ border:1px gray solid; } と、borderは個別に指定します。 逆に言うと、上下左右のborderを変更した利することも簡単にできます。 cellpadding - HTML - 教えて!goo( http://okwave.jp/qa/q8788064.html ) の回答が参考になるでしょう。 ★なお、tableの場合はsummary属性が必須ですのでそれを使うと table[summary="コーヒーの種類"]{*************} のように、属性セレクタで書くほうが楽です。 また、本文中の表をすべてしたら div.section table{} div.section table th,div.section td{} とするなど 5 セレクタ( http://momdo.s35.xrea.com/web-html-test/spec/CSS21/selector.html ) 6 プロパティ値とカスケーディング、継承の割り当て( http://momdo.s35.xrea.com/web-html-test/spec/CSS21/cascade.html )  をしっかり活用しましょう。CSSの命ともいえる重要な部分ですから・・

noname#233614
質問者

お礼

ご回答ありがとうございました。 質問内容に誤りがあったために、補足させて頂きました。 ご迷惑をおかけし申し訳ありません。

noname#233614
質問者

補足

質問の記述内容に誤りがありました。ご迷惑をおかけしすみません。 CSSは、No1様が記述されているように、classを限定した表記の table.sample td { border: 2px #2b2b2b solid; } で記述した場合の話です。 borderが継承されないと言う点は理解しているのですが、<table>に対して指定したclassがその下に位置する<td>に継承されないという点で困っております。 新しく作り直したhtmlとcssでは問題なく継承されますので、何か原因があるのだろうとは思っているのですが…

  • t_ohta
  • ベストアンサー率38% (5072/13251)
回答No.1

今運営されているホームページには、質問者さんがcssの記述をしか箇所以外にtdのスタイルを指定している箇所があるのではないでしょうか。 また、tableにclassをつけているのであれば table.sample td { border: 2px #2b2b2b solid; } とすれば、sampleクラスのテーブル内のtdにスタイルが適用されます。

noname#233614
質問者

お礼

ご回答ありがとうございました。 質問内容に誤りがあったために、補足させて頂きました。 ご迷惑をおかけし申し訳ありません。

noname#233614
質問者

補足

質問の記述内容に誤りがありました。ご迷惑をおかけしすみません。 CSSは、No1様が記述されているように、classを限定した表記の table.sample td { border: 2px #2b2b2b solid; } で記述した場合の話です。 同じようにID指定で記述しているtdが一つあるのですが、そちらを削除してもclass指定が継承されませんでした。。

関連するQ&A

  • css で指定した div と table の幅が

    html と css の勉強中です。 スタイルシートで次のように同じ幅を 指定したのですが、表とブロックの幅が 揃いません。 <style><!-- #a {width:300px;border:solid 2px} #b {width:300px;border:solid 2px} --></style> <div id="a"> <p> a b c d </p> </div> <table id="b" border="1"> <tr> <td>a</td><td>b</td><td>c</td><td>d</td> </tr> </table> ブラウザは IE6と opera で見てみました。 お願いします。

    • ベストアンサー
    • CSS
  • tableにtable。table同士の間隔を拡大

    スクロールバーを付けるためにtable内にtableを入れました。 中のtableとtableの間隔を開けたいです。 言葉が少ないですが、その分画像で頑張って説明します。 お願いいたします。 <style type="text/css"> #test0{ cellpadding: 2; width: 518px; background-color : #fff; border:1px solid #333; border-spacing:0; } #start{ width: 495px; height: 230; border-top:1px solid #333; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #ff0000; } .center{ width: 495px; height: 230; border-top: 0; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #ff0000; } #end{ width: 495px; height: 230; border-top: 0; border-left:1px solid #333; border-right:1px solid #333; border-bottom:1px solid #40ee22; } td.test1{ background-color: #000000; color: #333333; } td.test2 img{ margin: 10px; } .test3{ font-size: 12px; padding: 5px; } td.test4{ text-align: center; } </style> <table id="test0"> <tbody> <tr> <td> <DIV style="height:400px; overflow:auto;"> <table id="start"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> <table class="center"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> <table id="end"> <tr> <td class="test1" colspan="3">タイトル</td> </tr> <tr> <td class="test2" rowspan="2"><img src="test.jpg" width="100" height="80"></td> <td class="test3" colspan="2">テストテストテストテストテストテスト</td> </tr> <tr> <td class="test4">left</td> <td class="test4">right</td> </tr> </table> </div> </td> </tr> </tbody> </table>

    • ベストアンサー
    • HTML
  • サイズ指定したテーブルを縦に並べるとセルがズレる

    色々と試しているんですが解決できないので教えてください。 CSSで全く同じようにサイズ指定しているテーブルを縦に並べた時、同じようにサイズ指定しているはずなのに、IEではセルの内容(テキストの長さ)によってセルの幅が変わってしまいます。具体的に言うと、ショッピングカートの商品ページのようなものを作ろうとしているのですが、以下のようなソースです。 .menu-table{ width:500px; padding:0px; border-collapse:collapse; } .menu-title{ margin:0px; padding:5px; border:1px solid #ff9900; } .menu-img{ width:110px; margin:0px; padding:5px; border:1px solid #ff9900; } .menu-style1{ width:70px; margin:0px; padding:5px; border:1px solid #ff9900; } .menu-style2{ width:300px; margin:0px; padding:5px; } .menu-style3{ margin:0px; padding:5px; } <table width="0" border="0" cellspacing="0" cellpadding="0" class="menu-table"> <tr> <td colspan="3" class="menu-title">商品名</td> </tr> <tr> <td rowspan="4" class="menu-img"><img src="item.jpg" width="100" height="100" /></td> <td class="menu-style1">説明1</td> <td class="menu-style2">あいうえお</td> </tr> <tr> <td class="menu-style1">説明2</td> <td class="menu-style2">かきくけこ</td> </tr> <tr> <td class="menu-style1">価格</td> <td class="menu-style2">\1,000¥</td> </tr> <tr> <td colspan="2" class="menu-style3">あいうえおかきくけこさしすせそたちつてとなにぬねの</td> </tr> </table> こういうテーブルを縦にいくつか並べた時、例えば2つ目のテーブルが「あいうえお」のところに「あいうえおかき」と入力すると、「あいうえお」と入力したテーブルに比べて「説明1」のセル幅が狭くなってしまいます。Firefoxでは綺麗に揃うんですが、どうしてもIEではずれます。ボーダーの幅のぶんも計算に入れて幅を指定し直してもずれるんです。説明が下手すぎてうんざりかもしれませんが、どなたか解決策が分かれば教えてください。

    • 締切済み
    • CSS
  • CSS スタイルを子要素の子要素に継承させたくない

    スタイルシートについてまだ初心者なため質問させてください。 以下のようにテーブルのボーダーのスタイルを子要素(<table><td>)にスタイルを継承(?)させているのですが、この方法だと子要素の子要素(<table><td><table><td>)に対しても継承されてしまいます。 table.border { border-style:solid; border-width: 1px 1px 1px 1px; border-collapse: collapse; } table.border td { border-style:solid; border-width: 1px 1px 1px 1px; } table.border > td {…} という指定の方法もあるようですが、こちらは対応しているブラウザが乏しいようで事実上使用できません。 子要素の子要素に対して以下のクラスを指定しても継承が優先されるためか反映されませんでした。 table.none { border-style:none; } table.none td { border-style:none; } HTMLタグに直接以下のように指定しても同様でした。 <table style="border-style:solid;"> どこかのサイトでは継承をリセットする必要があるような事が書いてあったような気がします。 もちろん継承を利用せず<table>および<td>個々にクラスを指定すれば(不必要なタグには指定しなければ)可能だと思いますが、これだと大きなテーブルの場合に非効率で悩んでいます。 どのようにすれば子要素の子要素にスタイルを継承させないようにできるでしょうか?

    • ベストアンサー
    • CSS
  • FireFoxでのtable枠線の表示/非表示

    下記HTMLコードは テーブル(TDレベル)の枠線を表示するCSSクラスと 非表示とするCSSクラスを用意し、ボタンを押す事 によりjavascriptでCSSクラスを変更するものです。 <html> <head> <style TYPE="text/css"><!-- table.tclass { border-collapse:collapse; } td.b { border: 1px solid; border-color:#000000; } td.w { border:noe; border-color:#FFFFFF; } --></style> <script Language="JavaScript"><!-- function delLine(elem){ var obj = document.getElementById(elem); obj.className = "w"; } // --></script> </head> <body> <table class="tclass"> <tr> <td class="b" id="td1">Table1</td> <td class="b" id="td2">Table2</td> </td> </tr> </table> <button type='button' onclick='delLine("td2");' >枠線を消す</button><br> </body> </html> 上記のように2つのテーブルセルのうち、右側セルの枠線を 消したいのですが、 右側セルの右枠だけ消えて、残りの枠は表示され たままになります。 因みに onclick='delLine("td1");delLine("td2");' のように、両方のセルともに枠線を消す場合は問題ありません。 また、tableタグのborder-collapse:collapse指定を外しても 成功する事を確認していますが、border-collapse:collapseは できれば指定したいです。 また、FireFox以外ではIE、safari、operaでは問題ありません。 何か対処方法をお分かりの方がおりましたらお教えください。 よろしくおねがいします。

    • ベストアンサー
    • HTML
  • テーブルの線の色が指定できない

    テーブルの線の色が指定できないうえ、最後に宣言したスタイルシートが適用されてしまいます。 理由がわかりません。 <style type="text/css"> table, td, th.bordercolor_white { border: 1px white solid; } table, td, th.bordercolor_red { border: 1px red solid; } </style> <table class="bordercolor_white"> <tr> <td>aaa</td> <td>bbb</td> </tr> </table> このような文だと、 <table class="bordercolor_white">としているのに、 なぜかテーブルの線の色は、赤になってしまいます。 table, td, th.bordercolor_red { border: 1px red solid; } table, td, th.bordercolor_white { border: 1px white solid; } のように、順番を入れ替えると、最後に宣言した白になります。 なので、<table class="bordercolor_white">の部分は無視されるようです。 二つのテーブルの線の色を用意した場合、 任意でテーブルの線の色を付ける方法をご教授ください。

    • 締切済み
    • CSS
  • CSS tdのクラスを一部分だけ外したい

    Aのテ-ブルが格子状になるようCSSで設定しました。 その中にBのテーブルを入れ、このテーブルは罫線なしで表示したいのですが、 テーブルAのtdの設定がどうやっても消えてくれないので困っています。 ▼試した事 ・テーブルBのクラスをborder-style:none ・テーブルBのクラスに白い罫線を付けてみる ・テーブルBにスタイルでnoder-style:none ▼ソース(簡略) .t-a{ border-top:solid 1px #C4772B; border-right:solid 1px #C4772B;} .t-a td{ border-bottom:1px solid #C4772B; border-left:1px solid #C4772B;} <table class="t-a"> <tr> <td>テーブルA</td> <td>テーブルA</td> </tr> <tr> <td>  <table>  <tr>  <td>テーブルB</td>  <td>テーブルB</td>  <td>テーブルB</td>  </tr>  <tr>  <td>テーブルB</td>  <td>テーブルB</td>  <td>テーブルB</td>  </tr>  </table> </td> </tr> <tr> <td>テーブルA</td> <td>テーブルA</td> </tr> </table> テーブルBのborder-style:noneが反映されなかったので、テーブルBのCSSは削除していまいました。 力を貸してください。

    • ベストアンサー
    • HTML
  • cssでtableを指定したい

    教えてください。 cssでテーブルを指定しているのですが、別の幅のテーブルを指定したいときはどうすればよいのでしょうか。 現在はこういうふうに書いています。ちょっと汚いですが。。。 ----------------------------- #content #main p{ margin:10px 18px 25px; font-size:12px; } #content #main table { border-collapse: collapse; background-color: #FFFFFF; width: 480px; margin:0px padding; border: 0px #000000: 1px; } #content #main caption{ text-align: right; padding-right: 5px; font-size:12px; } #content #main th {     border: #999999 1px solid; font-size:12px; font-weight: normal; background-color: #D8EAFC;      padding: 5px; } #content #main td{ border-right: #999999 1px solid; border-top: #999999 1px solid; border-left: #999999 1px solid; border-bottom: #999999 1px solid; font-size:12px; text-align: left;      padding: 5px; } ----------------------------- 実際にタグを書くときは、こう書いています。 ----------------------------- <table> <tr> <th>aaaa</th> <td>5555555555555555555555555555</td> </tr> </table> ----------------------------- これをmaintable subtable というふうに幅が違うものにしたいのですが、cssにmaintableを追加して、<table class=maintable">と指定しても、maintableではなく、tableで表示されます。 こういう場合はどうすればよいのでしょうか?

    • ベストアンサー
    • XML
  • 枠線が表示されません

    初歩的な質問ですみません。 以下のようなテーブルを組んでいるのですが 枠線が表示されません。 どこがおかしいのでしょうか? 宜しくお願いします。 ==================================HTML================================== <html> <head> <link rel="stylesheet" href="test.css" type="text/css"> </head> <body> <table class="table1"> <tr> <th>左</th> <th>真ん中</th> <th>右</th> </tr> <tr> <td class="blue">1</td> <td class="blue">田中</td> <td class="blue">55</td> </tr> <tr> <td class="white">2</td> <td class="white">鈴木</td> <td class="white">42</td> </tr> <tr> <td class="blue">3</td> <td class="blue">斉藤</td> <td class="blue">20</td> </tr> </table> </body> </html> ==================================CSS================================== /*テーブル全体*/ .table1 { border-collapse: collapse; /* 枠線の表示方法 重ねる */ border: 2px #757575 solid; /* テーブル全体の枠線(太さ・色・スタイル)solid:実線 */ margin-top: 10px; /* 表示位置 */ margin-left: 25px; /* 表示位置 */ } /*テーブルの見出し部分*/ th { font-size:10pt; text-align:left; /*左寄せ*/ color:#888888; /*テキスト色*/ background-color:#B8B8B8; /*背景色*/ border-style: solid; /* 枠の種類 */ border-width: 0px 1px; /* 枠の幅 */ border-spacing: 0; /* 隣のセルとの間隔 */ } /*テーブルのデータ部分*/ td { font-size:10pt; text-align:left; /*左寄せ*/\ border-style: solid; /* 枠の種類 */ border-width: 0px 1px; /* 枠の幅 */ } .blue{ background-color: #CCCCFF; } /* セル色:青 */ .white{ background-color: #FFFFFF; } /* セル色:白 */ /*背景色と文字色*/ body { background-color: #969696; color: #000000; }

    • 締切済み
    • CSS
  • CSSでTRに枠線とTDに背景を指定したい。

    CSSでTRに枠線種を指定、TDで背景色を指定したいのですが、 Firefoxでは思惑通り表示されますが、IEではTRの枠線が表示されません。 何か良い対応策は無いでしょうか? == CSS == TABLE { border-collapse: collapse; } .grid { border: solid 1px; border-color: #888; } .nogrid { border: none; } .title { background-color: #ff7; } .data1 { background-color: #eef; } .data2 { background-color: #fff; } == HTML == <table> <tr class="grid"> <td class="title">項目1</td> <td class="title">項目2</td> <td class="title">項目3</td> </tr> <tr class="nogrid"> <td class="data1">値1</td> <td class="data1">値2</td> <td class="data1">値3</td> </tr> <tr class="nogrid"> <td class="data2">値1</td> <td class="data2">値2</td> <td class="data2">値3</td> </tr> </table>

専門家に質問してみよう