9.1 The flex-grow Property
Flexbox has different tools to manage the distribution of space between elements inside a Flex container.
The flex-grow
, flex-shrink
, and flex-basis
properties play a key role in controlling
the size and behavior of Flex items in various conditions. Now we'll take a closer look at each of these properties and how to use them.
The flex-grow
property specifies how much a Flex item can grow to occupy available space in
the container. The flex-grow
value is a ratio that indicates how much the item can grow relative
to other Flex items.
Values:
- An integer or fractional value
- Default value: 0 (the item does not grow)
Usage Example:
.container {
display: flex;
border: 2px solid #000;
padding: 10px;
width: 500px;
}
.item {
background-color: #3498db;
color: white;
padding: 10px;
margin: 5px;
}
.grow-1 {
flex-grow: 1;
}
.grow-2 {
flex-grow: 2;
}
<div class="container">
<div class="item grow-1">Element 1</div>
<div class="item grow-2">Element 2</div>
<div class="item grow-1">Element 3</div>
</div>
Code Explanation:
.grow-1
: these items have the valueflex-grow: 1;
, allowing them to grow evenly-
.grow-2
: this item has the valueflex-grow: 2;
, allowing it to grow twice as much compared to items withflex-grow: 1;
9.2 The flex-shrink Property
The flex-shrink
property defines the ability of a Flex item to shrink if space in the container
is limited. The flex-shrink
value is a ratio that indicates how much the item can shrink
relative to other Flex items.
Values:
- An integer or fractional value
- Default value: 1 (the item can shrink)
Usage Example:
.container {
display: flex;
border: 2px solid #000;
padding: 10px;
width: 300px;
}
.item {
background-color: #3498db;
color: white;
padding: 10px;
margin: 5px;
width: 150px;
}
.shrink-0 {
flex-shrink: 0;
}
.shrink-1 {
flex-shrink: 1;
}
<div class="container">
<div class="item shrink-0">Element 1</div>
<div class="item shrink-1">Element 2</div>
<div class="item shrink-1">Element 3</div>
</div>
Code Explanation:
.shrink-0
: this item has the valueflex-shrink: 0;
, preventing it from shrinking.shrink-1
: these items have the valueflex-shrink: 1;
, allowing them to shrink as needed
9.3 The flex-basis Property
The flex-basis
property defines the initial size of a Flex item before distributing free space.
It can be specified in various units such as pixels, percentages, and others.
Values:
- Length in various units (
px
,%
,em
, etc.) - Default value:
auto
(size is determined by content)
Usage Example:
.container {
display: flex;
border: 2px solid #000;
padding: 10px;
}
.item {
background-color: #3498db;
color: white;
padding: 10px;
margin: 5px;
}
.basis-auto {
flex-basis: auto;
}
.basis-100px {
flex-basis: 100px;
}
.basis-50percent {
flex-basis: 50%;
}
<div class="container">
<div class="item basis-auto">Element 1</div>
<div class="item basis-100px">Element 2</div>
<div class="item basis-50percent">Element 3</div>
</div>
Code Explanation:
.basis-auto
: this item has the valueflex-basis: auto;
, meaning its size is determined by content.basis-100px
: this item has a fixed initial size of 100 pixels.basis-50percent
: this item has an initial size of 50% of the container's width
9.4 Using Flex Properties
The flex
property is a shorthand to set flex-grow
, flex-shrink
, and flex-basis
.
It allows you to manage all three aspects of space distribution in a single property.
Syntax:
.container {
flex: [flex-grow] [flex-shrink] [flex-basis];
}
Usage Example:
.container {
display: flex;
border: 2px solid #000;
padding: 10px;
}
.item {
background-color: #3498db;
color: white;
padding: 10px;
margin: 5px;
}
.flex-1 {
flex: 1 1 auto;
}
.flex-2 {
flex: 2 1 100px;
}
.flex-3 {
flex: 1 0 50%;
}
<div class="container">
<div class="item flex-1">Element 1</div>
<div class="item flex-2">Element 2</div>
<div class="item flex-3">Element 3</div>
</div>
Code Explanation:
-
.flex-1
: this item hasflex: 1 1 auto;
, meaning it can grow and shrink evenly with other items, and its initial size is determined by content -
.flex-2
: this item hasflex: 2 1 100px;
, meaning it can grow twice as much compared to items withflex-grow: 1;
, can shrink, and has an initial size of 100 pixels -
.flex-3
: this item hasflex: 1 0 50%;
, meaning it can grow but not shrink, and its initial size is 50% of the container's width
GO TO FULL VERSION