模写修行メディア

Flexboxで画像や要素が小さくなる(潰れる)時の対処方法!

  • Flexboxを使って横並びにしたら画像や要素が小さくなった(潰れた)

そんな時の解決方法をサンプルを用いて紹介します。

この記事はお悩み解決系の記事なので、Flexboxに関する理解を深めたい方は下の記事をご覧ください。

CSS Flexbox の使い方をどこよりも詳しく解説!図解やサンプルもあり!

👇 メンターやってます 👇

模写修行やこのメディアを作ったエンジニア中心に、メンタリングサービスHello Mentorを運営しています。

0からweb制作やプログラミングの勉強を始める方はもちろん、12ヶ月以上独学している方や既にお仕事をしている方にもご利用いただいています!

模写武者くんのアイコン
  • 独学に限界を感じている...
  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業のアドバイスが欲しい...

このような方は、ぜひ下記のリンクからサービス詳細をご覧ください。無料相談もお気軽にお申し込みください。

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

👆 メンターやってます 👆

この記事の目次

起こる問題と解決策

  • 画像が小さくなる
  • 要素が潰れる

この2点について、例を出して解説します。

結論、どちらもflex-shrink: 0;を指定することで解決します。

画像が小さくなる

画像が小さくなってしまっている図

例えば、画像の幅を100pxに指定しているのに、100pxより小さく表示されてしまうケースです。

<div class="user-voice">
    <div class="user-voice-icon">
        <img src="img/user-voice-icon.png" width="500" height="500" alt="..." />
    </div>
    <p class="user-voice-text">テキスト...</p>
</div>
/* 画像のスタイルリセット */
img {
    width: 100%;
    height: auto;
    vertical-align: bottom;
}

/* -------- */

.user-voice {
    display: flex;
}

.user-voice-icon {
    width: 100px;
}

.user-voice-text {
    margin-left: 24px;
}

このようにuser-voice-icon100pxを指定しても、user-voice-textの文章が長いと、画像が小さく表示されてしまいます。

これはflexアイテムのflex-shrinkの初期値が1なのが原因です。Flexboxでは、flexコンテナの幅にflexアイテムが収まりきらない場合、flexアイテムを縮小させる仕様なので、画像が小さくなってしまっています。

※ 正しくは、縮小しているのは画像の幅だけではなく、テキストの幅もです。

  • flexコンテナの幅にflexアイテムが収まりきらない場合、flexアイテムを縮小させる

↑この点がポイントです。

収まりきる場合は縮小されないので、今回のケースだと文章が改行されないくらい短ければ画像が小さくなることはありません。従って、『PCでは小さくならないのに、SPでは小さくなってしまう...』なんてことが起こります。

解決方法

.user-voice-icon {
    width: 100px;
    flex-shrink: 0; /* 追加 */
}

user-voice-iconflex-shrink: 0;を指定するだけで解決します。flex-shrink: 0;を指定したflexアイテムは縮小しないので、画像が小さくなることはありません。テキストの幅だけが縮小します。

要素が潰れる

要素が潰れるてしまっている図

要素が潰れるケースです。画像が小さくなるケースと原因も解決方法も同じです。

flexコンテナの幅にflexアイテムが収まる場合、flexアイテムは縮小しないので、Qは潰れていません。

<div class="faq-item">
    <h3 class="faq-text faq-text--question">対応しているクレジットカードの種類を教えてください</h3>
    <p class="faq-text faq-text--answer">...</p>
</div>
.faq-text {
    display: flex;
    align-items: baseline;
}

.faq-text + .faq-text {
    margin-top: 8px;
}

.faq-text::before {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    font-weight: bold;
    border-radius: 50%;
    margin-right: 16px;
}

.faq-text--question::before {
    content: "Q";
    background-color: #c5ab5f;
    color: #fff;
}

.faq-text--answer::before {
    content: "A";
    border: 2px solid #c5ab5f;
    color: #c5ab5f;
}

解決方法

.faq-text::before {
    display: flex;
    align-items: center;
    justify-content: center;
    width: 40px;
    height: 40px;
    font-weight: bold;
    border-radius: 50%;
    margin-right: 16px;
    flex-shrink: 0; /* 追加 */
}

flex-shrink: 0;を追加するだけでです。

【初学者・中級者の方】独学に限界を感じてませんか?

プログラミングやデザインは独学可能ですが、ほとんんどの方が苦戦します。

↓このように感じていませんか?

  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業するまでの道が見えない...

そんな問題を解決するために、模写修行やこのメディアを作ったエンジニア/デザイナー中心に、メンタリングサービスHello Mentorを始めました。

初級者から中級者まで対応できる、数少ないサービスです。

スクールのような大金は必要ありません。高額な費用は払いたくないけど、プロのサポートが欲しい方は、ぜひ下記のリンクからサービス詳細をご覧ください。

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

👆 メンターは全員現役エンジニア 👆

他にもFlexbox関連の記事を上げています!

レイアウトを作るにはFlexboxの理解が必須です。基礎を学びたい方は下記の記事をご覧ください。

CSS Flexbox の使い方をどこよりも詳しく解説!図解やサンプルもあり!

Flexboxでもレイアウトは作れますが、デザインによってはCSS Gridの方が適している場合もあります。CSS Gridの使い方は下記の記事をご覧ください。

【CSS Grid入門】図解も交えて使い方を詳しく解説!

この記事のように、知っておくと便利なFlexbox関連の記事も多数あげています。

Flexboxで均等幅(同じサイズ)で横並び配置する方法! Flexboxで最後の1つだけ右寄せや下寄せにする方法! Flexboxで画像が縦に伸びる(比率がおかしい)時の対処方法!

独学に限界を感じていませんか?

現役エンジニアによるメンタリングサービス作りました!

模写修行やこのメディアを作ったエンジニア中心に、メンタリングサービスHello Mentorを運営しています。

👇 こんな方のためのサービスです。

  • 独学に限界を感じている...
  • 何をどこまで勉強すれば良いかわからない...
  • 自分の書き方が正しいかわからない...
  • 検索しても解決しない問題が多い...
  • 転職や副業のアドバイスが欲しい...

メンターを務めるのは、今も現役でコードを書いているエンジニアのみです。駆け出しの方やメンターだけをやっている方はいません。

高額な料金はかかりません。サブスク / 契約期間の縛りなし / 入会金・解約料なしなので、リスクなく始められます。

少しでも興味がある方は、ぜひ下記のリンクからサービスサイトをご覧ください。無料相談もお気軽にお越しください。(無理な営業等一切ございません!)

※ 少人数運営のため人数制限あり ※

詳しいサービス内容を見る

入会金/解約料/契約期間の縛りなし

この記事を書いた人

Gakuのアイコン

Gaku / @gaku92014091

フリーランス8年を経て法人化(3期目)、業界歴は12年目。コンテンツ制作、ライティング、マーケティング、デザイン、コーディング、プログラミング(フロント)、幅広くやってます!webサービスを作るのが好き!

当メディア運営メンバーでメンターやってます!👉

詳しく見る

\Share/

模写修行のトップページのスクリーンショット
模写修行

実務レベルを体験するためのコーディング練習教材