質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

Q&A

解決済

2回答

2260閲覧

頭の th を固定幅に他は可変幅にしたいのですが,すべて可変幅になります。

blackcoffee

総合スコア25

HTML

HTMLとは、ウェブ上の文書を記述・作成するためのマークアップ言語のことです。文章の中に記述することで、文書の論理構造などを設定することができます。ハイパーリンクを設定できるハイパーテキストであり、画像・リスト・表などのデータファイルをリンクする情報に結びつけて情報を整理します。現在あるネットワーク上のほとんどのウェブページはHTMLで作成されています。

CSS

CSSはXMLやHTMLで表現した色・レイアウト・フォントなどの要素を指示する仕様の1つです。

0グッド

0クリップ

投稿2019/12/08 09:35

576px以上のときは
th .first を固定幅にし,それ以外のth/tdは可変にしたい。
それで「th .firstのwidth: 140px」としてしたのですが,固定されません。

以下,2点についてお教えてください。
1 th .first を固定幅にする方法
2 .thuと.satを他のthというかtdより少し大きめにしたいので,それぞれ「widthをpx」で指定したのですが可変になります。
この場合「width: calc((100% - 140px) / 6 * 0.8)」(計算式は適当です)等のように指定しなくても可変になるのはなぜでしょうか。 (実質1と同じ質問かもしれませんが…)

tableに「table-layout: fixed」を記述してもダメでした。
コードが冗長で申し訳ありません。

//HTML <div> <table> <thead> <tr> <th class="first">診療<br>受付時間</th> <th class="mon">月</th> <th class="tue">火</th> <th class="wed">水</th> <th class="thu">木</th> <th class="fri">金</th> <th class="sat">土</th> </tr> </thead> <tbody> <tr> <th class="first">9:00~<br>12:00</th> <td class="mon">●</td> <td class="tue">●</td> <td class="wed">●</td> <td class="thu">●<br><span>12:30まで</span></td> <td class="fri">●</td> <td class="sat">●<br><span>12:30まで</span></td> </tr> <tr> <th class="first">14:00~<br>18:00</th> <td class="mon">●</td> <td class="tue">●</td> <td class="wed">●</td> <td class="thu">休診</td> <td class="fri">●</td> <td class="sat">休診</td> </tr> </tbody> </table> </div> //CSS table { width: 100%; border: 1px solid orange; border-collapse: separate; border-spacing: 2px; font-size: 14px; line-height: 1.2; table-layout: fixed; } thead th { height: 48px; border: 1px solid orange; vertical-align: middle; } tbody th { height: 70px; border: 1px solid orange; vertical-align: middle; } td { border: 1px solid orange; font-size: 20px; line-height: 1; text-align: center; vertical-align: middle; } td span { font-size: 12px; } tbody tr:nth-of-type(2) .sat, tbody tr:nth-of-type(2) .thu { font-size: 14px; } @media (min-width:576px) { .first { width: 140px;  /*これが固定幅になりません*/ } .first br { display: none; } thead th:not(:first-child) { width: 44px; } .thu, .sat { width: 70px; } .thu span { font-size: 12px; } }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

ベストアンサー

結論を先に言うと、width:140pxの指定は固定幅として機能しています

css

1 thead th:not(:first-child) { 2 width: 44px; 3 } 4 5 .thu, .sat { 6 width: 70px; 7 }

他の回答者の方も指摘していますが、この指定は可変にしたい要素にする指定ではありません。

2 .thuと.satを他のthというかtdより少し大きめにしたいので,それぞれ「widthをpx」で指定したのですが可変になります。

上とありますが、可変かつ他の行より大きくしたい場合は、%で指定するのが正しいです、
pxで指定をすると、他の行が指定の幅以下の場合は大きく見えるかもしれませんが、それ以上になった際に逆に小さく見えてしまいます。

この場合「width: calc((100% - 140px) / 6 * 0.8)」(計算式は適当です)等のように指定しなくても可変になるのはなぜでしょうか。 (実質1と同じ質問かもしれませんが…)

display:table;に属するtable-cell(th,td)はその要素の幅に必ずいっぱい入ろうとします。
今回、width:100%を指定したため、要素は画面の幅(厳密にいうとtableの親要素のdiv要素)いっぱいに広がります。しかし、上記の全てのtable-cellで絶対値pxの指定をしている為、tableの幅に対する要素の幅が足りなくなっています。
その為、足りない部分に無理やり幅を増やして表示され、可変に見えているのです。

以下追記、
また、現状の指定だと、そもそも

css

1 .thu, .sat { 2 width: 70px; 3 }

の指定は無視されるはずです、それは、cssのセレクタに優先順位と呼ばれるものがあるからで、

css

1 thead th:not(:first-child) { 2 width: 44px; 3 }

の指定のほうが優先順位が高く、値が上書きされている為です。
詳しくは以下リンクをご覧ください
優先順位

以下、コメントの下記に対しての追記

width:140pxの指定で固定幅になりました。ただ、classで指定しmonからwedとfriはwidth: calc((100% - 140px) * 0.15) thuとsatはwidth: calc((100% - 140px) * 0.2)指定しデベロッパーツールでもその通りに適用されているのですが、いずれも可変で同じ大きさになります。thuとsatは相対的に少し大きめにしたのですが、間違いをご指摘いただけませんか。

困ったらMDN等のリファレンスを見るようにしましょう。
calcのMDNには以下とあります。

自動レイアウトおよび固定レイアウトのテーブルで列・列グループ・行・行グループ・セルの幅や高さに対してパーセンテージを含む数式を指定すると、 auto が指定されたものとして扱います。

この場合は以下とすることでやりたいことができるでしょう。

css

1 .mon,.tue,.wed,.fri { 2 width: 15%; 3 } 4 5 .thu, .sat { 6 width: 20%; 7 }

なぜ、親要素の100%から140pxを引かなくてよいのかという疑問があるかもしれませんが、そこは私は憶測でしか回答できません。すみません。(調べましたが、正確な仕様としての記述が見つかりませんでした。)
恐らく、display:tableの仕様で子要素の絶対値を優先するような決まりがあるのだと思います。
(親要素にdisplay:blockを指定すると相対値が優先される)
まあ、この辺は私は感覚で指定してしまっていてこういうもんなんだと覚えてしまってますが。
気になるのであれば、新しく質問してもよいかもしれませんね。

投稿2019/12/09 05:34

編集2019/12/12 01:12
makosankibu

総合スコア289

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

makosankibu

2019/12/09 05:35

絶対値と相対値について調べるといいかもしれませんね。
TakuF

2019/12/09 06:15

とても勉強になりました!
blackcoffee

2019/12/11 09:15

遅くなりましてごめんなさい。ありがとうございます。なぜpx指定しても可変になったのか理由がわかりました。 width:140pxの指定で固定幅になりました。ただ、classで指定しmonからwedとfriはwidth: calc((100% - 140px) * 0.15) thuとsatはwidth: calc((100% - 140px) * 0.2)指定しデベロッパーツールでもその通りに適用されているのですが、いずれも可変で同じ大きさになります。thuとsatは相対的に少し大きめにしたのですが、間違いをご指摘いただけませんか。
blackcoffee

2019/12/12 11:27

無事解決しました。本当にありがとうございます。
guest

0

擬似要素について詳しくないので細かい説明はできませんが
th .first を固定幅にし,それ以外のth/tdは可変にしたい。との記述であればここの指定は不必要ではありませんか?
気になったくらいなので解決できなければごめんなさい。

css

1 thead th:not(:first-child) { 2 width: 44px; 3 }

投稿2019/12/08 10:14

TakuF

総合スコア41

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

blackcoffee

2019/12/09 05:28

指定しないと中身の大きさに応じたwidthになり可変になるのですが、木・土は他の曜日より大きくしたいので、各曜日のセルにwidthを指定しました。
TakuF

2019/12/09 05:55

擬似要素に関しては thead th>:not(:first-child) として誰の子要素かを記入しないといけないみたいです! また、可変させたい部分以外にwidthを指定してはいかがでしょうか? widthを指定していないところだけはページに合わせて可変。。。というかんじで
blackcoffee

2019/12/11 09:15

遅くなりましてごめんなさい。ありがとうございます。 疑似要素をやめてclass指定にしました。それでもうまくいかないんです。 もう一度、教えて下さい。 詳細はmakosankibuさんへのコメント欄をごらんください。
TakuF

2019/12/11 12:28

どううまくいかないかを知りたいので記述など含めてもう一度今の現状を見せていただけますか?
blackcoffee

2019/12/12 11:27

自己解決しました。CSSの「table」に「table-layout: fixed」を指定したのが誤りでした。削除したら上手くいきました。 下手な質問の仕方でまた返事も遅いのにお付き合いいただきありがとうございます。感謝します。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問