align-self
align-self
Level 5 — Layouts — Flexbox A child-level Flexbox property that allows a single flex item to override the parent container's
align-itemsconfiguration along the Cross Axis.
1. Prerequisites
align-items— The parent property thatalign-selfoverrides.
2. Term Category
Flexbox Property (Universal Modern Standard .): align-self is a fundamental concept in this technology stack. Level 5 — Layouts — Flexbox
3. Explanation
(1) Design Motivation — "Why did we design this?"
Normally, Flexbox works from the top down: you set layout rules on the Parent container, and they apply to all the Children equally.
For instance, applying align-items: center; to a horizontal navbar centers every logo, link, and button vertically.
But what if you want a single item—like a "New!" alert badge—to stick to the very top edge of the navbar, while everything else remains perfectly centered?
If you try to change the parent's align-items, it moves everything.
To solve this, the W3C designed align-self. It is a child-level property. It acts as an override switch, letting an individual element break away from the parent's vertical alignment and align itself independently.
(2) The Core Values
align-self accepts the exact same values as the parent's align-items property:
auto(Default): Inherits the parent container'salign-itemsvalue.flex-start: Aligns the individual item to the top/start of the cross axis.flex-end: Aligns the individual item to the bottom/end of the cross axis.center: Aligns the individual item perfectly in the center.stretch: Stretches the individual item to fill the height of the container.baseline: Aligns the item along the text baseline.
(3) Code Examples
Short Snippet
Nudging a single child button to the bottom:
.parent-container {
display: flex;
align-items: center; /* Centers all children vertically */
height: 200px;
}
.child-override {
/* This specific child breaks away and aligns to the bottom! */
align-self: flex-end;
}
Fuller Example
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Align Self Demo</title>
<style>
.flex-container {
display: flex;
align-items: center; /* All items centered vertically by default */
height: 150px;
background-color: #f0f0f0;
border: 2px solid black;
padding: 10px;
}
.item {
width: 100px;
padding: 15px;
margin: 5px;
background-color: lightblue;
text-align: center;
font-weight: bold;
}
/* Override items */
.top-item {
align-self: flex-start;
background-color: lightgreen;
}
.bottom-item {
align-self: flex-end;
background-color: tomato;
color: white;
}
</style>
</head>
<body>
<div class="flex-container">
<div class="item">Centered</div>
<div class="item top-item">Top Aligned</div>
<div class="item">Centered</div>
<div class="item bottom-item">Bottom Aligned</div>
</div>
</body>
</html>
4. Common Mistakes & Pitfalls
Mistake 1: Applying align-self to the parent container
The mistake: Writing align-self inside the container ruleset:
/* BAD: Has no effect on layout! */
.parent {
display: flex;
align-self: center;
}
Why it's wrong: align-self is a child-level property. It must be written inside the ruleset of the specific child item you want to override.
Mistake 2: Expecting align-self to align items horizontally in a row
The mistake: Using align-self to push a single child to the far-right in a row.
Why it's wrong: In a row layout, horizontal spacing is controlled along the Main Axis by justify-content. align-self only controls the perpendicular Cross Axis (vertical spacing in a row).
If you want to push a single child item to the far-right, use the margin trick: margin-left: auto;.
Mistake 3: Applying align-self to the Flex Container Instead of Individual Flex Child Items
The mistake: Writing .flex-container { align-self: flex-end; }.
Why it's wrong: align-self is a child item property used to override the parent's align-items rule for a SINGLE flex item. It has no effect when applied to parent containers.
Incorrect:
.container { display: flex; align-self: center; } /* ❌ Invalid property on parent! */
Fix:
.container { display: flex; align-items: flex-start; }
.single-item { align-self: flex-end; } /* Overrides parent for 1 item */
Mistake 4: Expecting align-self to Override Main Axis Alignment (justify-content)
The mistake: Attempting to use align-self to change horizontal position in a flex-direction: row container.
Why it's wrong: align-self operates strictly along the Cross Axis. Main axis alignment cannot be overridden per item via align-self. Use margin-left: auto.
Incorrect:
/* Trying to override horizontal justify-content via align-self */
Fix:
.item-right { margin-left: auto; } /* Margin auto overrides main axis position */
5. Practice Exercises
Exercise 1: Overriding Container Cross-Axis Alignment for Individual Action Buttons
Scenario: An author overrides the container's align-items: center rule on a single CTA button using align-self: flex-end.
Requirements:
- Set container
align-items: center. - Set
align-self: flex-endon.btn-featuredto push it to the bottom.
Answer
Implementation
.hero-card {
display: flex;
align-items: center; /* Default vertical centering for most items */
gap: 1.5rem;
padding: 2rem;
background-color: #ffffff;
}
.hero-cta {
align-self: flex-end; /* Individual Override: Pushes ONLY this button to bottom! */
background-color: #2563eb;
color: #ffffff;
padding: 0.75rem 1.5rem;
border-radius: 0.375rem;
}
Technical Explanation
- The
align-selfProperty: Allows an INDIVIDUAL flex item to override the cross-axis alignment (align-items) set by its parent flex container. - Granular Layout Control: Values match
align-items(auto,flex-start,flex-end,center,baseline,stretch). autoDefault:align-self: autoinherits the parent container'salign-itemsvalue.
Exercise 2: Centering Featured Product Badges Individually inside Stretched Cards
Scenario: Centers a tag badge horizontally inside a stretched card layout.
Requirements:
- Apply
align-self: centerto badge tag.
Answer
Implementation
.product-card {
display: flex;
flex-direction: column;
align-items: stretch;
}
.featured-badge {
align-self: center; /* Individual Override: Centers badge horizontally in column flex */
background-color: #fef3c7;
color: #92400e;
padding: 0.25rem 0.75rem;
border-radius: 9999px;
}
Technical Explanation
- Column Flex Cross-Axis Switch: In
flex-direction: column, the cross-axis is HORIZONTAL;align-self: centercenters the item horizontally. - No Extra Wrapper Needed: Allows centering small badges without wrapping them in extra layout
<div>containers. - Clean Modular CSS: Keeps card component rulesets lightweight.
Exercise 3: Pinning Card Footer Buttons to Bottom of Variable Height Cards
Scenario: Uses margin-top: auto alongside align-self to pin card footers.
Requirements:
- Apply
margin-top: autoto card footer button.
Answer
Implementation
.card-body {
display: flex;
flex-direction: column;
}
.card-footer-btn {
margin-top: auto; /* Pushes footer button to bottom of equal-height card */
align-self: stretch;
}
Technical Explanation
- Auto Margins in Flexbox: Setting
margin-top: autoon a flex item absorbs all remaining vertical space, pushing the item to the bottom. - Equal Height Alignment: Guarantees action buttons align across adjacent cards of varying text length.
- Standard Card Pattern: Industry standard pattern for modern responsive card UI components.
6. Related Terms
align-items— The parent alignment controller.justify-content— The main axis spacing controller.order— The visual child ordering property.flex-direction— Related concept:flex-direction.
7. Key Takeaways
align-selfis applied to individual child flex items.- It overrides the parent container's
align-itemssetting along the Cross Axis. - It accepts the values:
auto,flex-start,flex-end,center,stretch, andbaseline. - It does not affect main-axis alignment (cannot replace
justify-content).