آموزش جامع استایلدهی در JSX و React با روشهای className، inline CSS با آبجکت، فایلهای CSS معمولی و معرفی CSS Modules و Tailwind
در JSX روشهای مختلفی برای استایلدهی به کامپوننتهای React وجود دارد که هر کدام کاربرد و مزایای خاص خود را دارند. در این آموزش، تمام روشهای رایج استایلدهی در React را به همراه مثالهای عملی بررسی میکنیم.
className به جای classدر HTML، برای اعمال کلاس CSS از صفت class استفاده میکنیم. اما در JSX، این صفت به className تغییر نام داده است. این کار به این دلیل است که class در زبان جاوااسکریپت یک کلمه کلیدی رزرو شده است.
مثال:
// HTML
// <div class="my-class">...</div>
// JSX
<div className="my-class">...</div>میتوان استایلهای CSS را مستقیماً در JSX با استفاده از ویژگی style اعمال کرد. مقدار style باید یک آبجکت جاوااسکریپت باشد.
نکات مهم:
font-size یا background-color)، حرف اول بخش دوم و تمام حروف بعدی آن باید بزرگ باشند (مثلاً fontSize یا backgroundColor).zIndex). برای مقادیر عددی که واحد دارند (مانند fontSize: 30px)، واحد را نیز به صورت رشته بنویسید.مثال:
// کد بالا به این صورت نوشته میشود:
<h1 style={{ fontSize: "30px", color: "red", zIndex: 2 }}>
این تگ H1 استایلدهی شده است
</h1>برای خوانایی بهتر و مدیریت آسانتر استایلها، میتوانید آنها را در یک آبجکت جاوااسکریپت ذخیره کرده و سپس آن آبجکت را به style پاس دهید:
function MyComponent() {
const headingStyles = {
fontSize: "30px",
color: "red",
fontWeight: "bold",
borderBottom: "2px solid blue"
};
return (
<h1 style={headingStyles}>
این تگ H1 با استایلهای ذخیره شده استایلدهی شده است
</h1>
);
}در React میتوانیم استایلها را به صورت داینامیک و شرطی تغییر دهیم.
function MyComponent() {
const isActive = true
return (
<h1
style={{
color: isActive ? "green" : "gray",
fontSize: "24px"
}}
>
وضعیت کاربر
</h1>
)
}✅ این ویژگی یکی از قدرتهای اصلی JSX برای ایجاد UI پویا است.
سادهترین روش، استفاده از فایلهای CSS جداگانه و import کردن آنها در کامپوننت است.
import "./App.css";
import "./components/Button.css";
function App() {
return <div className="app-container">محتوا</div>;
}⚠️ توجه: در این روش، استایلهای یک فایل CSS در تمام کامپوننتهای برنامه قابل دسترس هستند و ممکن است تداخل (Conflict) ایجاد کنند. بنابراین توصیه میشود از نامهای کلاس منحصربهفرد استفاده کنید.
CSS Modules راهکاری برای محدودسازی استایلها به همان کامپوننت است و از تداخل نامها جلوگیری میکند.
۱. ایجاد فایل CSS Module:
نام فایل باید به .module.css ختم شود، مانند Button.module.css.
/* Button.module.css */
.button {
background-color: blue;
color: white;
padding: 10px 20px;
border: none;
border-radius: 6px;
}۲. استفاده در کامپوننت:
import styles from "./Button.module.css";
function Button() {
return <button className={styles.button}>کلیک کن</button>;
}✅ استایلها به صورت خودکار اسکوپ (Scoped) میشوند و تداخلی ندارند.
Styled Components یک کتابخانه محبوب برای نوشتن CSS درون کامپوننتها با استفاده از تگهای برچسبگذاری شده (Tagged Templates) است.
npm install styled-componentsمثال:
import styled from "styled-components";
const Button = styled.button`
background-color: #6200ee;
color: white;
padding: 12px 24px;
border: none;
border-radius: 8px;
font-size: 16px;
cursor: pointer;
&:hover {
background-color: #3700b3;
}
`;
const Title = styled.h1`
font-size: 24px;
color: #333;
`;
function App() {
return (
<div>
<Title>سلام دنیا!</Title>
<Button>ورود</Button>
</div>
);
}✅ استایلها اسکوپ شده و قابلیت شرطسازی و تغییر تم به راحتی امکانپذیر است.
Tailwind CSS یک فریمورک utility-first است که با کلاسهای آماده، استایلدهی را بسیار سریع میکند.
npm install -D tailwindcss
npx tailwindcss initfunction Card() {
return (
<div className="max-w-sm rounded-lg shadow-lg p-6 bg-white">
<h2 className="text-2xl font-bold text-gray-800">عنوان کارت</h2>
<p className="text-gray-600 mt-2">توضیحات کارت</p>
<button className="mt-4 bg-blue-500 text-white px-4 py-2 rounded hover:bg-blue-600">
کلیک کن
</button>
</div>
);
}✅ سرعت توسعه بالا و استایلهای یکپارچه در کل پروژه.
| روش | مزایا | معایب |
|---|---|---|
| CSS معمولی | ساده، بدون نصب اضافی | تداخل نامها، عدم اسکوپ |
| CSS Modules | اسکوپ شده، ساده | نیاز به تنظیمات اولیه |
| Inline CSS | داینامیک، شرطیسازی آسان | عدم استفاده از پسودوکلاسها، حجم بالا |
| Styled Components | اسکوپ، شرطی، قوی | حجم باندل بیشتر، نیاز به نصب |
| Tailwind CSS | سرعت بالا، یکپارچه | کلاسهای زیاد، نیاز به یادگیری |
استایلدهی در JSX و React با روشهای متنوعی امکانپذیر است. از className ساده و اینلاین CSS گرفته تا CSS Modules، Styled Components و Tailwind CSS، هر کدام برای شرایط خاصی طراحی شدهاند. انتخاب روش مناسب به اندازه پروژه، نیازهای تیم و تجربه توسعهدهندگان بستگی دارد. با یادگیری این روشها، میتوانید کامپوننتهای زیبا، واکنشگرا و قابل نگهداری بسازید.