๐ŸŽจ React Styling & Design
Estimated reading: 4 minutes 275 views

React Tailwind & Emotion Styling โ€“ Utility-First & CSS-in-JS in One App (2025 Guide)


Introduction โ€“ Why Use Tailwind CSS and Emotion in React?

Modern React.js development demands flexibility in styling โ€” from rapid prototyping to deep customization, developers need tools that balance speed and control. Tailwind CSS offers a utility-first approach, while Emotion provides powerful CSS-in-JS capabilities. When used together or independently, they offer scalable, customizable, and component-driven styling.

In this guide, youโ€™ll learn:

  • How to use Tailwind CSS and Emotion separately and together in React
  • Key features and differences between the two
  • Setup instructions, examples, and dynamic styling
  • Best practices for combining both tools effectively

1. What Are Tailwind CSS and Emotion?

ToolDescription
TailwindUtility-first CSS framework with atomic class names
EmotionCSS-in-JS library for styled components and inline styles

Both are scalable and popular in production apps, but serve different use cases.


2. Installing Tailwind CSS in React

Tailwind is easy to set up in Create React App (CRA) or Vite.

Step-by-Step Setup:

npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p

Configure tailwind.config.js:

module.exports = {
  content: ['./src/**/*.{js,jsx,ts,tsx}'],
  theme: {
    extend: {},
  },
  plugins: [],
}

Add Tailwind to index.css:

@tailwind base;
@tailwind components;
@tailwind utilities;

3. Tailwind Usage Example

function Card() {
  return (
    <div className="p-4 bg-white shadow-lg rounded-lg">
      <h2 className="text-xl font-semibold text-gray-800">Title</h2>
      <p className="text-gray-600">This is a Tailwind styled card.</p>
    </div>
  );
}

Utility-first
Rapid layout styling
Less expressive for highly custom or conditionally styled components


4. Installing Emotion in React

Emotion provides two main APIs:

  • @emotion/react for css prop
  • @emotion/styled for styled components

Installation:

npm install @emotion/react @emotion/styled

5. Emotion Usage Example (Styled Components)

import styled from '@emotion/styled';

const Button = styled.button`
  background: #4f46e5;
  color: white;
  padding: 10px 16px;
  border-radius: 6px;
`;

function App() {
  return <Button>Emotion Styled Button</Button>;
}

6. Dynamic Styling with Emotion

Emotion supports conditional styling using props:

const Alert = styled.div`
  padding: 10px;
  color: ${props => (props.error ? 'red' : 'green')};
`;
<Alert error={true}>Something went wrong!</Alert>

Useful for reusable, variant-based components


7. Combining Tailwind & Emotion

Yes โ€” you can use both in a React project to combine utility-first styling with scoped dynamic styles.

Example:

import styled from '@emotion/styled';

const CustomBox = styled.div`
  @apply p-4 bg-blue-100 rounded-lg;
  color: #1e3a8a;
`;

But note: @apply only works in .css/.scss, not inside Emotion by default.

Recommended Combo:

  • Use Tailwind for layout, spacing, typography
  • Use Emotion for dynamic UI variants, complex styles, and component theming

Tailwind vs Emotion โ€“ Feature Comparison

FeatureTailwind CSSEmotion
Styling TypeUtility-first classesCSS-in-JS, styled components
CustomizationTheme config (config.js)Fully dynamic via props
Media QueriesBuilt-in (md:, lg:)Manual or via @media rules
ReusabilityClass-basedComponent-based
PerformanceFast with purgingSlight runtime overhead
ThemingVia configVia ThemeProvider

Best Practices

Use Tailwind for layout and responsive design
Use Emotion for dynamic styles and animation
Avoid overusing both tools in the same component
Organize Emotion styles in dedicated files
Enable JIT mode in Tailwind for smaller builds


Summary โ€“ Recap & Next Steps

Tailwind CSS and Emotion bring different philosophies to styling in React โ€” utility vs component-based. When used strategically, they can coexist to offer rapid UI development and powerful dynamic theming.

Key Takeaways:

  • Tailwind is great for layout, spacing, and atomic design
  • Emotion is perfect for styled components and dynamic styles
  • Use Tailwind for static UIs and Emotion for reusable patterns
  • Combine both with care for the best of both worlds

Real-World Relevance:
Modern teams at Shopify, Notion, and HashiCorp use combinations of Tailwind and CSS-in-JS to build scalable, performant UIs.


FAQ Section

Can I use Tailwind and Emotion together in React?
Yes. Use Tailwind for layout/utilities and Emotion for dynamic component styling and theming.


Does Emotion support themes like styled-components?
Absolutely. Use ThemeProvider from @emotion/react to pass theme tokens across your app.


Is Emotion faster than Tailwind?
Tailwind is faster at runtime because it generates static styles. Emotion adds some runtime overhead but is flexible for dynamic conditions.


Should I use Emotion or Tailwind for component libraries?
Use Emotion if your library requires component variants and themes. Use Tailwind if you prioritize utility classes and consistency.


Can I use media queries in Emotion?
Yes. You can write regular @media CSS rules inside styled components.


Share Now :
Share

๐ŸŽจ React Tailwind & Emotion Styling

Or Copy Link

CONTENTS
Scroll to Top