🎄teratailクリスマスプレゼントキャンペーン2024🎄』開催中!

\teratail特別グッズやAmazonギフトカード最大2,000円分が当たる!/

詳細はこちら
HTML

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

CSS

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

Q&A

解決済

3回答

5568閲覧

2カラムレイアウトの回り込み

yyy_yyy

総合スコア13

HTML

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

CSS

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

0グッド

0クリップ

投稿2019/12/11 10:28

編集2019/12/11 11:18

PCで2カラム、スマホ(SP)で1カラムになるようなWebサイトを作成してるのですが、
図のようにサイドバーがスマホで回り込む場合、どのようにしてhtml/cssを記述するのが一般的でしょうか?

イメージ説明

html

1<div class="content"> 2 <main class="main-wrapper"> 3 <div class="item">1</div> 4 <div class="item">3</div> 5 </main> 6 <aside class="side-wrapper"> 7 <div class="item">2</div> 8 </aside> 9</div>

scss

1.content{ 2 display:flex; 3 flex-direction:row; 4 .main-wrapper{ 5 flex:1; 6 } 7 .side-wrapper{ 8 width:300px 9 } 10} 11 12@media (max-width:768px) { 13 .content{ 14 flex-direction:column; 15 .main-wrapper{ 16 width:100%; 17 } 18 .side-wrapper{ 19 width:100%; 20 } 21 } 22} 23

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

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

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

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

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

guest

回答3

0

ベストアンサー

いろいろな方法がありますので、とりあえず「レスポンシブデザイン」でWEB検索してみてください。

実際に使う技術としては、メディアクエリが一般的だと思います。
スマホ用のCSSとPC用のCSSをメディアクエリで切り替えることになります。

PC用の2カラムのレイアウトは、Gridを使うのが最新の技術になります。
他にも方法はいろいろあります。

上記のヒントを参考にWEB検索してできるところまで作成してください。
そして行き詰ったら、その時点でのHTML、CSSを提示して、どこがどのようにうまくいかないかを質問してください。

追記

コードとレイアウトの画像が提示されたので、ご希望のレイアウトをgridで実現する場合のコード例

html

1<div class="content"> 2 <div class="item1">1</div> 3 <div class="item2">2</div> 4 <div class="item3">3</div> 5</div>

scss

1.content{ 2 display:grid; 3 grid-template-rows: auto auto auto; 4 grid-template-columns: 1fr 300px; 5 grid-gap: 10px; 6 .item1{ 7 grid-row: 1; 8 grid-column: 1; 9 height:300px; 10 background-color: #ff8e8e; 11 } 12 .item2{ 13 grid-row: 1 / 3; 14 grid-column: 2; 15 width: 300px; 16 background-color: #996cff; 17 } 18 .item3{ 19 grid-row: 2; 20 grid-column: 1; 21 height:300px; 22 background-color: #8fe470; 23 } 24} 25 26@media (max-width:768px) { 27 .content{ 28 .item1{ 29 grid-row: 1; 30 grid-column: 1 / 3; 31 } 32 .item2{ 33 grid-row: 2; 34 grid-column: 1 / 3; 35 width: 100%; 36 height: 300px; 37 } 38 .item3{ 39 grid-row: 3; 40 grid-column: 1 / 3; 41 } 42 } 43}

動作確認用サンプル

下記のような書き方もできます。
grid-template-areas を使います。こちらの方が視覚的にレイアウトが把握しやすいと思います。

scss

1.content{ 2 display:grid; 3 grid-template-rows: auto auto auto; 4 grid-template-columns: 1fr 300px; 5 grid-template-areas: 6 "area1 area2" 7 "area3 area2"; 8 grid-gap: 10px; 9 .item1{ 10 grid-area: area1; 11 height:300px; 12 background-color: #ff8e8e; 13 } 14 .item2{ 15 grid-area: area2; 16 width: 300px; 17 background-color: #996cff; 18 } 19 .item3{ 20 grid-area: area3; 21 height:300px; 22 background-color: #8fe470; 23 } 24} 25 26@media (max-width:768px) { 27 .content{ 28 grid-template-areas: 29 "area1 area1" 30 "area2 area2" 31 "area3 area3"; 32 33 .item2{ 34 width: 100%; 35 height: 300px; 36 } 37 } 38}

動作確認用サンプル

投稿2019/12/11 10:53

編集2019/12/11 14:19
hatena19

総合スコア34073

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

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

yyy_yyy

2019/12/11 10:58

2カラムなのでflexで横並びにしてメディアクエリでflex-directionを切り替える方法で書いてたのですが、それだと回り込ませるのが難しく、詰まってしまったため質問に至りました。 gridでできるか調べてみます。ありがとうございます!
hatena19

2019/12/11 11:02

flexでも可能ですよ。書き方が悪いのでしょう。 対象とするブラウザのバージョンがgridに対応しているならgridの方がHTMLはシンプルになります。 対応していない古いブラウザも対象にしたいなら flex がいいでしょう。 とりあえずhtmlとcssを提示してもらわないと間違いは指摘できないです。
yyy_yyy

2019/12/11 11:18

コードを追記しました
hatena19

2019/12/11 11:31

呈示のコードで問題なく2カラム→1カラムに切り替わりますが、 どのブラウザのどのバージョンで確認しましたか。
yyy_yyy

2019/12/11 11:38 編集

2カラム→1カラムは問題なくできるのですが、サイドバー(.side-wrapper)を図のようにメインの(1番と3番の)間に回りこませたい場合はどのようにすればいいのか分からず、困っています。
hatena19

2019/12/11 12:03

あっ、そういう意味ですか。そうなるとgridでするのが簡単そうです。
yyy_yyy

2019/12/13 00:46

できました!ありがとうございます!
guest

0

Grid のほうがいいかと思いますが一応挙げておきます。

CSS

1@media (max-width: 768px) { 2 .content .main-wrapper { 3 display: contents; 4 } 5 6 .content .main-wrapper .item:last-child { 7 order: 1; 8 } 9}

https://developer.mozilla.org/ja/docs/Web/CSS/order

投稿2019/12/12 05:55

編集2019/12/12 05:56
x_x

総合スコア13749

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

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

hatena19

2019/12/12 06:22 編集

display: contents; なるほど。 こんな便利なものがあるのですね。勉強になりました。 現状、IE, Edge が非対応なのは残念ですね。
guest

0

コードの提示は控えますが、flexboxでやるのが一般的かは知りませんが簡単に実装できると思います。

投稿2019/12/11 15:05

退会済みユーザー

退会済みユーザー

総合スコア0

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

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

hatena19

2019/12/11 19:26

flexbox で side-wrapper(2) をメインの 1 と 3 の間に潜り込ませるは私にとっては難しいです。 ぜひ、コードを提示してください。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.36%

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

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

質問する

関連した質問