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

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

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

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

CSS

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

Q&A

2回答

313閲覧

tableの並びの横か縦かを要素とビューポートの幅によって切り替えたい

michir

総合スコア12

CSS3

CSS(Cascading Style Sheet)の第3版です。CSS3と略されることが多いです。色やデザインを柔軟に変更することが可能になります。

HTML5

HTML5 (Hyper Text Markup Language、バージョン 5)は、マークアップ言語であるHTMLの第5版です。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

HTML

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

CSS

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

0グッド

2クリップ

投稿2022/06/16 15:13

編集2022/06/17 09:47

WordPressでウェブサイトを制作しています。
サイトの中に表があるページがあります。

html

1<table> 2<tbody> 3<tr><th>所在地</th><td>東京都千代田区千代田3-3-3 千代田ビル3F</td></tr> 4<tr><th>電話番号</th><td><a href="tel:03-3333-3333">03-3333-3333</a></td></tr> 5<tr><th>コメント</th><td>ほげほげほげほげほげほげほげほげほげほげほげほげ</td></tr> 6</tbody> 7</table>

なお、thとtdのインナーテキストは、WPから吐き出しており、ページによって文字数が異なります。

狭い画面で閲覧した場合、表中のテキストの折り返しが多くなり、見にくいので、画面が狭い場合は、thとtdを縦に並べて表示させています。

ブレイクポイントについて、本来は、下図のように、ビューポートの幅と折り返しが生じるtableの幅を比較して、前者の方が狭い場合に縦並びにしたいです。
イメージ説明
しかし、やり方が分からないので、現状はブレイクポイントを以下のように599pxに仮置きしています。

css

1@media (max-width: 599px){ 2th,td{ 3 display:block; 4}}

しかし、これでは次のような問題が生じます。

  • 画面幅が599px以下の場合、thとtdを横並びにしても画面幅が十分に足りている場合でも、不必要に縦並びになってしまう。
  • 画面幅が599px超の場合、テキストに折り返しが生じている場合でも、横並びで表示される。

そこで、ビューポートの幅と折り返しが生じるtableの幅を比較して、前者の方が狭い場合に縦並びにする方法を助言を頂けますと大変助かります。

ビューポート幅はmatchMediaによって取得すればよいかと存じますが、折り返しが生じる要素幅をどのように取得すればよいかが分かりません。

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

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

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

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

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

yambejp

2022/06/17 00:35 編集

縦並びとはこうなればいいのでしょうか? <table> <tbody> <tr><th>所在地</th></tr> <tr><td>東京都千代田区千代田3-3-3 千代田ビル3F</td></tr> <tr><th>電話番号</th></tr> <tr><td><a href="tel:03-3333-3333">03-3333-3333</a></td></tr> <tr><th>コメント</th></tr> <tr><td>ほげほげほげほげほげほげほげほげほげほげほげほげ</td></tr> </tbody> </table>
guest

回答2

0

こんな感じの切り替え?

javascript

1<script> 2window.addEventListener('DOMContentLoaded', ()=>{ 3 btn.addEventListener('click',()=>{ 4 if(t1.querySelector('th ~ td')){ 5 t1.querySelectorAll('th ~ td').forEach(td=>{ 6 const tr=document.createElement('tr'); 7 td.closest('tr').after(tr); 8 tr.appendChild(td); 9 }); 10 }else{ 11 t1.querySelectorAll('td').forEach(td=>{ 12 const tr=td.closest('tr'); 13 tr.previousElementSibling.appendChild(td); 14 tr.remove(); 15 }); 16 } 17 }); 18}); 19</script> 20<input type="button" id="btn" value="btn"> 21<table border> 22<tbody id="t1"> 23<tr><th>所在地</th><td>東京都千代田区千代田3-3-3 千代田ビル3F</td></tr> 24<tr><th>電話番号</th><td><a href="tel:03-3333-3333">03-3333-3333</a></td></tr> 25<tr><th>コメント</th><td>ほげほげほげほげほげほげほげほげほげほげほげほげ</td></tr> 26</tbody> 27</table>

上記動作で問題ないならmatchMedia

javascript

1<script> 2window.addEventListener('resize', ()=>{ 3 const flg_1=t1.querySelector('th ~ td')!==null; 4 const flg_2=window.matchMedia( "(min-width: 599px)" ).matches; 5 if (flg_1 && !flg_2) { 6 t1.querySelectorAll('th ~ td').forEach(td=>{ 7 const tr=document.createElement('tr'); 8 td.closest('tr').after(tr); 9 tr.appendChild(td); 10 }); 11 }else if(!flg_1 && flg_2){ 12 t1.querySelectorAll('td').forEach(td=>{ 13 const tr=td.closest('tr'); 14 tr.previousElementSibling.appendChild(td); 15 tr.remove(); 16 }); 17 } 18}); 19</script> 20<table border> 21<tbody id="t1"> 22<tr><th>所在地</th><td>東京都千代田区千代田3-3-3 千代田ビル3F</td></tr> 23<tr><th>電話番号</th><td><a href="tel:03-3333-3333">03-3333-3333</a></td></tr> 24<tr><th>コメント</th><td>ほげほげほげほげほげほげほげほげほげほげほげほげ</td></tr> 25</tbody> 26</table>

投稿2022/06/17 00:52

編集2022/06/17 03:53
yambejp

総合スコア114784

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

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

michir

2022/06/17 09:49

コメントありがとうございます! 質問文を編集いたしました。 分かりにくく大変申し訳ございませんでした!
yambejp

2022/06/17 10:27

わたしの追記分が回答になっていませんか?
michir

2022/06/17 13:14

コメントありがとうございます! 私の方で何らかの勘違いをしているかもしれず大変恐縮なのですが、追記分のコードをコピペしてそのままHTMLファイルにして動かしてみたところ、599pxで切り替わるのみで、折り返しの有無で切り替わるようにはなっていませんでした
guest

0

具体的にどのようなレイアウトなのか不明瞭ですが、
とりあえず下記のような感じでどうでしょう。

テーブルでは難しいのでFlexレイアウトで実装してます。

css

1tr { 2 display: flex; 3 flex-wrap: wrap; 4} 5th { 6 width: 100px; 7} 8th,td{ 9 display:block; 10} 11@media (max-width: 599px){ 12 tr { 13 flex-direction: column; 14 } 15 th,td{ 16 width: 100%; 17 } 18}

CodePen サンプル

投稿2022/06/16 16:42

hatena19

総合スコア33699

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

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

michir

2022/06/17 09:49

コメントありがとうございます! 質問文を編集いたしました。 分かりにくく大変申し訳ございませんでした!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問