Flex Items
In CSS Flexbox, flex items are the children of a flex container. These items have specific properties that allow you to control their behavior within the container.
Here are the main properties that can be applied to flex items:
flex-grow
The flex-grow property in CSS Flexbox is a powerful tool for controlling how flex items grow along the main axis when there is extra space available in the flex container.
flex-grow Syntax
The flex-grow property takes a non-negative number as its value, which serves as a "flex grow factor." The default value is 0.
/* Syntax */
flex-grow: <number>; /* default is 0 */
How It Works
The flex-grow property works by distributing extra space along the main axis to flex items based on their flex-grow values. Here's how:
-
Calculate Extra Space: The flex container first calculates the extra space available along the main axis after placing all flex items with their initial sizes (
flex-basisor content size). -
Distribute Extra Space: The extra space is then distributed among the flex items in proportion to their
flex-growvalues. -
Grow Items: Each flex item grows by an amount proportional to its
flex-growvalue, consuming the extra space.
flex-grow Examples
Equal Growth
If all flex items have the same flex-grow value, they will grow equally to fill the extra space.
.flex-item {
flex-grow: 1; /* All items will grow equally */
}
Proportional Growth
If flex items have different flex-grow values, they will grow in proportion to those values.
.flex-item1 {
flex-grow: 1; /* Grows 1 part */
}
.flex-item2 {
flex-grow: 2; /* Grows 2 parts */
}
In this example, flex-item2 will grow twice as much as flex-item1.
flex-grow Best Practices
-
Avoid Large Values: Using very large
flex-growvalues can make it difficult to predict how items will grow. Stick to smaller, more manageable numbers. -
Responsive Design: Use
flex-growin conjunction with media queries to adapt layouts to different screen sizes. -
Readability: When using
flex-grow, it's helpful to comment or document why a particular setting is chosen, especially if it deviates from the default0. -
Browser Compatibility: The
flex-growproperty is well-supported in modern browsers, but always check compatibility if you need to support older versions.
flex-shrink
The flex-shrink property in CSS Flexbox is instrumental for controlling how flex items shrink when the flex container doesn't have enough space to accommodate all items at their initial or base size.
flex-shrink Syntax
The flex-shrink property accepts a non-negative number, which serves as a "flex shrink factor." The default value is 1.
/* Syntax */
flex-shrink: <number>; /* default is 1 */
How It Works
The flex-shrink property operates by distributing the "overflow" or "deficit" space along the main axis among flex items based on their flex-shrink values. Here's the general mechanism:
-
Calculate Deficit Space: The flex container first calculates the deficit space along the main axis after placing all flex items with their initial sizes (
flex-basisor content size). -
Distribute Deficit Space: The deficit space is then distributed among the flex items in proportion to their
flex-shrinkvalues. -
Shrink Items: Each flex item shrinks by an amount proportional to its
flex-shrinkvalue, reducing the overflow.
flex-shrink Examples
Equal Shrinkage
If all flex items have the same flex-shrink value, they will shrink equally to fit into the container.
.flex-item {
flex-shrink: 1; /* All items will shrink equally */
}
Proportional Shrinkage
If flex items have different flex-shrink values, they will shrink in proportion to those values.
.flex-item1 {
flex-shrink: 1; /* Shrinks 1 part */
}
.flex-item2 {
flex-shrink: 2; /* Shrinks 2 parts */
}
In this example, flex-item2 will shrink twice as much as flex-item1.
flex-shrink Best Practices
-
Avoid Zero: Setting
flex-shrinkto0can make an item inflexible in terms of shrinking, which might break layouts on smaller screens. -
Responsive Design: Use
flex-shrinkin combination with media queries to create layouts that adapt to different screen sizes. -
Readability: When using
flex-shrink, it's advisable to comment or document why a particular setting is chosen, especially if it deviates from the default1. -
Browser Compatibility: The
flex-shrinkproperty is well-supported in modern browsers, but always check compatibility if you need to support older versions.
Understanding the flex-shrink property allows you to manage how flex items adapt to space constraints in a flex container, providing a high degree of control for complex layouts.
flex-basis
The flex-basis property in CSS Flexbox sets the initial main size of a flex item before any available space is distributed according to the flex-grow and flex-shrink properties.
flex-basis Syntax
The flex-basis property accepts a length value, a percentage, or the keyword auto. The default value is auto.
/* Syntax */
flex-basis: <length> | <percentage> | auto; /* default is auto */
How It Works
-
Initial Size:
flex-basissets the initial size of a flex item along the main axis before any space distribution takes place. -
Space Distribution: After setting the initial sizes based on
flex-basis, the flex container then distributes any remaining or deficit space among the flex items according to theirflex-growandflex-shrinkvalues. -
Overrides Width/Height: If
flex-basisis set, it will override thewidth(in a row layout) orheight(in a column layout) property of the flex item.
flex-basis Examples
Fixed Basis
Setting a fixed flex-basis value will give the flex item a starting size that won't change unless explicitly allowed to grow or shrink.
.flex-item {
flex-basis: 200px; /* Fixed initial size */
}
Percentage Basis
You can also set flex-basis as a percentage of the flex container's size.
.flex-item {
flex-basis: 50%; /* Takes up half of the container's main axis */
}
Auto Basis
When set to auto, the browser looks at the item's width or height property to determine its base size.
.flex-item {
flex-basis: auto; /* Uses width or height as the initial size */
}
flex-basis Best Practices
-
Explicit Sizing: Use
flex-basisto explicitly set the initial size of flex items, making the layout more predictable. -
Responsive Design: Use
flex-basisin conjunction with media queries to adapt layouts to different screen sizes. -
Readability: Comment or document the rationale behind a particular
flex-basissetting, especially if it deviates from the defaultauto. -
Browser Compatibility: The
flex-basisproperty is well-supported in modern browsers, but always check compatibility if you need to support older versions.
flex
The flex property in CSS Flexbox is a shorthand for setting the flex-grow, flex-shrink, and flex-basis properties all at once.
flex Syntax
The flex property can accept up to three values:
/* Syntax */
flex: <flex-grow> <flex-shrink> <flex-basis>;
flex-grow: A number that defines how much a flex item will grow relative to other flex items in the container.flex-shrink: A number that defines how much a flex item will shrink relative to other flex items in the container.flex-basis: The initial main size of the flex item before free space is distributed.
flex Default Values
The default value of the flex property is 0 1 auto, which means:
flex-grow: 0 (won't grow to fill available space)flex-shrink: 1 (will shrink if needed)flex-basis: auto (will look atwidthorheightproperties)
flex Common Usage
1. Equal Distribution
.flex-item {
flex: 1; /* shorthand for flex: 1 1 0% */
}
Here, each flex item will grow and shrink equally to fill the container.
2. Fixed Basis with Growth
.flex-item {
flex: 1 1 200px;
}
Each flex item starts at 200px but will grow to fill any extra space.
3. No Shrink
.flex-item {
flex: 1 0 auto;
}
Flex items will grow to fill the space but won't shrink below their content size.
flex Best Practices
-
Use Shorthand: Whenever possible, use the
flexshorthand to setflex-grow,flex-shrink, andflex-basistogether. It makes the code cleaner and easier to understand. -
Be Explicit: While it's tempting to use shorthand all the time, there are cases where you might want to be explicit about certain properties for readability and maintainability.
-
Responsive Design: Use
flexin combination with media queries to create layouts that adapt to different screen sizes. -
Browser Compatibility: The
flexproperty is well-supported in modern browsers, but always check compatibility if you need to support older versions.
align-self
The align-self property in CSS Flexbox allows you to adjust the alignment of an individual flex item along the cross-axis, overriding the align-items property set on the flex container.
align-self Syntax
The align-self property accepts the following values:
/* Syntax */
align-self: auto | flex-start | flex-end | center | baseline | stretch;
auto: Inherits thealign-itemsvalue from the flex container.flex-start: Aligns the item at the start of the cross-axis.flex-end: Aligns the item at the end of the cross-axis.center: Centers the item along the cross-axis.baseline: Aligns the item based on its baseline.stretch: Stretches the item to fill the cross-axis (default).
How It Works
The align-self property allows you to individually control how a single flex item is aligned along the cross-axis, irrespective of other items in the flex container. This is particularly useful when you want one item to behave differently from its siblings.
align-self Examples
Align to Start
.flex-item {
align-self: flex-start;
}
This will align the flex item at the start of the cross-axis, regardless of the align-items setting on the flex container.
Align to End
.flex-item {
align-self: flex-end;
}
This will align the flex item at the end of the cross-axis.
Center Alignment
.flex-item {
align-self: center;
}
This will center the flex item along the cross-axis.
align-self Best Practices
-
Selective Use: Use
align-selfsparingly and only when necessary, as it can make the layout harder to understand if overused. -
Fallbacks: Always test the layout in multiple browsers to ensure compatibility, as older browsers may not fully support Flexbox features.
-
Documentation: If you're using
align-selfto override the container'salign-items, it's a good practice to comment why this is necessary, for better maintainability. -
Responsive Design: Consider how
align-selfwill interact with your responsive design, especially if you're using media queries to adjust the layout for different screen sizes.
order
The order property in CSS Flexbox allows you to control the order in which flex items appear within a flex container, overriding their natural order in the HTML markup.
order Syntax
The order property accepts an integer value, positive or negative:
/* Syntax */
order: <integer>; /* default is 0 */
How It Works
-
Default Order: By default, all flex items have an
ordervalue of 0, which means they appear in the order they are placed in the HTML markup. -
Reordering: Setting the
orderproperty to a different integer value will rearrange the items within the flex container based on ascending numerical value. -
Same Order Value: If multiple items have the same
ordervalue, they will appear in their original order relative to each other.
order Examples
Basic Reordering
/* HTML */
<div class="flex-container">
<div class="flex-item item1">1</div>
<div class="flex-item item2">2</div>
<div class="flex-item item3">3</div>
</div>
/* CSS */
.item1 { order: 2; }
.item2 { order: 3; }
.item3 { order: 1; }
In this example, the items will appear in the order 3, 1, 2, based on their order values.
Negative Order
.item1 { order: -1; }
Setting a negative order value will move the item towards the beginning of the flex container.
order Best Practices
-
Semantic HTML: Use
orderjudiciously to maintain the semantic integrity of your HTML. Changing the visual order should not confuse the user or affect accessibility. -
Readability: If you're using
orderto significantly change the layout, add comments to explain why this is necessary for better code maintainability. -
Responsive Design: The
orderproperty can be particularly useful in responsive designs where you may want to rearrange items for different screen sizes using media queries. -
Browser Compatibility: The
orderproperty is well-supported in modern browsers, but always check compatibility if you need to support older versions.