angular-tailwind
Angular + Tailwind CSS
Version: Tailwind CSS 4.x (2025) Tags: Tailwind CSS, Styling, Utility-first, CSS
References: Tailwind CSS • Angular Tailwind
API Changes
This section documents recent version-specific API changes.
-
NEW: Tailwind CSS v4 — New engine with improved performance source
-
NEW: @tailwindcss/vite — Native Vite support
-
NEW: CSS-first configuration — Configure Tailwind with CSS instead of config file
-
NEW: Angular 17+ support — Full compatibility with standalone components
Best Practices
- Install Tailwind CSS
npm install -D tailwindcss postcss autoprefixer
npx tailwindcss init
- Configure tailwind.config.js
/** @type {import('tailwindcss').Config} */
module.exports = {
content: [
"./src/**/*.{html,ts}",
],
theme: {
extend: {},
},
plugins: [],
}
- Add directives to styles
@tailwind base;
@tailwind components;
@tailwind utilities;
- Use Tailwind v4 with Angular
npm install tailwindcss @tailwindcss/vite
// vite.config.ts
import tailwindcss from '@tailwindcss/vite';
export default defineConfig({
plugins: [tailwindcss()],
});
@import "tailwindcss";
- Use utility classes in templates
@Component({
template: `
<div class="flex items-center justify-between p-4 bg-white shadow rounded-lg">
<h1 class="text-2xl font-bold text-gray-800">Title</h1>
<button class="px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600">
Click
</button>
</div>
`
})
export class CardComponent {}
- Use ngClass for conditional classes
@Component({
template: `
<div [ngClass]="isActive ? 'bg-blue-500' : 'bg-gray-200'">
Content
</div>
`
})
export class MyComponent {}
- Use class binding
@Component({
template: `
<div [class]="containerClasses">
Content
</div>
`
})
export class MyComponent {
containerClasses = 'p-4 bg-white rounded-lg shadow';
}
- Create custom components with Tailwind
@Component({
selector: 'app-button',
template: `
<button [class]="buttonClasses">
<ng-content></ng-content>
</button>
`
})
export class ButtonComponent {
@Input() variant: 'primary' | 'secondary' = 'primary';
get buttonClasses() {
const base = 'px-4 py-2 rounded font-medium transition';
const variants = {
primary: 'bg-blue-500 text-white hover:bg-blue-600',
secondary: 'bg-gray-200 text-gray-800 hover:bg-gray-300'
};
return `${base} ${this.variants[this.variant]}`;
}
}
- Use @apply for reusable styles
@layer components {
.btn-primary {
@apply px-4 py-2 bg-blue-500 text-white rounded hover:bg-blue-600;
}
.card {
@apply bg-white rounded-lg shadow p-4;
}
}
- Use theme customization
// tailwind.config.js
module.exports = {
theme: {
extend: {
colors: {
brand: {
50: '#f0f9ff',
500: '#0ea5e9',
900: '#0c4a6e',
}
}
}
}
}
- Use Dark mode
// tailwind.config.js
module.exports = {
darkMode: 'class',
}
@Component({
template: `
<div class="dark:bg-gray-900 dark:text-white">
Content
</div>
`
})
export class DarkComponent {}
More from oguzhan18/angular-ecosystem-skills
angular-animations
>-
137rxjs
ALWAYS use when working with RxJS Observables, operators, and reactive patterns in Angular applications.
135angular-material
ALWAYS use when working with Angular Material components, CDK, or Material Design in Angular applications.
131angular-security
ALWAYS use when working with Angular Security, XSS prevention, CSRF protection, Content Security Policy, or sanitization in Angular applications.
130angular-bootstrap
ALWAYS use when working with Angular Bootstrap, ng-bootstrap, Bootstrap components in Angular, or Bootstrap 5 integration.
129angular-services
ALWAYS use when working with Angular Services, @Injectable, dependency injection, or business logic services.
129