ZeroPlus Gateについて

\ シェア /

FacBook
Twitter
LINE
はてブ
PPocket
ZeroPlus Media > Web制作 > HTML/CSS > 【CSS】flex-shrinkでflexアイテムを縮小させる方法を解説

【CSS】flex-shrinkでflexアイテムを縮小させる方法を解説

HTML/CSS

2022/05/11

2024/01/30

flexbox flex-shrinkプロパティ解説記事サムネイル

flex-shrink は任意のflexアイテムを縮小させるプロパティです。flex-shrink を使用すれば、height や width を使用するよりも自在にflexアイテムを縮小できるため、効率よくコーディングを行えます。

この記事では flex-shrink の使い方を解説します。

この記事で身につく内容
  • flex-shrink とは
  • flex-shrink の使い方
  • flex-shrink に関連するプロパティ

flex-shrink はflexboxプロパティの一種です。flexboxは一つのプロパティだけでなく全体的に学ぶことが大切です。しかし、学習に学習に詰まりやすい部分でもあります。

こちらの記事でflexboxの基礎知識の解説をしているので、学習にお役立てください。

ZeroPlus Gateについて

プログラミング学習でこのような経験はありませんか?

  1. 目標に向けて何を学べば良いかわからない
  2. 調べても解決策が見つからない
  3. 現場レベルのスキルが身につくのか不安

これらの悩みは、学習環境を整えることで全て解決することができます。

ZeroPlus Gateでは、30日間無料で最適な学習環境を提供しています。

  1. なんでも相談できる専属メンター
  2. いつでも技術相談ができるプロ講師
  3. 元IT企業CTO監修のカリキュラム

条件なしでこのレベルの環境を無料で提供しているのはZeroPlus Gateだけです。
ただし、無料サービスの提供には参加者の数に制限があります。

少しでも興味がある方は、以下のリンクからサービスの詳細をご覧ください。

今すぐZeroPlus Gateの詳細を見る

 

flex-shrinkとは

flex-shrink は、flexアイテムの縮小率を設定できるプロパティです。

flexアイテムには親要素の幅を超えるときに均等な幅となる性質があります。そこで flex-shrink を使用すれば、親要素の幅からはみ出た部分を縮小することができます。

flex-shrink を使用する場面は、以下の2通りあります。

  • 要素を縮めたいとき
  • 要素を縮めたくないとき

flex-shrink では要素を縮めるだけではなく、「縮めない」指定も可能です。詳しくは次項の「 flex-shrink の使い方」で解説します。

ZeroPlusgate50教材の動画

 

flex-shrinkの使い方

flex-shrink はflexアイテムに対して有効なプロパティであるため、親要素に display: flex; を、子要素に flex-shrink をそれぞれ指定します。

flex-shrink の基本形は以下のとおりです。

.flexbox {
display: flex;
}

.flex-item{
color: #fff;
flex-shrink: 数値;
}

初期値は 1 で、マイナスの値は指定できません。

flex-shrink は、主に以下のような場面で使用します。

  • flexアイテムがflexコンテナをはみ出す場合
  • 要素を縮めたくない場合

 

flexアイテムがflexコンテナをはみ出す場合

まずは、flexアイテムがflexコンテナ(親要素)の幅をはみ出す場合の使い方を見てみましょう。

以下のような状態だとします。

<div class="flexbox">
  <div class="flex-item item01">①</div>
  <div class="flex-item item02">②</div>
  <div class="flex-item item03">③</div>
</div>
.flexbox {
  display: flex;
  text-align: center;
  border: 1px solid #000;
  width: 70%;
}

.flex-item{
  color: #fff;
  width: 40%;
}

.item01 {
  background: red;
}

.item02 {
  background-color: blue;
}

.item03 {
  background-color: green;
}

flex-shrinkの初期値

このとき、flexアイテムは見かけ上均等な大きさになっていますが、これはflexアイテムの性質によるものです。flexアイテムは flex-shrink の初期値が1であるため、親要素の幅内を超える場合は自動的に縮小し、幅内に収まります。

上記の例の場合、flexコンテナの幅が親要素に対して70%、flexアイテムはそれぞれ40%と指定しているので、20%分オーバーしています。
※widthの指定は親要素に対して40%のサイズとなります。40% × 3要素 = 120%となり20%がオーバーしていることになります。

これを、以下のように指定します。

.item01 {
  background: red;
  flex-shrink: 1;
}

.item02 {
  background-color: blue;
  flex-shrink: 2;
}

.item03 {
  background-color: green;
  flex-shrink: 3;
}

flex-shrinkを指定した場合の出力結果

要素自体の大きさは単純に 1 : 2 : 3 となっているわけではありません。flex-shrink で指定するのは「どれくらい縮むか」の数値であり、要素自体の大きさではないからです。

 

要素を縮めたくない場合 

要素を縮めたくない場合は、縮めたくない要素に flex-shrink: 0; を指定することで解決できます。

CSSのレイアウトでは、以下のような実装を行うことがよくあります。

  • 要素とテキストを横並びにしている
  • 画像とテキストを横並びにしている

このようなとき、テキストが長いと要素や画像が縮んでしまいます。

実際の例を見てみましょう。

 

要素が縮む場合

flexアイテムが縮む場合の参考画像

左側の要素には flex-shrink を指定していないため、要素に指定した width が反映されずに縮んで表示されています。flex-shrinik: 0; を指定することで、指定した width が反映されるようになります。

<div class="flexbox">
  <p class="text">テキスト</p>
  <p class="copy">テキストが長くなると、左の要素が縮んでしまったり</p>
</div>

<div class="shikaku"></div>
.flexbox {
display: flex;
width: 30%;
border: 1px solid #000;
align-items: center;
}

.text {
width: 100px;
height: 100px;
background: orange;
flex-shrink: 0; /*縮めたくない要素に指定*/
}


.copy {
margin-left: 10px;
}

 

画像が潰れる場合

flexアイテムの画像が潰れるときの対処法

画像の場合でも、解決方法は同様です。画像が縮んでしまう場合は、その画像に flex-shrink: 0; を指定しましょう。

<div class="flexbox">
  <div class="img-container">
    <img src="img/草原の写真.jpg" alt="" class="flex-img">
  </div>
  <p class="copy">画像にwidthを指定しても思い通りの横幅にならず、画像が縮んでしまったりします。</p>
</div>

<div class="shikaku"></div>
.flexbox{
display: flex;
width: 20%;
border: 1px solid #000;
align-items: center;
}

img{
width: 100%;
height: auto;
}

.img-container{
width: 100px;
flex-shrink: 0;
}

.shikaku{
border: 1px solid #000;
width: 100px;
height: 100px;
}

 

flex-shrinkに関連するプロパティ

flex-shrink には、以下のような関連するプロパティが存在します。

こflex-shrinkに関連するプロパティ
  • flex-grow
  • flex-basis
  • flex

 

flex-grow

flex-grow は、flexアイテムの伸長率を指定するプロパティです。flex-shrink とは違い、flexコンテナに余白がある場合に有効です。

flexアイテムの大きさを効率的に指定できるようになるので、併せて学習してみましょう。

 

flex-basis

flex-basis は、flexアイテムの大きさそのものを指定するプロパティです。flex-basis の値は flex-shrink や flex-grow の基準の値となります。

 

flex

flex は、flex-grow、flex-shrink、flex-basis を同時に指定できるプロパティです。指定する数値の数や単位の有無によって、プロパティの意味が変わります。使いこなせばCSSコーディングの効率が格段に上がるので、ぜひ学習してみてください。

ZeroPlusgate50教材の動画

 

まとめ

flex-srhink はflexアイテムを縮小させるプロパティです。flexアイテム全体の幅が親要素の幅を超えるときに、はみ出た部分を縮小させる比率を指定します。

flex-shrink は任意のflexアイテムだけ縮小したいときやレスポンシブ対応時に有用ですので、使いこなせるようになりましょう。

 

flex-shrinkまとめ

  • flexアイテムを縮小させるプロパティ
  • display: flex; と併用する
  • 親要素からはみ出た部分を縮小させる比率を指定する
ZeroPlus Gateについて

プログラミング学習でこのような経験はありませんか?

  1. 目標に向けて何を学べば良いかわからない
  2. 調べても解決策が見つからない
  3. 現場レベルのスキルが身につくのか不安

これらの悩みは、学習環境を整えることで全て解決することができます。

ZeroPlus Gateでは、30日間無料で最適な学習環境を提供しています。

  1. なんでも相談できる専属メンター
  2. いつでも技術相談ができるプロ講師
  3. 元IT企業CTO監修のカリキュラム

条件なしでこのレベルの環境を無料で提供しているのはZeroPlus Gateだけです。
ただし、無料サービスの提供には参加者の数に制限があります。

少しでも興味がある方は、以下のリンクからサービスの詳細をご覧ください。

今すぐZeroPlus Gateの詳細を見る

\ 学んだことをSNSでシェアしよう /

おすすめのタグ

この記事の執筆者

ZeroPlus Media変種部

ZeroPlus Media編集部

ZeroPlusは、「フリーランス特化型プログラミングスクール」です。ZeroPlus Mediaでは、フリーランスとして活躍する際に役立つ有益なプログラミングやWeb制作に関する情報を発信しています。

質問について

ZeroPlus Media読者限定で質問対応をおこなっています。以下の2つの方法で質問を受け付けています。

選べる2つの質問方法

1

Google Foam(テキスト)で質問

mail

フォーム送信

メールで解答

formで質問
2

Google meet(オンラインmtg)で質問

meet

日時選択

メールを受け取る

メールからmtgに参加

meetで質問
ZeroPlus Gateについて

あなたの目的に合わせた2つのサービス

あなたの目的に合わせたZeroPlusの2つのサービス
基礎からフリーランスレベルまで本質的な学びを提供しています

完全無料!30日間で学びきれる
プログラミンスクールZeroPlus Gate

  • お金をかけずに、学習を進めたい
  • Webサイトを作れるようになりたい
  • メンターや講師に質問しながら学習したい

詳しくはこちらから

フリーランス特化型
プログラミングスクール ZeroPlus

  • プログラミング学習で悩んでいる
  • 仲間と一緒に学習したい
  • フリーランスとしての総合的な力を養いたい

詳しくはこちらから