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

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

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

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

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

CSS

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

Q&A

解決済

1回答

1166閲覧

コンテナ内にコンテンツを均等に配置したい

yamahaggy

総合スコア9

Webサイト

一つのドメイン上に存在するWebページの集合体をWebサイトと呼びます。

HTML

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

CSS

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

0グッド

0クリップ

投稿2020/04/06 06:40

前提・実現したいこと

HTMLとSCCのコーディングで、練習用の見本サイト(XDデータ)を元にコーディングしています。
その中で「CAT2」と言うコンテンツの中に、(画像+文章)×3のアイテムをコンテナ(幅980px)内にdisplay:flexを利用して均等に配置したいです。

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

justify-content: space-between;を利用すると良いとあったので、使ってみましたが、コンテナ幅いっぱいに均等にならず、画像も3枚のうち2枚が重なってしまいます。

該当のソースコード

HTML

1 <div class="contents-wrapper"> 2 <div class="container"> 3 <h1>CAT2</h1> 4 <div class="flex-box"> 5 <div class="content"> 6 <img src="/Users/sayakashigemori/Desktop/html_cat/img/cat2-1.png" alt="cat2-1"> 7 <p>そうして其穴の中から時々ぷうぷうと烟を吹く。どうも咽せぽくて實に弱つた。</p> 8 </div> 9 <div class="content"> 10 <img src="/Users/sayakashigemori/Desktop/html_cat/img/cat2-2.png" alt="cat2-1"> 11 <p>是が人間の飲む烟草といふものである事 は漸く此頃知つた。</p> 12 </div> 13 <div class="content"> 14 <img src="/Users/sayakashigemori/Desktop/html_cat/img/cat2-3.png" alt="cat2-1"> 15 <p>此書生の掌の裏でしばらくはよい心持に坐つて居つたが、暫くすると非常な速力で運轉し始めた。</p> 16 </div> 17 </div> 18 </div> 19 </div> 20 <div class="eyecatch-wrapper"> 21 <div class="container"> 22 <img src="/Users/sayakashigemori/Desktop/html_cat/img/bg.jpg" alt="bg"> 23 <p>そうして其穴の中から時々ぷうぷうと烟を吹く。<br>どうも咽せぽくて實に弱つた。<br>是が人間の飲む烟草といふものである事は漸く此頃知つた。</p> 24 <p>此書生の掌の裏でしばらくはよい心持に坐つて居つたが、<br>暫くすると非常な速力で運轉し始めた。<br>書生が動くのか自分丈が動くのか分らないが無暗に眼が廻る。胸が惡くなる。 </p> 25 </div> 26 </div> 27

CSS

1.flex-box { 2 display: flex; 3 justify-content: space-between; 4} 5 6.content img { 7 width: 300px; 8} 9 10.content { 11 margin: 0; 12} 13

試したこと

marginを0にする。
前後に:afterなど擬似要素がないかチェックする。

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

いろいろググってみたのですが、どうしても行き詰まってしまいました。flexではなくfloatなどの他の方法が良いのでしょうか?
コーディングの勉強を始めたばかりの初心者なのでコードも無茶苦茶ですが、ご指導いただけると助かります。どうぞ宜しくお願いいたします。

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

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

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

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

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

mari.rinn

2020/04/06 07:52

質問文内に記載されているcssが少ないので細かい情報がわからないのですが、contentというクラスのcssにwidthを入れてみるとどうなりますか?
yamahaggy

2020/04/06 08:01

ご回答ありがとうございます! contentに画像幅(300px)を入れたところうまく行きました。ありがとうございます! これは、flexコンテナ内のコンテンツ幅がはっきりとしなかった為、均等に配置ができなかったという考え方で合っていますでしょうか?
mari.rinn

2020/04/06 09:33

うまくいって良かったです。その解釈で良いかと思います。
yamahaggy

2020/04/06 09:42

大変助かりました。ありがとうございました!
guest

回答1

0

ベストアンサー

均等に配置する場合は、以下のような記述を追加すればOKと思います。

CSS

1.content { 2 margin: 0; 3 flex: 1 1 0%; /* こちらを追加 */ 4}

余白をつけるとしたら、例えば以下のパターンがあると思います。

パターン1: 余白を50pxで固定

CSS

1.flex-box { 2 display: flex; 3 /* justify-content: space-between; */ 4} 5.content { 6 margin: 0; 7 flex: 1 1 0%; /* こちらを追加 */ 8} 9.content:not(:last-child) { 10 margin-right: 50px; /* 一番右側のdiv以外、右側に余白を指定 */ 11}

パターン2: 要素の幅を300pxで固定

CSS

1.flex-box { 2 display: flex; 3 justify-content: space-between; 4} 5.content { 6 margin: 0; 7 flex: 0 1 300px; /* こちらを追加 */ 8}

投稿2020/04/06 08:35

new1ro

総合スコア4528

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

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

yamahaggy

2020/04/07 15:50

ご回答ありがとうございます! どの方法もしっかり効きました。一つの方法のみならず、複数の解決法をお教えいただきありがとうございました。 お恥ずかしながら、flex:-grow -shrink -basisを初めて知りました。 質問を重ねるようで申し訳ないのですが、修正依頼でいただいた「contentにimgと同じwidthを指定」という方法では、flexアイテムの幅がはっきりとしなかった為、均等に配置ができなかったのだなと理解できたのですが、flex: 1 1 0%;はなぜこの一行で解決ができるのでしょうか? justify-content: space-between; には幅情報が要るが、flex: 1 1 0%;はcontentの幅に関係なく均等に配置ができる、ということでしょうか。 自分でもググってみましたが、flex:-grow -shrink -basisは難しく(特に-growの0と1の違いは混乱します…。)よろしければご回答いただければ幸いです。
new1ro

2020/04/07 22:22 編集

> flex: 1 1 0%;はなぜこの一行で解決ができるのでしょうか? flexについて、こちらも正確に理解できているか怪しいところがあるのですが、 flexについての計算は以下の順番の認識です。 1. まずflex-basis、margin、padding、(width?) などで、仮に各子要素の横幅が算出される 2. 余った横幅、足りない横幅を計算し分配/負担  →横幅が余ったとき、「flex-grow」の値を見て、子要素同士が余った横幅を分配する  →横幅が足りないとき、「flex-shrink」の値を見て、子要素同士が足りない横幅を負担し合う 上記を踏まえ、すべての子要素に「flex: 1 1 0%;」が指定されている場合を考えると、 以下のような計算になります。 1. まずflex-basis: 0%;なので、すべての子要素の横幅が仮に「0」となる。 2. 使える横幅が余っているので、子要素同士で均等に横幅を分配する ちなみに、「flex: 1;」というショートコードがあり、こちらを紹介する記事などを見かけるのですが、 他のブラウザと違う解釈をするブラウザがあるらしく、バグの原因になるため、私はflexの仕様を理解する意味も兼ねて「flex: 1 1 0%;」などと書くようにしています。 以下、ブラウザのバグについてまとまった記事です。参考まで.. https://qiita.com/hashrock/items/189db03021b0f565ae27#7-flex-basis%E3%81%8Cborder-box%E3%81%AB%E5%AF%BE%E5%BF%9C%E3%81%97%E3%81%A6%E3%81%AA%E3%81%84
yamahaggy

2020/04/10 03:58

ご丁寧なお返事ありがとうございます。 私がググった内容と、new1roさんのご説明合わせて腑に落ちるところまでは、理解できたと思います。 ショートコードについては私が読んだ記事にもありました。バグ回避の為flex: 1 1 0%;と書くようにしたいと思います。(そして確かに書いた方が仕様の理解にも良いですね) 大変勉強になりました。ありがとうございました!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.35%

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

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

質問する

関連した質問