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

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

新規登録して質問してみよう
ただいま回答率
85.48%
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回答

6752閲覧

cssでborderを外すとレイアウトがずれる。

Winnie207

総合スコア10

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クリップ

投稿2020/04/13 04:24

前提・実現したいこと

cssでborderを外すとレイアウトがずれてしまいます。
borderの太さ以上に大きくずれるため、自分では解決できず質問しました。
単純なボックスモデルの問題ではないような気がしています。
borderの有無が本質的な問題ではないかもしれません。

なぜレイアウトのずれが発生しているのか、
コードをどのように変更すれば解決するか教えていただければ幸いです。

発生している問題・エラーメッセージ

レイアウトがずれる。
エラーメッセージはなし。

① #q-wrappern (問題なし)
q-wrapper

② .q (borderあり)
q_withborder

③ .q-container (borderあり)
q-container_withborder

④ .q (borderなし)
q_withoutborder

⑤ .q-container (borderなし)
q-container_withoutborder

borderを外した状態で、②③のようなレイアウトになるのが理想です。

該当のソースコード

html

1<div id="q-wrapper"> 2 <div class="q" id="q1"> 3 <div class="q-container"> 4 <h2>Q1. 質問</h2> 5 <ul> 6 <li>a</li> 7 <li>b</li> 8 <li>c</li> 9 </ul> 10 <span class="fas fa-chevron-down scroll"></span> 11 </div> 12 </div> 13</div>

css

1#q-wrapper { 2 position: absolute; 3 top: 100vh; 4 width: 80vw; 5 height: 1000vh; 6 background-color: rgba(255, 255, 255, 0.7); 7 border-radius: 1rem; 8 margin: 5vh 10vw 10vh 10vw; 9} 10 11.q { 12 position: relative; 13 top: 0; 14 width: 80vw; 15 height: 100vh; 16 /* border: solid; <=== 問題のborder */ 17} 18 19#q1 { 20 height: 95vh; 21} 22 23.q-container { 24 position: relative; 25 width: 70vw; 26 height: 90vh; 27 /* border: solid red; <=== 問題のborder */ 28 margin: 5vh 5vw; 29} 30 31#q1 .q-container { 32 height: 95vh; 33} 34 35.q-container h2 { 36 font-size: 2rem; 37 text-align: left; 38} 39 40.q-container h2::after { 41 content: ''; 42 display: block; 43 width: 70vw; 44 height: 2px; 45 background: linear-gradient(to right, #bf7fff, #ff7fbf, #ffbf7f); 46 -webkit-background-clip: block; 47 -webkit-block-fill-color: transparent; 48 49} 50 51.q-container ul { 52 display: -webkit-flex; 53 display: -ms-flex; 54 display: flex; 55 position: absolute; 56 top: 0; 57 width: 70vw; 58 height: 90vh; 59 justify-content: space-evenly; 60 -ms-align-items: center; 61 align-items: center; 62 font-size: 1.2rem; 63} 64

試したこと

borderを使用して、レイアウトがずれていることを確認しました。
必ずしもborderが原因になっている訳ではないと考えています。

解決策を探したところ、borderの幅の分、レイアウトがずれる現象はありましたが、
このように大きくずれる現象は見つけられませんでした。

補足情報(FW/ツールのバージョンなど)

atomでコードを書いています。
ブラウザはChromeです。
PCはSurface Proを使用しています。

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

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

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

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

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

guest

回答1

0

ベストアンサー

下記の現象ですね。

マージンの相殺 - CSS: カスケーディングスタイルシート | MDN

上記の下記の項目に該当します。

親要素と先頭・末尾の子要素
ブロックが、その margin-top とその先頭の子要素の margin-top を分けられるような、ボーダー、パディング、インラインコンテンツ、フロートの解除 (clear) のいずれも持たない場合、もしくは、ブロックがその margin-bottom とその末尾の子要素の margin-bottom を分けられるような、ボーダー、パディング、インラインコンテンツ、高さ (height)、高さの最小値 (min-height) のいずれも持たない場合、マージンは相殺されます。相殺されたマージンは最終的に、親要素の外側に出ます。

解決法としては、相殺を考慮したmarginを設定するか、
「ボーダー、パディング、インラインコンテンツ、フロートの解除 (clear) のいずれも持たない場合」とあるので、例えば padding: 1px; を追加すれば相殺は発生しないですね。

投稿2020/04/13 04:36

編集2020/04/13 04:58
hatena19

総合スコア33715

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

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

Winnie207

2020/04/13 04:50

marginが0でも相殺が起きるとは知らなかったです。 大変参考になりました。ありがとうございます!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問