Using Tailwind CSS and Bootstrap in a React Project
This guide will walk you through setting up a React project where you can test and use both Tailwind CSS and Bootstrap.
Setup Instructions
Create a New React Project
First, create a new React project using Vite.
npm create vite@latest react-tailwind-and-bootstrap-intro --template react
cd react-tailwind-and-bootstrap-intro
- Install Tailwind and its dependencies:
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init -p
- Add Tailwind’s @tailwind directives to your CSS file.
In src/index.css, add:
@tailwind base;
@tailwind components;
@tailwind utilities;
- Configure your tailwind.config.js file to scan your React files:
// tailwind.config.js
module.exports = {
content: [
"./index.html",
"./src/**/*.{js,jsx,ts,tsx}",
],
theme: {
extend: {},
},
plugins: [],
}
1. Install Bootstrap
Install Bootstrap via npm:
npm install react-bootstrap bootstrap
Then, import Bootstrap’s CSS in your main.js
or App.jsx
file:
// src/main.js or src/App.jsx
import 'bootstrap/dist/css/bootstrap.min.css';
Create Components Using Tailwind and Bootstrap
Now that both libraries are set up, you can create separate components styled with each one. Here are examples of simple card components:
Tailwind Component
// src/TailwindCard.jsx
import React from 'react';
const TailwindCard = () => {
return (
<div className="max-w-sm rounded overflow-hidden shadow-lg p-6 bg-white">
<h2 className="text-xl font-bold mb-2">Tailwind Card</h2>
<p className="text-gray-700 text-base mb-4">
This is a simple card component styled with Tailwind CSS.
</p>
<button className="bg-blue-500 hover:bg-blue-700 text-white font-bold py-2 px-4 rounded">
Learn More
</button>
</div>
);
};
export default TailwindCard;
Bootstrap Component
// src/BootstrapCard.jsx
import React from 'react';
const BootstrapCard = () => {
return (
<div className="card" style={{ width: '18rem' }}>
<div className="card-body">
<h5 className="card-title">Bootstrap Card</h5>
<p className="card-text">
This is a simple card component styled with Bootstrap.
</p>
<a href="#" className="btn btn-primary">
Learn More
</a>
</div>
</div>
);
};
export default BootstrapCard;
Using Both Components in App.jsx
// src/App.jsx
import TailwindCard from './TailwindCard';
import BootstrapCard from './BootstrapCard';
function App() {
return (
<div className="App">
<h1 className="text-center my-4">Testing Tailwind and Bootstrap in React</h1>
<div className="flex justify-center gap-4">
<TailwindCard />
<BootstrapCard />
</div>
</div>
);
}
export default App;
Additional Resources
Benefits and Pitfalls
Tailwind
Benefits:
- Utility-First Approach: Tailwind provides low-level utility classes that allow for highly customizable designs. This approach gives developers precise control over styling without needing to write custom CSS.
- No Predefined Components: Tailwind doesn’t include predefined components, which makes it highly flexible for custom designs. You build from scratch with utility classes, so each component can look exactly how you want.
- Responsive Design Made Easy: Tailwind’s responsive utilities (sm:, md:, lg:, etc.) allow you to style components for different screen sizes right in the HTML, streamlining responsive design.
- Smaller Final Bundle Size: Tailwind’s “purge” feature removes unused CSS classes, resulting in a leaner final CSS file compared to frameworks with a large set of predefined styles, like Bootstrap.
Pitfalls:
- Steeper Learning Curve: Tailwind’s utility-first approach can be difficult to learn initially, as it requires memorizing numerous utility classes and understanding how they combine to create styles.
- Verbose Code: Because you apply all styling directly to your HTML/JSX, Tailwind can make code more verbose and harder to read, especially for complex designs.
- Consistency Challenges: Since Tailwind doesn’t enforce component styles, it’s easy for different parts of a project to look inconsistent without a design system or clear guidelines.
Bootstrap
Benefits:
- Predefined Components: Bootstrap comes with a large set of pre-styled components (buttons, cards, modals, etc.), which makes it quick to set up common UI elements without writing custom styles.
- Consistency Out of the Box: With its standardized styles, Bootstrap helps ensure a consistent look and feel across your app, which is especially useful in team environments or for rapid prototyping.
- Ease of Learning: Bootstrap is often easier for beginners to pick up due to its component-based approach and familiar class names for styling (e.g., btn, card, navbar).
- Widespread Support and Documentation: Bootstrap is one of the most popular CSS frameworks, so it has extensive documentation, strong community support, and many third-party themes available.
Pitfalls:
- Limited Customizability: Customizing Bootstrap can be challenging if you need a unique design, as it’s based on a specific design philosophy. Overriding default styles can lead to a lot of custom CSS, potentially reducing the benefits of using Bootstrap.
- Larger Bundle Size: If you don’t use many of Bootstrap’s predefined components, your final CSS bundle can be bloated with unused styles, which can impact performance.
3.“Bootstrap Look”: Bootstrap’s default styles are widely recognized, which can make applications look similar to others that use it unless additional customization is done.