royalsite logo

15 فروردین 1404

css new features banner

10 ویژگی جدید و جذاب CSS در 2025 برای طراحی وب مدرن

در سال ۲۰۲۵، مجموعه‌ای از قابلیت‌های جدید در CSS معرفی شده که طراحی سایت را به سطحی فراتر از گذشته رسانده است. با ابزارهایی که کدنویسی را ساده‌تر، استایل‌دهی را دقیق‌تر و خلاقیت را افزایش می‌دهند، مسیر طراحی مدرن دچار تحول شده است. کنترل‌های پیشرفته برای طراحی ساختارها، انیمیشن‌ها و تنظیمات بصری باعث می‌شود طراحی‌ها زیباتر، روان‌تر و انعطاف‌پذیرتر از همیشه باشند.

کوئری‌های کانتینر (container@)

برخلاف مدیا کوئری‌ها که بر اساس اندازه کل صفحه عمل می‌کنند، کانتینر کوئری‌ها مستقیماً به کانتینر والد یک عنصر نگاه می‌کنند.

کوئری‌های کانتینر به شما این امکان را می‌دهند که استایل عناصر را بر اساس اندازه و شرایط کانتینرشان تغییر دهید.

ین ویژگی به شما اجازه می‌دهد در طراحی‌های پیچیده و با ساختار ماژولار، کنترل دقیق‌تری داشته باشید و استایل‌هایی بسازید که به‌خوبی با تغییرات داخلی یک کانتینر تطبیق پیدا کنند، بدون اینکه به ابعاد کلی صفحه متکی باشید.

.card {
container-type: inline-size;
}

@container (min-width: 400px) {
.card {
flex-direction: row;
}
}

در قطعه کد بالا اگر عرض کانتینر والد بزرگتر از 400px شود آیتم ها به صورت افقی در کنار هم قرار می‌گیرند.

سلکتور ()has:

سلکتور ()has: می‌تواند براساس انواع مختلف انتخاب‌کننده‌ها عمل کند، از جمله کلاس‌ها، آی‌دی‌ها، تگ‌ها، یا ترکیب آن‌ها. این انعطاف‌پذیری باعث می‌شود انتخاب دقیق‌تر و دینامیک‌تری داشته باشید.

به هر عنصر div که شامل فرزندی با کلاس my-class باشد رنگ پس‌زمینه آبی روشن اعمال می‌کند.//
div:has(.my-class) {
background-color: lightblue;
}
به هر عنصر section که شامل فرزندی با آی‌دی my-id باشد یک کادر قرمز خط‌چین اضافه می‌کند.//
section:has(#my-id) {
border: 3px dashed red;
}
به هر article که شامل حداقل یک تگ p باشد استایل می‌دهد.//
article:has(p) {
font-style: italic;
}
این کد به هر ul که شامل li با کلاس active باشد متن رنگ سبز می‌دهد.//
ul:has(li.active) {
color: green;
}

📌 توجه کنید که اگر شرط has برقرار باشد، استایل به کل تگی که توسط سلکتور انتخاب شده اعمال می‌شود.

انیمیشن‌هایی مبتنی بر اسکرول (animation-timeline)

با استفاده از این ویژگی، می‌توانید تعیین کنید که یک انیمیشن چگونه به یک تایملاین خاص متصل شود. این تایملاین می‌تواند از نوع ساده باشد یا تایملاین‌های پیچیده‌تر که به اسکرول وابسته اند.

با استفاده از ویژگی scroll-timeline در CSS می‌توانید انیمیشن‌های خود را کاملاً به حرکات اسکرول وابسته کنید، بدون اینکه نیاز به جاوااسکریپت یا API‌هایی مثل IntersectionObserver داشته باشید.

  • ()scroll : با اسکرول کاربر انیمیشن به طور روان اجرا می‌شود
  • ()view : تعیین می‌کند که انیمیشن یک عنصر فقط زمانی اجرا شود که آن عنصر در محدوده دید صفحه قرار بگیرد یا از آن خارج شود.
.animation-timeline{
animation: fadeIn-40 linear;
animation-timeline: view();
}

@keyframes fadeIn-40{
0%{
opacity: 0;
}40%{
opacity: 1;
}
}

این کد باعث می‌شود عنصری که کلاس animation-timeline دارد هنگام اسکرول صفحه به آرامی ظاهر شود. در ابتدا نامرئی است و وقتی حدود ۴۰٪ از آن در صفحه نمایش دیده شد، کاملاً قابل مشاهده می‌شود. برخلاف انیمیشن‌های معمولی که با زمان کار می‌کنند، این انیمیشن با حرکت اسکرول شما کنترل می‌شود - هرچه بیشتر پایین بیایید، المان بیشتر خودش را نشان می‌دهد.

subgrid

ویژگی subgrid در CSS به زبان ساده به شما اجازه می‌دهد که یک گرید داخلی داشته باشید که اندازه و خطوط آن دقیقاً از گرید اصلی پیروی کند.

قدرت subgrid در موقعیت‌های خاص و پیچیده مشخص می‌شود، جایی که هماهنگی دقیق میان گرید اصلی و گرید داخلی لازم است.

فرض کنید شما یک گرید کلی دارید که ابعادش به مرورگر و دستگاه‌های مختلف وابسته است. اگر یک گرید داخلی (مانند جداول یا بخش‌های کوچک‌تر) هم بخواهد کاملاً از همین تنظیمات استفاده کند، بدون نیاز به تعریف دوباره‌ی ابعاد و چیدمان در تمام مدیاکوئری‌ها ویژگی subgrid این کار را به سادگی و به صورت خودکار انجام می‌دهد.

.grid {
display: grid;
grid-template-columns: 1fr 2fr 1fr; /* سه ستون با اندازه‌های مختلف */
gap: 10px;
}

.subgrid {
display: grid;
grid-template-columns: subgrid; /* از ستون‌های گرید اصلی استفاده می‌کند */
gap: 5px;
}

@media (max-width: 768px) {
.grid {
grid-template-columns: 1fr; /* تغییر چیدمان گرید اصلی */
}
/* نیازی به تنظیم دوباره برای .subgrid نیست، خودش هماهنگ می‌شود */
}

()color-mix

این تابع جدید به طراحان اجازه می‌دهد که رنگ‌ها را ترکیب کنند و جلوه‌های بصری جذاب‌تری ایجاد کنند.

کاربرد اساسی

اساسی ترین کاربرد آن این است که به جای ده‌ها متغیر رنگ مختلف، فقط با تغییر یه رنگ پایه می‌تونید کل پالت رنگ‌های سایت رو به‌روز کنید.

مثال : فرض کنید که پالت رنگی وبسایت شما سه رنگ آبی، آبی تیره و آبی روشن است.

آن را به صورت زیر تعریف می‌کنیم :

:root {
--main-color: #3498db;
--light: color-mix(in srgb, var(--main-color) 70%, white 30%);
--dark: color-mix(in srgb, var(--main-color) 70%, black 30%);
}

حالا اگر بخواهیم پالت رنگی رو به هر رنگ دیگه‌ای تبدیل کنیم فقط کافیه main-color-- رو تغییر بدیم تا light-- و dark-- اتوماتیک تغییر می‌کنند.

:root {
--main-color: #3498db;
--light: (in srgb, var(--main-color) 70%, white 30%);
--dark: (in srgb, var(--main-color) 70%, black 30%);
}
@media (prefers-color-scheme: dark) {
:root { --main-color: #FF0000; }
}

accent-color

ویژگی accent-color در CSS به شما اجازه می‌دهد که رنگ کنترل‌های رابط کاربری مانند چک‌باکس‌ها، دکمه‌های رادیویی، اسلایدرها و نوار پیشرفت را سفارشی‌سازی کنید.

قبل از معرفی ویژگی accent-color نیز امکان تغییر رنگ برخی کنترل‌های فرم مانند چک‌باکس‌ها و دکمه‌های رادیویی وجود داشت، اما این کار دشوارتر بود و نیازمند راه‌حل‌های پیچیده‌تری بود.

با معرفی این ویژگی، طراحان اکنون می‌توانند فقط با یک خط کد رنگ کنترل‌ها را تغییر دهند، بدون اینکه استایل پیش‌فرض یا رفتار آن‌ها مختل شود.

input[type="checkbox"] {
accent-color: red; /* رنگ چک‌باکس قرمز */
}

input[type="radio"] {
accent-color: blue; /* رنگ دکمه رادیویی آبی */
}

این ویژگی برای بهبود تجربه کاربری و هماهنگی بصری در طراحی سایت بسیار مفید است. به عنوان مثال، اگر سایت شما دارای تم خاصی باشد، می‌توانید رنگ کنترل‌ها را با آن تم هماهنگ کنید.

پراپرتی scope@

فرض کنید شما یک صفحه با چندین بخش دارید، و می‌خواهید استایل‌های هر بخش فقط در همان بخش اعمال شوند، بدون اینکه روی بخش‌های دیگر تاثیر بگذارند. scope@ به شما اجازه می‌دهد که این کار را به راحتی انجام دهید.

مزیت اصلی : نیاز به استفاده از نام‌های خاص و پیچیده برای کلاس‌ها کمتر می‌شود و مدیریت کدها ساده‌تر است.

قابلیت خوانایی : کدها منظم‌تر و خواناتر می‌شوند، زیرا هر محدوده استایل مشخص و واضح است.

@scope (.section1) {
h1 {
color: blue;
}
p {
font-style: italic;
}
}

@scope (.section2) {
h1 {
color: red;
}
p {
font-style: normal;
}
}

استایل‌های تعریف‌شده در محدوده هر scope فقط بر عناصر مرتبط با کلاس یا انتخابگر ورودی همان scope اعمال می‌شوند.

📌 استایل‌های تحت @scope هیچ تاثیری روی عناصر خارج از محدوده تعیین‌شده ندارند.

ویژگی balanced text

ویژگی balance در CSS برای بهبود خوانایی متن به کار می‌رود، به‌ویژه زمانی که متن شامل خطوط طولانی یا چند سطر باشد. این ویژگی تلاش می‌کند تا متن را به‌طور یکنواخت بین سطرها تقسیم کند، به‌گونه‌ای که تعادل بصری بیشتری ایجاد شود.

به زبان ساده : فرض کنید شما یک عنوان دارید که در دو خط شکسته می‌شود. معمولاً مرورگر ممکن است خط اول طولانی‌تر و خط دوم کوتاه‌تر باشد. اما با استفاده از balance مرورگر سعی می‌کند طول دو خط را یکنواخت کند.

.balanced-text {
text-wrap: balance;
}

overscroll-behavior

ویژگی overscroll-behavior در CSS به شما اجازه می‌دهد که رفتار اسکرول را در هنگام رسیدن به انتهای یک اسکرول‌کانتینر کنترل کنید. این ویژگی معمولاً برای جلوگیری از رفتارهای پیش‌فرض مرورگر، مثل کشیدن صفحه، بازگشت به صفحه قبلی یا رفرش کردن با کشیدن که در دستگاه‌های لمسی، استفاده می‌شود.

مزیت اصلی : جلوگیری از رفرش شدن سایت های تک صفحه‌ای (Single Page Application).

.overscroll{
overscroll-behavior: contain; /* جلوگیری از اسکرول کل صفحه */
}

مقادیر دریافتی

  • auto : رفتار پیش‌فرض مرورگر
  • contain : جلوگیری از اسکرول‌های ناخواسته
  • auto : تمام رفتارهای overscroll را غیرفعال می‌کند

Content Visibility

این ویژگی به مرورگر اجازه می‌دهد که رندر محتوای خارج از دید کاربر را به تأخیر بیندازد، که می‌تواند باعث بهبود عملکرد صفحه شود.

.lazy-content {
content-visibility: auto; /* رندر فقط در هنگام نیاز */
}

مقادیر دریافتی

  • visible : محتوای عنصر همیشه رندر می‌شود (پیش‌فرض)
  • hidden : محتوا رندر نمی‌شود تا وقتی که وارد صفحه نمایش شود
  • auto : مرورگر بر اساس نیاز تصمیم می‌گیرد چه زمانی محتوا را رندر کند

جدول پشتیبانی مرورگرها

ویژگی CSSChromeEdgeFirefoxSafari
Content Visibility85+85+15.4+
Overscroll Behavior63+79+59+11+
Accent Color93+93+92+15.4+
Color Mix111+111+
@scopeدرحال توسعهدرحال توسعهدرحال توسعهدرحال توسعه
()has:105+105+15.4+
@container105+105+16+
Text Balance112+112+
Subgrid71+16+
Animation Timelineدرحال توسعهدرحال توسعهدرحال توسعهدرحال توسعه
royalsite admin

نوشته شده توسط متین قاسمی مدیر آکادمی رویال سایت

Senior Frontend Developer

Senior Backend Developer

SEO Webmaster

Data Analyst

با بیش از سه سال تجربه طراحی سایت

instagram icon
telegram icon
sorush messenger icon
igap messenger icon
Linkedin platform