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

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

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

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

HTML5

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

HTML

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

CSS

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

Q&A

解決済

1回答

2294閲覧

dt,ddがはみ出ます。flexdirection:column,flexwrap:wrapについて。

pckuma

総合スコア6

CSS3

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

HTML5

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

HTML

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

CSS

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

0グッド

1クリップ

投稿2021/11/16 15:07

現在コーポレートサイトの模写を行っています。
会社情報をdl,dt,ddタグを使って書いており、pc表示ではdt,ddタグをflexboxで横並び&flex-wrap:wrapでそれぞれの項目ごとに改行されるよう調整、スマホ表示の際はflex-direction:columnを指定し縦並びになるようにしています。

HTML

1<section id="company" class="wrapper"> 2 <div class="about-company"> 3 <h2 class="flex-title"> 4 <span class="title-en">COMPANY</span> 5 <span class="title-ja">会社情報</span> 6 </h2> 7 8 <dl> 9 <dt>会社名</dt> 10 <dd>ウェブエンターテインメントデザイン株式会社</dd> 11 <dt>所在地</dt> 12 <dd>東京都渋谷区桜丘町99-9 West Building 3F</dd> 13 <dt>代表</dt> 14 <dd>xxxxxx</dd> 15 <dt>設立</dt> 16 <dd>2021年1月1日</dd> 17 <dt>資本金</dt> 18 <dd>3,000,000円</dd> 19 <dt>事業内容</dt> 20 <dd>Web制作・マーケティング</dd> 21 <dd class="add">インターネットメディア事業</dd> 22 <dd class="add">プロモーション企画・制作</dd> 23 <dd class="add">ソーシャル企画・運営</dd> 24 </dl> 25 </div> 26 27 <div class="company-img"> 28 <img src="img/company.jpg" alt=""> 29 </div> 30 </section>

css

1.wrapper { 2 width: 100%; 3 max-width: 1032px; 4 padding: 0 16px; 5 margin: 0 auto; 6} 7 8#company { 9 position: relative; 10 display: flex; 11 align-items: center; 12 height: 750px; 13} 14 15#company .about-company { 16 background-color: #fff; 17 position: absolute; 18 width: 55%; 19 top: 0; 20 left: 0; 21 padding: 100px 8% 100px 6%; 22} 23 24#company .company-img { 25 position: absolute; 26 /* height: 400px; */ 27 width: 53%; 28 top: 115px; 29 right: 0; 30} 31 32#company .company-img img { 33 height: 400px; 34 width: 100%; 35 object-fit: cover; 36} 37 38#company .about-company dl { 39 display: flex; 40 /* justify-content: space-between; */ 41 flex-wrap: wrap; 42 align-items: center; 43} 44 45#company .about-company dt { 46 width: 20%; 47 margin-top: 10px; 48} 49 50#company .about-company dt:first-of-type { 51 margin-top: 0; 52} 53 54#company .about-company dd { 55 width: 80%; 56 margin-top: 10px; 57} 58 59#company .about-company dd:first-of-type { 60 margin-top: 0; 61} 62 63#company .about-company .add { 64 margin-left: 20%; 65} 66 67@media (max-width: 900px) { 68 69#company .about-company { 70 /* background-color: #fff; */ 71 position: static; 72 width: 100%; 73 padding: 40px 20px; 74 margin-bottom: 20px; 75 } 76 77 #company .company-img { 78 position: static; 79 /* height: 400px; */ 80 width: 100%; 81 padding: 0; 82 /* top: 0px; */ 83 /* right: 0px; */ 84 } 85 86 #company { 87 position: static; 88 flex-direction: column; 89 /* align-items: center; */ 90 height: auto; 91 } 92 93 #company .about-company dl { 94 flex-direction: column; 95 /* align-items: flex-start; */ 96 } 97 98 #company .about-company dt { 99 width: 100%; 100 margin-top: 20px; 101 } 102 103 #company .about-company dd { 104 width: 100%; 105 margin-top: 5px; 106 padding-left: 14px; 107 } 108 109 #company .about-company dd:first-of-type { 110 margin-top: 5px; 111 } 112 113 #company .about-company .add { 114 margin-left: 0; 115 } 116 117

スマホ表示部分のコーディングを行っている時、
columnにした後dt,ddのwidthを100%に指定すると、dlの幅からdt,ddが右側にはみ出てしまいました。
確認したところ、pc表示の方で入れていた、最後のdd(class名.add)につけている

css

1#company .about-company .add { 2 margin-left: 20%; 3}

が原因のようで、スマホ表示の方で

css

1#company .about-company .add { 2 margin-left: 0; 3 }

を入れると改善されました。

なぜ最後の3つのddにmargin-leftがついているだけなのに、一番上からの全てのdt,ddに影響を与えたのでしょうか?
最後の3つの部分だけはみ出すのはなんとなく分かるのですが、すべてがはみ出す状態が理解できません・・

ちなみにpc表示の方でflex-wrap:wrap;と指定している状態はスマホ表示でもそのまま生かしており、これを消してみると最後の3つだけがはみ出している状態になりました。

flex-direction:columnにしている状態も関係しているのかな?とは思うのですが、なかなか理解が追い付きません。

理由をご説明いただけると助かります。よろしくお願いいたします。

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

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

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

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

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

guest

回答1

0

ベストアンサー

僕も気になったので調べてみました。多分次のような感じだと思います。

なぜ最後の3つのddにmargin-leftがついているだけなのに、一番上からの全てのdt,ddに影響を与えたのでしょうか?
最後の3つの部分だけはみ出すのはなんとなく分かるのですが、すべてがはみ出す状態が理解できません・・

CODEPENで調べたところ、どうやら<dl>タグのスタイルでalign-items: centerを指定していることがこの問題の要因のようです。ここを例えばコメントアウトされているalign-items: flex-startに変更すると最後の3つの、addクラスがついている<dd>のmarginを変えても他の要素が動くことはないです。

じゃあなぜこんなことになったのか?

こちらによると、align-items: centerの説明はこう書かれています。

フレックスアイテムのマージンボックスは、交差軸上の中央に配置されます。アイテムの cross-size がフレックスコンテナより大きい場合は、両方向へ均等にはみ出します。

なるほど、よくわからない;;交差軸とはなんでしょう?これも調べてみました。こちらに書いていました。図を見ればわかりやすいですが、今回flex-directioncolumnにしているのでリンクのサイトの下の方の画像と同じなので今回は水平方向の線が交差軸と言えますね。

そして、「cross-size がフレックスコンテナより大きい場合は、両方向へ均等にはみ出します」のところ、多分cross-sizeは交差軸長さを表しているのだと思います。多分図のようなイメージだと思います。

イメージ説明

ここまで踏まえた上で、今回の問題に戻りましょう。今回、最後の3つの<dd>addクラスをつけました。これにより、cross-sizeは少し広くなってしまいます(ついでにいうとflexコンテナからもはみ出します)。cross-sizeが広くなると、軸の中心が少しずれるのでalign-item: centerによって他の要素もそれに合わせて動いてしまっているというのが真相だと思います。

図で書くと↓のような現象が起こっているのだと思います。

イメージ説明

投稿2021/11/16 16:59

ukyoda

総合スコア386

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

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

pckuma

2021/11/17 21:19

ご回答ありがとうございます! 図まで記載していただいて、とても分かりやすいでした! >cross-sizeが広くなると、軸の中心が少しずれるのでalign-item: centerによって他の要素もそれに合わせて動いてしまっているというのが真相だと思います。 軸の中心がずれるという認識がありませんでした。 ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.46%

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

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

質問する

関連した質問