Skip to content

Responsive Visibility with Tailwind CSS

Learn how to effectively show and hide elements across different screen sizes using Tailwind CSS's responsive utilities.

The Problem

When working with responsive design, you often need to control element visibility based on screen size. Tailwind CSS provides breakpoint-based utilities, but they work with min-width media queries by default, which can be confusing when you want to hide elements specifically on smaller screens.

Tailwind CSS Breakpoints

First, understand Tailwind's default breakpoints:

BreakpointMinimum Width
sm640px
md768px
lg1024px
xl1280px
2xl1536px

These are min-width breakpoints, meaning styles apply from that width upward.

Solution: Using max-* Breakpoints

The most straightforward approach is using Tailwind's max-* variants, which apply styles up to a specific breakpoint:

html
<div class="max-lg:hidden">Content visible only on large screens and up</div>

This element will be hidden on screens smaller than 1024px (the lg breakpoint) and visible on screens 1024px and larger.

Alternative Approach: Standard Breakpoints

You can also combine the standard hidden and responsive display utilities:

html
<div class="hidden lg:block">01</div>

This element is hidden by default and only becomes visible (as a block element) on large screens and above.

Complete Example

html
<div class="flex">
  <div class="hidden lg:block">Visible only on large screens</div>
  <div>Always visible content</div>
  <div>More content</div>
</div>
css
@media (max-width: 1023px) {
  .hide-below-lg {
    display: none;
  }
}

TIP

For maximum control, consider combining both approaches:

html
<div class="max-md:hidden md:flex lg:hidden">
  Content visible only on medium screens
</div>

Important Considerations

WARNING

Avoid using visibility: hidden (invisible class) instead of display: none (hidden class) if you want to completely remove the element from layout flow. visibility: hidden hides the element but preserves its space in the layout.

Anti-pattern

Don't use scaling transforms (scale-0) to hide elements as suggested in some answers. This approach affects layout and accessibility differently than proper display control.

Configuration

Ensure your Tailwind CSS is properly configured. For most setups, the default configuration includes all necessary responsive utilities:

js
// tailwind.config.js
module.exports = {
  content: ['./src/**/*.{html,js}'],
  theme: {
    extend: {},
  },
  plugins: [],
}

When to Use Each Approach

  • Use max-*:hidden when you need precise control over the maximum width where an element should be hidden
  • Use hidden md:block when you want to toggle between hidden and a specific display value
  • The max-* approach is generally more intuitive for "hide below this size" scenarios

Browser Compatibility

Both approaches work in all modern browsers. The max-* variants rely on CSS media queries with max-width, which have excellent browser support.

Choose the method that best fits your specific use case and makes your code most readable and maintainable.