Alright, so you’re building a React app, and now you need to style it. Easy, right? Well, sort of. With so many ways to handle CSS in React, it can feel like wandering into a buffet with too many options—overwhelming but exciting. Let’s break it down so you can pick the best approach without losing your mind.
1. Inline Styling in React: The “Quick and Dirty” CSS in React Method
Inline styles in React are like throwing a band-aid on your styles—fast and functional, but not always the best long-term move. You define styles right in the style
attribute as a JavaScript object:
import React from 'react';
function App() {
return (
<div style={{ color: 'blue', fontSize: '20px' }}>
Hello, world!
</div>
);
}
export default App;
Pros
- Super quick for small tweaks
- Great for dynamic styling (like changing colors based on props)
Cons
- No pseudo-classes (
:hover
, etc.) or media queries - Gets messy fast if overused
- Styles aren’t reusable
Use this for one-off styles or tiny components, but for anything serious, keep reading.
2. Using Regular CSS Stylesheets in React: “The Old Reliable”
This is the classic method—create a .css
file, define your styles, and import it into your component. Nothing fancy, just good ol’ CSS.
Step 1: Create a CSS file (e.g., App.css
)
/* App.css */
.container {
color: blue;
font-size: 20px;
}
Step 2: Import it in your component
import React from 'react';
import './App.css';
function App() {
return (
<div className="container">
Hello, world!
</div>
);
}
export default App;
Pros
- Simple and familiar
- Supports all CSS features (animations, media queries, etc.)
Cons
- Global styles can easily clash
- No automatic scoping
Great for small projects, but things get messy when you scale. Which brings us to…
3. CSS Modules in React: “Scoped and Secure”
If global styles give you nightmares, CSS Modules are your new best friend. They scope styles to individual components, preventing clashes.
Step 1: Create a CSS Module file (e.g., App.module.css
)
/* App.module.css */
.container {
color: blue;
font-size: 20px;
}
Step 2: Import and use it in your component
import React from 'react';
import styles from './App.module.css';
function App() {
return (
<div className={styles.container}>
Hello, world!
</div>
);
}
export default App;
Pros
- Styles are scoped by default—no more conflicts!
- Works with all CSS features
Cons
- Slightly more setup
- Can feel a bit extra for small projects
For medium-to-large apps, CSS Modules are a solid choice.
4. Styled Components in React: “CSS Meets JavaScript”
Styled Components let you write CSS directly inside JavaScript files using template literals. It’s CSS-in-JS magic.
Step 1: Install Styled Components
npm install styled-components
Step 2: Create a styled component
import React from 'react';
import styled from 'styled-components';
const Container = styled.div`
color: blue;
font-size: 20px;
`;
function App() {
return (
<Container>
Hello, world!
</Container>
);
}
export default App;
Pros
- Styles are scoped, no conflicts
- Supports pseudo-classes and media queries
- Super flexible and dynamic
Cons
- Slight runtime overhead
- Might feel weird if you’re used to separate CSS files
Great for component-driven styling, especially in larger projects.
5. Tailwind CSS in React: “Utility-First Madness”
Tailwind CSS is all about utility classes—no custom CSS needed, just predefined class names to style everything.
Step 1: Install Tailwind CSS
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
Step 2: Configure Tailwind (add to tailwind.config.js
)
module.exports = {
content: ['./src/**/*.{js,jsx,ts,tsx}'],
theme: {
extend: {},
},
plugins: [],
};
Step 3: Use Tailwind in your component
import React from 'react';
import './index.css';
function App() {
return (
<div className="text-blue-500 text-xl">
Hello, world!
</div>
);
}
export default App;
Pros
- No need to write custom CSS
- Super fast styling workflow
Cons
- Class names can get long
- Learning curve if you’re used to traditional CSS
Perfect for teams that love utility-based styling and rapid development.
Which CSS Method Should You Use in Your React App?
- Small tweaks? Inline styles
- Simple projects? Regular CSS stylesheets
- Medium-sized apps? CSS Modules
- Component-heavy apps? Styled Components
- Rapid development? Tailwind CSS
Honestly, you’ll probably use a mix of these methods in different projects. Play around, experiment, and find what fits your workflow best.
Final Thoughts on CSS in React
CSS in React doesn’t have to be a headache. Whether you go old-school with stylesheets, modern with CSS-in-JS, or ultra-lean with Tailwind, there’s a method that’ll click with you. Try them out, mix and match, and most importantly—have fun building cool stuff! Check out this post on React Native if you’re into mobile dev.