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

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

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

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

CSS

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

Q&A

解決済

3回答

1926閲覧

2カラム、3カラムのレイアウト崩れの原因がわかりません

daisuke01

総合スコア2

HTML

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

CSS

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

0グッド

0クリップ

投稿2021/04/20 21:41

忍者コード中級 02の問題です

下記のコードで2カラム、3カラムを達成できます。
CSS最終行の
.column .column__cat:last-child {
margin-right: 0;
}
をコメントアウトするとレイアウトが崩れてしまいます。
boxの幅を
width: calc((100% / 3) - 8px);
このようにcalcで指定しているので、レイアウトが崩れないと思ったのですが
なぜ一番右のボックスの右側marginを無くすととレイアウトが崩れてしまうのでしょうか。
理屈がわかりません。よろしくお願いします。

HTML

1<section class="wrapper"> 2 <section class="column column--two"> 3 <div class="column__cat"></div> 4 <div class="column__cat"></div> 5 </section> 6 <section class="column column--three"> 7 <div class="column__cat"></div> 8 <div class="column__cat"></div> 9 <div class="column__cat"></div> 10 </section> 11</section>

CSS

1.wrapper { 2 width: 300px; 3 margin: auto; 4} 5.column{ 6 display: flex; 7 flex-wrap: wrap; 8 justify-content: center; 9 margin-top: 24px; 10} 11.column--two .column__cat { 12 width: calc(50% - 8px); 13} 14.column--three .column__cat { 15 width: calc((100% / 3) - 8px); 16} 17.column__cat { 18 width: 100px; 19 height: 100px; 20 border: 1px solid; 21 background: red; 22 box-shadow: 10px 10px 15px -10px; 23} 24.column .column__cat { 25 margin-right: 8px; 26} 27.column .column__cat:last-child { 28 margin-right: 0; 29}

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

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

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

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

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

guest

回答3

0

こんにちは。

なぜ一番右のボックスの右側marginを無くすととレイアウトが崩れてしまうのでしょうか。

理屈がわかりません。

2カラムの方について、
最後のmargin-right:0ありの場合、
1+142+1+8+1+142+1=296px (1はボーダーです)
となりますが、
最後のmargin-right:0なしの場合、
1+142+1+8+1+142+1+8=304px
となりますので、溢れます。

3カラムについても同様です。


参考:
box-sizing - CSS: カスケーディングスタイルシート | MDN

投稿2021/04/21 01:12

編集2021/04/21 01:13
Lhankor_Mhy

総合スコア36960

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

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

daisuke01

2021/04/21 04:21

pxの計算までありがとうございます。borderの考慮が甘かったことに反省しています。明快なご指摘ありがとうございました。今後ともよろしくお願いします。
guest

0

ベストアンサー

boxの幅を

width: calc((100% / 3) - 8px);
このようにcalcで指定しているので、レイアウトが崩れないと思ったのですが

border の幅を考慮する必要があります。border: 1px solid;としてますので左右で2pxになりますので、
width: calc((100% / 3) - 10px);
で3列になります。

あるいは、幅の計算法を border を含めるようにする指定してもいいでしょうか。
box-sizing: border-box;


flexを使うなら、要素間の余白はmarginは使わずに、
justify-content: space-between; で両端揃えにするか、
gapで指定したほうが簡単でしょう。(gapはie非対応)

投稿2021/04/21 01:17

編集2021/04/21 01:21
hatena19

総合スコア34075

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

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

daisuke01

2021/04/21 04:19

ありがとうございます。とてもわかりやすかったです。また、別の解決方法の提示も感謝しています。プログラミング頑張ります。
guest

0

box-sizingプロパティの初期値がcontent-boxになっているため
実際のwidthは両側のborder幅(2px)を加えた値になっていることが理由かと。

例えば

css

1.column__cat { 2 box-sizing: border-box; 3}

を追加すればレイアウトは崩れないと思いますが
last-childにもmarginが適用されているので少し左寄りになります。

参考にして下さい。

投稿2021/04/21 01:14

nishinoya_eng

総合スコア45

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

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

daisuke01

2021/04/21 04:20

ありがとうございます。borderはうっかりしていました。今後ともよろしくお願いします。。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問