• ベストアンサー

Safariでテーブルのセルの高さを均等にしたい

Safariです(ちなみに見ているバージョンは4) <table> <tr> <td></td> <td rowspan="2"></td> </tr> <tr> <td></td> </tr> </table> このような、片方が結合しているテーブルで、 隣のセルの高さを均等にしたいのです。 ほかのブラウザでは良いのですが、 Safariだとどうしても上が短く、下が長くなってしまいます… CSS等で均等にできないでしょうか?? 試しにheight:50%;にしましたがなりませんでした。

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

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

  • ベストアンサー
  • abril
  • ベストアンサー率69% (388/560)
回答No.1

> 試しにheight:50%;にしましたがなりませんでした。 この場合、考えなければいけないのは”50%”というのは「どこの高さに対する”50%”なのか?」という事です。 例えば2000円の品物がセールで「50%OFF!」と銘打ってあったら、2000×0.5=1000、で1000円という値が出ます。しかし、元値が書いてなかったらいくらになるのかわからないですよね?それと同じ事が言えます。ただ、漠然とtdだけに%だけ指定しても、実際にはどの様な描画領域になるのかわからない状態になります。 下記の様な簡単なサンプルで検証してみました。 【HTML】 <table class="hoge" cellspacing="0" cellpadding="0" border="1" summary="概要"> <tr> <td class="data">上のセル</td> <td rowspan="2">結合セル</td> </tr> <tr> <td class="data">下のセル(データ量は上のセルより多い)</td> </tr> </table> 【CSS】 table.hoge td.data { width: 100px; height: 50%; } で、更にCSSには 【A】 table.hoge { width: 200px; height: 100px; } というtableのスタイルが設定されているとします。 この場合、tableの高さ100pxに対して、行が2行でそれぞれのセルの高さが50%、というと100px×0.5=50pxという事で計算が合うので、大抵のブラウザ(Safariは4ではなく3しかないですが)では均等に見えていると思います。無論ですが、3行以上だったら均等にはなりません。 #ただし、セルの中のデータの相対量が結果として50pxを超える場合は、無視してセルの高さをデータが収まりきるまで伸ばします。 #これは変え様がありません。tableのtd要素におけるheightとは、表のセルという性質上、min-height(最低限の高さを保証し、データ量がそれを超える場合は自動的に伸びる)と同じ挙動になるからです。 ですが、この指定が 【B】 table.hoge { width: 200px; height: 100%; } となっていたら、【A】とは異なり、tdの高さは完全に内包するデータ量で成り行きになります。この場合のtableのheight: 100%;というのは何も指定していない時と同じ(厳密に言うと、一部の環境・条件下ではその限りではないのですが、そこはややこしくなるので無視しておきます。)、セルの内容の量に応じて自動で伸縮するからです。子要素(td)の高さに親要素(table)の高さが依存しています。 ちなみに、この問題は先の質問(質問番号:5087743)のNo.3様のご回答のでJavaScriptを使う事で解決したのではなかったのですか?

chikotto
質問者

お礼

丁寧な解説ありがとうございます! 前の質問(5087743)はIEでセルの高さを「固定」したかったもので、これとは違います。

関連するQ&A

  • セルの高さを固定したい

    こちらの質問と同じです。 http://oshiete1.goo.ne.jp/qa4888659.html IEにおいて、隣に結合したセルがあり、中央の高さを固定したいという状態です。 条件として、”基本HTMLは変更しない”が重要です。 テーブルの変わりにdivにする、などは求めていません。 ■HTML <table> <tr> <td>&nbsp;</td> <td rowspan="3">結合セル</td> </tr> <tr> <td>高さを固定</td> </tr> <tr> <td>&nbsp;</td> </tr> </table> HTMLで高さを指定しても、CSSでheightやmax-heightで指定しても伸びてしまいます。 何か方法はあるでしょうか?

    • ベストアンサー
    • HTML
  • セルの高さを固定するには?

    2列2行のテーブルを作り、右の列をrowspan=2で結合しています。 右の列はテキストや画像を追加入力していくので、縦が長くなっていきます。 その際、左上のセルだけ高さを固定し、左下のセルは自動で高さが決まるようにしたいと思っています。 が、左上のセルにheight=150と入力しても、右が伸びるにつれて長くなってしまいます。 CSSで指定しても同じです。 rowspanを使うと、結合していないセルの高さを固定することはできないのでしょうか。 良い解決策がありましたら、お知恵をお貸し下さい。 <table> <tr> <td>ここを固定したいです</td> <td rowspan="2">ここが長くなっていきます</td> </tr> <tr> <td>ここは右が長くなるにつれて自動で伸びるようにしたいです</td> </tr> </table>

    • ベストアンサー
    • HTML
  • ブラウザによってテーブルのセルの高さが変わる

    質問させて頂きます。 現在、テーブルを使用して表を作っているのですが、 ブラウザによってセルの高さが変わってしまいます。 safariでは思った通りのレイアウトになるのですが、 chrome、Firefoxでは [ height ] の値が反映されていないのか、 崩れてしまいます。 添付は希望するレイアウト(safariではこのように表示されます)です。 ソースを記載しますので、どなたかご教示お願い致します。 --- html --- <table class="hogs" cellspacing="5"> <tr> <td width="180" height="184" rowspan="3"><img src="img/001.gif" width="180" height="184" alt=""/></td> <th height="22">項目1</th> <td>文章1</td> </tr> <tr> <th height="22">項目2</th><td height="22">文章2</td> </tr> <tr> <th height="140" valign="top">項目3</th><td valign="top">文章3</td> </tr> </table> --- CSS --- table.hoge { background-color: rgba(50,50,50,0.3); width: 640px; height: 184px; margin: 0 auto 18px; padding: 10px; } table.hoge th { height: 22px; background-color: #7ac0c9; width: 80px; } table.hoge td { padding: 0 20px; }

    • ベストアンサー
    • HTML
  • tableセルに色を付ける

     tableセルに色を付けます。  で、行で指定しようとtrタグにbgcolorをいれました。  ネスケでは問題ないのですが、ie6だとテーブルの外にも色がついてしまい変です。  セルを結合させたりしたりしてることが影響あるのでしょうか?ieのバグですかね?  コレを解決するには、trで色を付けるのを諦めて、セルごと(tdやth)に指定していくしかないのでしょうか。  スタイルシートは使わない前提です。htmlだけでの解決があったら教えてください。 <html> <head> </head> <body> <table border="10" align="center"> <tr> <th colspan="2">タイトル</th> </tr> <tr> <td height="70" rowspan="2" align="center" valign="top">1</td>  <td>あ</td> </tr> <tr>  <td>い</td> </tr> <tr bgcolor="red">  <td>2</td>  <td>う</td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • テーブルのセルの高さ

    テーブルのセルの高さを設定するには、HEIGHT=で設定すればいいと思うのですが、 たとえば、わかりやすい例でいうと、 <HTML> <BODY> <TABLE BORDER=1> <TR><TD VALIGN="top">セルA</TD> <TD VALIGN="top" ROWSPAN="2"> <TABLE BORDER=1> <TR><TD>セルB-1</TD><TD>セルB-2</TD></TR> <TR><TD>セルB-3</TD><TD>セルB-4</TD></TR> <TR><TD>セルB-5</TD><TD>セルB-6</TD></TR> <TR><TD>セルB-7</TD><TD>セルB-8</TD></TR> <TR><TD>セルB-9</TD><TD>セルB-10</TD></TR> <TR><TD>セルB-11</TD><TD>セルB-12</TD></TR> <TR><TD>セルB-13</TD><TD>セルB-14</TD></TR> </TABLE> </TD></TR> <TD VALIGN="top">セルC</TD></TR> </TABLE> </BODY> </HTML> というテーブルの場合、セルAとセルCの境界はセルBの高さの真中くらいに なると思います。 それで、セルAとセルCの内容は固定なのですが、セルB内のテーブルはcgiからの 書き出しで可変長です。 実現したいことは、セルBの大きさにかかわらず、セルAの高さを固定したいのです。 セルCはセルBの高さと連動して可変するようにテーブルを組みたいのですが、 どのように指定すれば実現できるでしょうか? セルAにHEIGHT指定してもなぜか、無視(?)されてしまいます・・・ よろしくお願いします。

  • tableのセル高さの固定法

    下記のようなTABLEがあるとします. 右の列は縦3行を連結した1つのセルになっています. また左上の「1」のセルの高さは,50PIXとなっています. いま,右列セルの内容が増えて,table全体の高さが増した場合, 「1」セルはその高さ指定50PIXを無視して拡がってしまいます. このような状況を回避して,右列セルの高さがどうあろうとも 「1」セルの高さを固定する方法を教えて下さい. (例えば,右列セルが高くなった場合,  「1」セルと固定する代わりに「3」セルを拡げて全体の高さを確保する,など) <TABLE border="1"> <TBODY> <TR> <TD HEIGHT="50PIX">1</TD> <TD ROWSPAN=5> ●あ<br> ●あ<br> ●あ </TD> </TR> <TR> <TD>2</TD> </TR> <TR> <TD>3</TD> </TR> </TBODY> </TABLE>

  • tableでcolspanを使うと次行以下のセルの幅が均等に?

    tableでcolspanを使うと、colspanで結合した行の次行以下のセルの幅が均等になってしまいます。 どうすれば、colspanで結合した行の次行以下のセルの幅が均等になるのを防げるでしょうか?IE6,IE7 意図的にスタイルシートは、使用しないでください。 例: <table width="300" border="1" cellspacing="1" cellpadding="5"> <tr> <td colspan="2" width="284" align="center"> タイトルセル </td> </tr> <tr align="left" valign="top"> <td width="100"> セル左 <td> <td width="171"> セル右 <td> </tr> <table> 上記の場合、本来ならば、左のセルの幅(100px)が右のセルの幅(171px)より狭いはずなのに、左のセルの幅と右のセルの幅が均等になっていしまいます。 下記コード部分を上記のコードから削除すると、本来の比率で左のセルと右のセルの幅が表示されます。 <tr> <td colspan="2" width="284" align="center"> タイトルセル </td> </tr> よろしくお願いします。

    • ベストアンサー
    • HTML
  • HTMLのrowspan

    HTML初心者です。 下記のようにテーブルを作成していますが、 2行目がなかったことにされてしまいます。 <table> <tr><td rowspan=2>1-1</td><td rowspan=2>1-2</td></tr> <tr></tr> <tr><td>3-1</td><td>3-2</td></tr> </table> 結合されたセルを2行分の高さで表示することはできますか? ただ、実際のHTMLはPHPで動的に作成しているので、 できれば「height属性で1行目の高さを2行分にする」以外の 方法を探しています。 以上、よろしくお願いします。

  • 入れ子にしたテーブルをheight100%にする

    お世話になります。 以下のソースで、table2の高さを100%にしたいです。 この書き方では、firefoxではうまく表示できるのですが、 IEではだめでした。どこがいけないのでしょうか?? ---------------------------------- <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <style type="text/css"> <!-- html {height:100%;} body {height:100%;} .th100 {height:100%;} --> </style> </head> <body> <table width="600" border="1" cellpadding="0" cellspacing="0" class="th100"> <tr> <td width="300" rowspan="2"> 長いテキスト </td> <td height="50"><table width="300" height="50" border="0" cellpadding="0" cellspacing="0" bgcolor="#000000"> <tr> <td>table1</td> </tr> </table></td> </tr> <tr> <td><table width="300" border="0" cellpadding="0" cellspacing="0" bgcolor="#999999" class="th100"> <tr> <td>table2</td> </tr> </table></td> </tr> </table> </body> </html>

    • ベストアンサー
    • HTML
  • スクロール付きのテーブルで、内側に線を付ける方法

    添付画像のようにテーブル内に枠を周りに付けて二重の枠にして、 内側のテーブルとテーブルの間に破線をいれたいです。 しかし、CSSで設定しても破線も枠も表示されません。 こういう場合はどうすればいいのでしょうか? <table id="j"> <tbody> <tr> <td> <DIV style="height:300px; overflow:auto;"> <table class="t"> <tr> <td rowspan="3">ああああああああああああ</td> <td colspan="2">いいいいいいいいいいいいいい</td> </tr> <tr> <td colspan="2">ううううううううううううう</td> </tr> <tr> <td>えええええ</td> <td>おおおおお</td> </tr> </table> <table class="t"> <tr> <td rowspan="3">ああああああああああああ</td> <td colspan="2">いいいいいいいいいいいいいい</td> </tr> <tr> <td colspan="2">ううううううううううううう</td> </tr> <tr> <td>えええええ</td> <td>おおおおお</td> </tr> </table> <table class="t"> <tr> <td rowspan="3">ああああああああああああ</td> <td colspan="2">いいいいいいいいいいいいいい</td> </tr> <tr> <td colspan="2">ううううううううううううう</td> </tr> <tr> <td>えええええ</td> <td>おおおおお</td> </tr> </table> <table class="t"> <tr> <td rowspan="3">ああああああああああああ</td> <td colspan="2">いいいいいいいいいいいいいい</td> </tr> <tr> <td colspan="2">ううううううううううううう</td> </tr> <tr> <td>えええええ</td> <td>おおおおお</td> </tr> </table> <table class="t"> <tr> <td rowspan="3">ああああああああああああ</td> <td colspan="2">いいいいいいいいいいいいいい</td> </tr> <tr> <td colspan="2">ううううううううううううう</td> </tr> <tr> <td>えええええ</td> <td>おおおおお</td> </tr> </table> </div> </td> </tr> </tbody> </table> -----css------ #j{ cellpadding: 2; width: 520; background-color : #ffe3c8; border:1px solid #333; border-spacing:0; } } .t{ width: 500; height: 100; border:1px solid #333; } td{ cellspacing: 0; border-collapse: collapse; border-spacing:0; }

    • ベストアンサー
    • HTML

専門家に質問してみよう