استفاده از @import و @media در CSS
در توسعه وب مدرن، مدیریت بارگذاری استایلها و پاسخدهی به اندازه صفحه (responsive) دو موضوع کلیدی هستند. در این مقاله بهصورت کاربردی و عمیق به @import و @media در CSS میپردازیم: نحو، کاربردها، مشکلات عملکردی و بهترین روشها برای طراحی واکنشگرا.
مبانی @import
دستور @import در CSS اجازه میدهد یک فایل CSS داخل فایل CSS دیگر بارگذاری شود. نحو پایهای آن به شکل زیر است:
@import url("theme.css");
@import "print.css" print;
در این مثال، فایل theme.css قبل از ادامهٔ پردازش فایل فعلی وارد میشود و print.css فقط برای مدیای چاپ بارگذاری خواهد شد.
نکات مهم دربارهٔ @import:
- @import باید قبل از هر قانون CSS دیگری قرار گیرد (بهجز @charset).
- در گذشته هر @import میتوانست موجب تاخیر رندر شود چون بارگذاری آن موازی با HTML انجام نمیشد و میتوانست request chaining ایجاد کند.
- میتوان از شرط رسانهای در @import استفاده کرد: @import url(“mobile.css”) screen and (max-width: 600px);
مثال عملی: @import با شرط رسانه
@import url("mobile.css") screen and (max-width: 600px);
body { font-family: system-ui, sans-serif; }
توضیح: این کد فایل mobile.css را تنها زمانی بارگذاری میکند که مرورگر از نوع screen باشد و عرض صفحه کمتر یا مساوی 600px باشد. این روش ساده اما میتواند در عمل بهینه نباشد چون مرورگرها گاهی همه @importها را بررسی میکنند؛ پس از link با media attribute استفاده معمولاً بهتر است.
@import یا <link> — کدام بهتر است؟
| ویژگی | @import | <link rel=”stylesheet”> |
|---|---|---|
| قابلیت شرط رسانه | دارد | دارد (media attribute) |
| عملکرد (performance) | معمولاً ضعیفتر | بهتر و قابل کنترلتر |
| اولویت در cascade | اثر مشابه اما باید در بالای فایل باشد | معمولاً توصیهشده |
نتیجهگیری: برای بارگذاری استایلها در سطح HTML و بهینهسازی عملکرد، استفاده از <link rel=”stylesheet”> با attribute مناسب (مانند media یا preload) معمولاً بهتر است. @import برای modular کردن فایلهای CSS در فرآیند توسعه (مثلاً در محیطهای ساده یا برای فایلهای چاپ) کاربردی است، اما باید با احتیاط استفاده شود.
مبانی @media (مدیا کوئری)
@media یکی از ابزارهای اصلی برای طراحی واکنشگراست. با آن میتوانید قوانین CSS را بر اساس ویژگیهای دستگاه یا اندازهٔ viewport فعال کنید.
@media (max-width: 768px) {
.container { padding: 16px; }
}
توضیح: این مدیا کوئری زمانی اعمال میشود که عرض پنجرهٔ مرورگر 768px یا کمتر باشد. در نتیجه کلاس .container برای صفحات موبایل تغییر padding خواهد داشت.
رویکردهای Mobile-first vs Desktop-first
- Mobile-first: سبکهای پایه برای موبایل نوشته میشوند و سپس با @media (min-width: …) برای اندازههای بزرگتر تغییر داده میشوند. این رویکرد معمولا بهتر برای عملکرد و بهینهسازی است.
- Desktop-first: سبکهای پایه برای دسکتاپ و سپس با @media (max-width: …) برای کوچکترها اصلاح میشوند. این روش ممکن است منجر به بارگذاری بیشتر استایلها در موبایل شود.
مثال کامل: طراحی واکنشگرا به سبک mobile-first
/* base styles (mobile-first) */.container {
max-width: 100%;
padding: 12px;
font-size: 16px;
}
/* tablet and up */@media (min-width: 600px) {
.container { max-width: 720px; padding: 20px; font-size: 18px; }
}
/* desktop and up */@media (min-width: 1024px) {
.container { max-width: 1100px; padding: 24px; font-size: 20px; }
}
توضیح: این مثال سه مرحلهٔ اصلی را نشان میدهد: سبک پایه برای موبایل، سپس برای تبلت و در نهایت برای دسکتاپ. با mobile-first، مرورگر تنها قوانین لازم را اعمال میکند و از overrides کمتر و cascade منطقیتر بهره میبریم.
ویژگیهای مدیا پیشرفته و دسترسی
- prefers-color-scheme: برای حالت تاریک یا روشن سیستم کاربر
- prefers-reduced-motion: برای احترام به کاربرانی که حرکت کم را ترجیح میدهند
- resolution و device-pixel-ratio: برای کنترل تصاویر و استایل در نمایشگرهای با تراکم پیکسلی بالا
@media (prefers-color-scheme: dark) {
body { background: #111; color: #eee; }
}
@media (prefers-reduced-motion: reduce) {
.carousel { animation: none; }
}
توضیح: با این مدیا کوئریها میتوانید تجربهٔ دسترسپذیرتر و سازگارتر با تنظیمات کاربر فراهم کنید؛ مثلاً حالت تاریک اتوماتیک یا غیرفعال کردن انیمیشن برای کاربرانی که حرکت را نامطلوب میدانند.
ترکیب @import و @media — چه زمانی و چگونه
گاهی نیاز است فایلهای موضوعی یا فایلهای مخصوص چاپ را جدا نگه دارید:
@import url("print.css") print;
@import url("theme-dark.css") (prefers-color-scheme: dark);
توضیح: این مثالها نشان میدهند که @import میتواند شرطهای مدیایی را هم بپذیرد. اما به خاطر داشته باشید که بارگذاری این فایلها ممکن است رفتار متفاوتی در مرورگرها داشته باشد و ممکن است link با media attribute و preload کنترل بهتری بدهد.
بهینهسازی و بهترین شیوهها
- برای فایلهای اصلی CSS از <link rel=”stylesheet”> استفاده کنید تا مرورگرها بتوانند آنها را موازی دانلود کنند.
- فایلهای بحرانی (Critical CSS) را inline کنید تا صفحه سریعتر رندر اولیه داشته باشد.
- از media attribute در <link> برای بارگذاری مشروط استفاده کنید: <link rel=”stylesheet” href=”print.css” media=”print”>.
- اگر از @import استفاده میکنید، همهٔ @importها را در ابتدای فایل قرار دهید و تعداد آنها را کم کنید تا از تشکیل request chain جلوگیری شود.
- در پروژههای بزرگ از bundling و کَشینگ و ابزارهایی مانند webpack یا PostCSS استفاده کنید تا تعداد فایلها و درخواستها کاهش یابد.
نتیجهگیری و راهنمای عملی
در عمل، برای پروژههای حرفهای توصیه میشود:
- برای بارگذاری اصلی استایلها از <link> استفاده کنید و از media attribute بهره ببرید.
- برای جداسازی منطقی فایلها در محیط توسعه یا برای فایلهای خاص مانند print یا theme، @import میتواند مفید باشد اما با آگاهی از محدودیتهای عملکردی.
- برای طراحی واکنشگرا، از رویکرد mobile-first و @media با min-width استفاده کنید و از مدیاهای دسترسی مانند prefers-reduced-motion و prefers-color-scheme غافل نشوید.
با رعایت نکات عملکردی و دسترسی، ترکیب درست @import و @media میتواند مدیریت استایلها را آسان کند؛ اما همیشه انتخاب بین عملکرد و راحتی توسعه را با توجه به نیاز پروژه بسنجید.
آیا این مطلب برای شما مفید بود ؟




