Kombai Logo

Tailwind CSS Border Width

The border width property in CSS controls the thickness of borders around elements, offering a way to enhance design and visual separation. Tailwind CSS provides a set of utility classes that map directly to these CSS properties, making it straightforward to define border widths for all, individual, or directional sides.

In this guide, we’ll deep dive into Tailwind CSS utilities for border width, explore its customization capabilities, and discuss advanced techniques like conditionally applying styles, using arbitrary values, and more.

ClassPropertiesExample
border-0border-width: 0px;<div className="border-0"></div>
border-2border-width: 2px;<div className="border-2"></div>
border-4border-width: 4px;<div className="border-4"></div>
border-8border-width: 8px;<div className="border-8"></div>
borderborder-width: 1px;<div className="border"></div>
border-x-0border-left-width: 0px; border-right-width: 0px;<div className="border-x-0"></div>
border-x-2border-left-width: 2px; border-right-width: 2px;<div className="border-x-2"></div>
border-x-4border-left-width: 4px; border-right-width: 4px;<div className="border-x-4"></div>
border-x-8border-left-width: 8px; border-right-width: 8px;<div className="border-x-8"></div>
border-xborder-left-width: 1px; border-right-width: 1px;<div className="border-x"></div>
border-y-0border-top-width: 0px; border-bottom-width: 0px;<div className="border-y-0"></div>
border-y-2border-top-width: 2px; border-bottom-width: 2px;<div className="border-y-2"></div>
border-y-4border-top-width: 4px; border-bottom-width: 4px;<div className="border-y-4"></div>
border-y-8border-top-width: 8px; border-bottom-width: 8px;<div className="border-y-8"></div>
border-yborder-top-width: 1px; border-bottom-width: 1px;<div className="border-y"></div>
border-s-0border-inline-start-width: 0px;<div className="border-s-0"></div>
border-s-2border-inline-start-width: 2px;<div className="border-s-2"></div>
border-s-4border-inline-start-width: 4px;<div className="border-s-4"></div>
border-s-8border-inline-start-width: 8px;<div className="border-s-8"></div>
border-sborder-inline-start-width: 1px;<div className="border-s"></div>
border-e-0border-inline-end-width: 0px;<div className="border-e-0"></div>
border-e-2border-inline-end-width: 2px;<div className="border-e-2"></div>
border-e-4border-inline-end-width: 4px;<div className="border-e-4"></div>
border-e-8border-inline-end-width: 8px;<div className="border-e-8"></div>
border-eborder-inline-end-width: 1px;<div className="border-e"></div>
border-t-0border-top-width: 0px;<div className="border-t-0"></div>
border-t-2border-top-width: 2px;<div className="border-t-2"></div>
border-t-4border-top-width: 4px;<div className="border-t-4"></div>
border-t-8border-top-width: 8px;<div className="border-t-8"></div>
border-tborder-top-width: 1px;<div className="border-t"></div>
border-r-0border-right-width: 0px;<div className="border-r-0"></div>
border-r-2border-right-width: 2px;<div className="border-r-2"></div>
border-r-4border-right-width: 4px;<div className="border-r-4"></div>
border-r-8border-right-width: 8px;<div className="border-r-8"></div>
border-rborder-right-width: 1px;<div className="border-r"></div>
border-b-0border-bottom-width: 0px;<div className="border-b-0"></div>
border-b-2border-bottom-width: 2px;<div className="border-b-2"></div>
border-b-4border-bottom-width: 4px;<div className="border-b-4"></div>
border-b-8border-bottom-width: 8px;<div className="border-b-8"></div>
border-bborder-bottom-width: 1px;<div className="border-b"></div>
border-l-0border-left-width: 0px;<div className="border-l-0"></div>
border-l-2border-left-width: 2px;<div className="border-l-2"></div>
border-l-4border-left-width: 4px;<div className="border-l-4"></div>
border-l-8border-left-width: 8px;<div className="border-l-8"></div>
border-lborder-left-width: 1px;<div className="border-l"></div>

Overview of Border Width

All Sides Border

To start, developers can apply border width across all sides or configure specific sides as required. Use utilities like border-2, border-4, border-8, etc. to apply borders on all sides.

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

Single Side Border

Tailwind lets you define borders for individual sides as well, For example, border-t-4 will add a top border width of 4px. Similarly, border-b-4 will add a bottom border width of 4px.

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

Horizontal and Vertical Borders

For horizontal (top & bottom) or vertical (left & right) sides, you can apply border-y-* and border-x-* utilities. For example, to add a 8px border on top and bottom, use border-y-8.

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

Borders Between Elements

To create borders between child elements, Tailwind provides the divide-width class which is useful for layouts where siblings share defined spacing or separation.

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

Logical Borders

Modern web designs often account for left-to-right (LTR) and right-to-left (RTL) languages. Tailwind provides logical utilities that adapt border width for internationalized layouts dynamically.

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

Borders Without Preflight

Preflight is Tailwind's base reset for styling defaults. For projects that have Preflight disabled, include a border-style utility whenever you use a border-width utility to ensure the border is rendered correctly.

This is necessary because most browsers default the border-style property to none, meaning adding a border-width alone won’t make the border visible.

Preflight addresses this by setting border-style to solid and border-width to 0 globally. This reset allows you to add borders to elements using just a border-width utility in projects where Preflight is enabled. Without Preflight, you'll need to handle this explicitly.

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

States and Responsiveness

Tailwind CSS allows you to apply dynamic styles such as border properties by coupling utilities with state and responsive modifiers.

Hover and Focus States

Use hover and focus modifiers to apply border widths conditionally, e.g., hover:border-4, focus:border-8, etc.

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

Breakpoint Modifiers

Use breakpoint modifiers like sm, md, lg, etc. to apply border widths at various breakpoints, e.g., sm:border-4, lg:border-8, etc.

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

Custom Border Width

If pre-defined utilities in Tailwind CSS don’t meet your design requirements, you can extend your project’s configuration or use arbitrary values.

Extending the Theme

Through the tailwind.config.js file, custom border widths can be added.

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

Using Arbitrary Values

Through the arbitrary values, you can use one-off values without defining them in the config file.

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

Real World Examples

Product Cards

This example showcases product cards with different border widths to emphasize featured items.

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

This example shows a navigation menu with different border widths to indicate active states.

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

Notification Cards

This example displays a notification system where the border width indicates the priority level of the message.

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

Educational Quiz Cards

This example shows a quiz interface where border width indicates answer status and selection state.

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

Recipe Cards

This example shows a cooking recipe interface where border width changes on click.

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

Customization Examples

Custom Border Width for Product Cards

This example demonstrates how to create product cards with custom border widths for different states and sections.

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

Decorative Border Width for Blog Posts

This example shows how to implement decorative borders with custom widths for blog post layouts.

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

Interactive Navigation Border Width

This example showcases custom border widths for an interactive navigation menu with hover effects.

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

Best Practices

Maintain Design Consistency

Consistent border widths across your projects is essential to maintain a harmonious design. For example, using the same border-width for all card components ensures that their visual structure aligns across different sections of your application.

Another approach to maintaining design consistency is extending the design system within the tailwind.config.js file. For example, you might define specific border styles or widths like border-thin or border-thick to prevent arbitrary values in your codebase. This practice enforces predictable patterns, making future development more manageable and scalable.

Whenever possible, test how individual border width utilities work across multiple screen sizes and states. This helps to ensure consistent experiences not only on desktops but also on tablets and smartphones, avoiding design disparities in your responsive layouts.

Optimize for Reusability

Reusable design components minimize redundant development and foster consistency across your application. To build reusable components with border widths, consider encapsulating commonly used configurations inside functional components. For example, a Card component with a border-2 border-gray-300 class can be reused across various pages with different content but identical visual styles.

Additionally, define custom border-width utilities for your project’s specific needs. Defining a card-border width class in tailwind.config.js, for example, enables easy reuse of custom borders across the project without using arbitrary values repeatedly.

Another practical technique for fostering reusability is creating variations of a component. For example, a PrimaryCard might use border-4, while a SecondaryCard uses border-2.

Accessibility Considerations

Enhance Readability and Navigability

Borders play a critical role in enhancing content readability and guiding user focus. By defining clear and appropriate border widths, you can distinguish between primary and secondary sections of a layout. For instance, an input field styled with border-2 border-gray-300 appears distinct, making forms easier to visually parse and navigate.

For layouts with dense content, combining border width with border color and border radius utilities improve content segmentation for both visual users and assistive technology. For users relying on screen magnification or reduced visual acuity, clearly defined borders simplify navigation throughout interfaces.

Moreover, use Tailwind's combination of focus and hover variants on interactive items to enhance clarity. For example, hover:border-blue-500 helps visually highlight elements as actionable, reducing cognitive load.

Support Accessible Interactive Elements

Interactive components benefit from clear visual cues that indicate focus or hover states. Combine hover and focus modifiers with border width utilities, e.g., hover:border-*, focus:border-* to emphasize interactivity on elements like buttons, input fields, and cards.

These visual states help keyboard or visually impaired users identify selectable elements within interfaces. Pair these styles with semantic HTML and ARIA roles wherever applicable, ensuring not only visual feedback but also programmatic accessibility for assistive technologies.