Kombai Logo

Tailwind CSS Flex Basis

Flex Basis determines the initial size of a flex item before the remaining space is distributed. When working with flex layouts, the property essentially serves as the width (or height in certain contexts) that a flex item will occupy in a container.

Tailwind CSS provides a set of utilities that enable you to set flex-basis effortlessly. Whether you need to establish a uniform distribution of space or precisely define how your components adapt across screen sizes, Tailwind’s utilities equip you to configure flexible and responsive layouts with ease.

ClassPropertiesExample
basis-0flex-basis: 0px;<div className="basis-0"></div>
basis-1flex-basis: 0.25rem; <div className="basis-1"></div>
basis-2flex-basis: 0.5rem; <div className="basis-2"></div>
basis-3flex-basis: 0.75rem; <div className="basis-3"></div>
basis-4flex-basis: 1rem; <div className="basis-4"></div>
basis-5flex-basis: 1.25rem; <div className="basis-5"></div>
basis-6flex-basis: 1.5rem; <div className="basis-6"></div>
basis-7flex-basis: 1.75rem; <div className="basis-7"></div>
basis-8flex-basis: 2rem; <div className="basis-8"></div>
basis-9flex-basis: 2.25rem; <div className="basis-9"></div>
basis-10flex-basis: 2.5rem; <div className="basis-10"></div>
basis-11flex-basis: 2.75rem; <div className="basis-11"></div>
basis-12flex-basis: 3rem; <div className="basis-12"></div>
basis-14flex-basis: 3.5rem; <div className="basis-14"></div>
basis-16flex-basis: 4rem; <div className="basis-16"></div>
basis-20flex-basis: 5rem; <div className="basis-20"></div>
basis-24flex-basis: 6rem; <div className="basis-24"></div>
basis-28flex-basis: 7rem; <div className="basis-28"></div>
basis-32flex-basis: 8rem; <div className="basis-32"></div>
basis-36flex-basis: 9rem; <div className="basis-36"></div>
basis-40flex-basis: 10rem; <div className="basis-40"></div>
basis-44flex-basis: 11rem; <div className="basis-44"></div>
basis-48flex-basis: 12rem; <div className="basis-48"></div>
basis-52flex-basis: 13rem; <div className="basis-52"></div>
basis-56flex-basis: 14rem; <div className="basis-56"></div>
basis-60flex-basis: 15rem; <div className="basis-60"></div>
basis-64flex-basis: 16rem; <div className="basis-64"></div>
basis-72flex-basis: 18rem; <div className="basis-72"></div>
basis-80flex-basis: 20rem; <div className="basis-80"></div>
basis-96flex-basis: 24rem; <div className="basis-96"></div>
basis-autoflex-basis: auto;<div className="basis-auto"></div>
basis-pxflex-basis: 1px;<div className="basis-px"></div>
basis-0.5flex-basis: 0.125rem; <div className="basis-0.5"></div>
basis-1.5flex-basis: 0.375rem; <div className="basis-1.5"></div>
basis-2.5flex-basis: 0.625rem; <div className="basis-2.5"></div>
basis-3.5flex-basis: 0.875rem; <div className="basis-3.5"></div>
basis-1/2flex-basis: 50%;<div className="basis-1/2"></div>
basis-1/3flex-basis: 33.333333%;<div className="basis-1/3"></div>
basis-2/3flex-basis: 66.666667%;<div className="basis-2/3"></div>
basis-1/4flex-basis: 25%;<div className="basis-1/4"></div>
basis-2/4flex-basis: 50%;<div className="basis-2/4"></div>
basis-3/4flex-basis: 75%;<div className="basis-3/4"></div>
basis-1/5flex-basis: 20%;<div className="basis-1/5"></div>
basis-2/5flex-basis: 40%;<div className="basis-2/5"></div>
basis-3/5flex-basis: 60%;<div className="basis-3/5"></div>
basis-4/5flex-basis: 80%;<div className="basis-4/5"></div>
basis-1/6flex-basis: 16.666667%;<div className="basis-1/6"></div>
basis-2/6flex-basis: 33.333333%;<div className="basis-2/6"></div>
basis-3/6flex-basis: 50%;<div className="basis-3/6"></div>
basis-4/6flex-basis: 66.666667%;<div className="basis-4/6"></div>
basis-5/6flex-basis: 83.333333%;<div className="basis-5/6"></div>
basis-1/12flex-basis: 8.333333%;<div className="basis-1/12"></div>
basis-2/12flex-basis: 16.666667%;<div className="basis-2/12"></div>
basis-3/12flex-basis: 25%;<div className="basis-3/12"></div>
basis-4/12flex-basis: 33.333333%;<div className="basis-4/12"></div>
basis-5/12flex-basis: 41.666667%;<div className="basis-5/12"></div>
basis-6/12flex-basis: 50%;<div className="basis-6/12"></div>
basis-7/12flex-basis: 58.333333%;<div className="basis-7/12"></div>
basis-8/12flex-basis: 66.666667%;<div className="basis-8/12"></div>
basis-9/12flex-basis: 75%;<div className="basis-9/12"></div>
basis-10/12flex-basis: 83.333333%;<div className="basis-10/12"></div>
basis-11/12flex-basis: 91.666667%;<div className="basis-11/12"></div>
basis-fullflex-basis: 100%;<div className="basis-full"></div>

Overview of Flex Basis

Adding the Flex Basis

To give an initial size to your flex items, use utilities such as basis-1, basis-2, basis-3, etc.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

States and Responsiveness

Tailwind also supports various state and responsive modifiers to enhance the user experience on interactions and different screen sizes. This allows you to apply these utilities conditionally, reacting to user states like hover or focus, or scaffolding your layout to shift at specific breakpoints.

Hover and Focus States

Tailwind has state modifiers like hover, focus, etc. to target these states. Prefix these modifiers to the flex basis utilities to change the basis value when a certain state is active, e.g., hover:basis-12, focus:basis-20, etc.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Breakpoint Modifiers

Tailwind has breakpoint modifiers to assign custom flex basis values at different breakpoints. Prefix these modifiers(sm, md, lg, etc.) to the flex basis utilities to change the basis value as the screen dimensions change, e.g., sm:basis-12, md:basis-24, lg:basis-60, etc.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Custom Flex Basis

Tailwind allows you to define custom flex-basis values when the pre-defined utilities don’t meet your needs. These custom values can be added to the configuration file and then used directly in your markup. Alternatively, for quick, one-time adjustments where updating the theme is too much effort, you can use arbitrary values for greater flexibility.

Extending the Theme

Tailwind’s configuration file (tailwind.config.js) provides a convenient route for customizing your theme. By introducing a fresh set of values under the flexBasis section (within the theme.extend key), you can map your own unique classes.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Using Arbitrary Values

Sometimes you require a precise number or fraction that doesn’t exist in Tailwind’s defaults or even your extended theme. Tailwind also supports arbitrary values, letting you specify exact flex-basis values when the situation calls for it.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Real World Examples

Product Comparison Cards

A flexible product comparison layout where each card has a fixed basis width but can grow based on content.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Team Member Directory

A responsive team directory with flex-basis controlling card sizes for different screen sizes.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Feature Showcase Grid

A feature showcase with varying flex-basis values for different content types.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Project Timeline Cards

A horizontal scrolling timeline with fixed flex-basis for consistent card widths.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Service Pricing Tiers

A pricing table with basis-full to occupy 100% available space.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Customization Examples

Product Card Grid with Custom Flex Basis

This example demonstrates a responsive product card grid using custom flex basis values for different breakpoints.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Dashboard Sidebar with Dynamic Width

This example shows how to create a collapsible dashboard sidebar with custom flex basis transitions.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

This example creates a responsive masonry-style gallery using custom flex basis values.

This is a live editor. Play around with it!
export default function App() {
  return <h1>Hello world</h1>
}

Best Practices

Maintain Design Consistency

To ensure design consistency, apply the same flex-basis rules to similar elements such as cards, buttons, or images. Tailwind’s basis-* utilities allow you to define consistent sizes, such as basis-1/4 for equally sized cards or basis-auto for dynamic content. Using responsive variants like sm:basis-1/3 md:basis-1/4 ensures layouts adapt seamlessly across different screen sizes.

If required, you can define project-specific reusable class names for recurring patterns that cannot be easily expressed with utility classes. For example, you might create classes like card-layout-sm, card-layout-md, and card-layout-lg for consistent card sizes at different breakpoints.

Testing layouts across different screen sizes is another critical step in maintaining consistency. Ensure that the utilities adapt well to varying viewport dimensions, avoiding unpredictable behavior or misaligned elements in responsive designs.

Leverage Utility Combinations

Combining flex basis with other utilities like grow, shrink, and alignment classes allows you to create powerful and visually appealing layouts. For example, using basis-1/3 alongside grow ensures that each item in a row starts at one-third width but can expand to fill additional space if available. This is particularly useful for layouts with variable content.

Additionally, pairing basis utilities with responsive prefixes (sm:basis-1/2, lg:basis-1/4) allows you to adapt layouts to different screen sizes.

Use these combinations strategically to maintain simplicity and clarity in your code. Avoid overloading components with unnecessary utilities, as this can make your layout harder to maintain and debug.

Accessibility Considerations

Support Accessible Interactive Elements

Interactive elements like modals, forms, and dropdown menus benefit from precise size control using flex basis utilities.

For example, when designing navigation menus, use basis utilities to ensure consistent spacing between menu items. Additionally, apply spacing classes (gap-4, px-2) to maintain a clean and organized structure, making it easier for users to navigate your interface.

Regularly test your layouts with screen readers and keyboard navigation to confirm that they provide a great experience for all users. Ensuring logical structure and spacing not only enhances accessibility but also improves the overall usability of your design.

Focus on High Contrast

Combining Tailwind’s basis-* utilities with high-contrast colors ensures your designs are both visually appealing and accessible to all users. For example, in a form layout, using basis-1/2 for buttons can provide consistent sizing and alignment, making the buttons more prominent. Pair this with strong color contrasts, such as a dark background (e.g., bg-gray-900) and light text (e.g., text-white), or the reverse, to improve readability and accessibility.

To ensure your designs meet accessibility standards, test them under high-contrast settings and extreme zoom levels. Thoughtful use of basis-* helps prioritize essential content by structuring layouts clearly, while high-contrast color combinations ensure that users with low vision can easily identify and interact with key elements. Together, these strategies create layouts that are both functional and inclusive.