ویژگی تصویر

استفاده از آیکون‌ها در CSS — راهنمای جامع

  /  CSS   /  استفاده از آیکون ها در CSS
بنر تبلیغاتی الف

آیکون‌ها جزئی اساسی از رابط کاربری وب هستند. انتخاب روش درست برای نمایش آیکون‌ها تأثیر مستقیم روی عملکرد، دسترس‌پذیری و قابلیت نگهداری پروژه دارد. در این مقاله روش‌های رایج، مزایا و معایب هر کدام، نکات بهینه‌سازی و مثال‌های عملی را بررسی می‌کنیم.

روش‌های متداول نمایش آیکون

  • فونت آیکون (Icon Fonts)
  • تصاویر رَستری (PNG/SVG as background-image)
  • آیکون‌های SVG درون‌خطی (Inline SVG)
  • استفاده از SVG sprite یا <symbol> و <use>
  • CSS mask و mask-image

مقایسه سریع

روشمزایامعایب
Icon Fontsحجم کم، تغییر رنگ با colorمشکلات دسترس‌پذیری، پیچیدگی در چند رنگی، رندرینگ متغیر
Inline SVGدسترس‌پذیری بهتر، قابلیت انیمیشن و چند رنگیممکن است حجم HTML را افزایش دهد (اما کش قابل استفاده)
SVG Spriteکاهش درخواست‌ها، قابل کش شدننیاز به مدیریت تگ‌های <symbol>

استفاده از فونت آیکون — مثال اولیه

/* CSS */.icon {
  font-family: "MyIconFont";
  speak: none;
  font-style: normal;
  font-weight: normal;
  font-variant: normal;
  text-transform: none;
  line-height: 1;
  display: inline-block;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

/* HTML */

این کد نشان می‌دهد چگونه از یک فونت آیکون محلی استفاده می‌شود. با این روش تغییر رنگ از طریق color ساده است. اما مشکلاتی مانند نقض دسترس‌پذیری (screen readers ممکن است کد را بخوانند) و عدم پشتیبانی از چند رنگ یا افکت‌های پیچیده وجود دارد.

نسخه بهبود یافته: افزودن دسترس‌پذیری

<span class="icon" aria-hidden="true"></span>
<span class="sr-only">نماد جستجو</span>

با aria-hidden="true" از خوانده شدن کاراکتر توسط خواننده صفحه جلوگیری می‌شود و متن توضیحی (مثلاً با کلاس sr-only) برای دسترس‌پذیری به کاربر ارائه می‌کنیم.

استفاده از Inline SVG — پیشنهاد برای مدرن بودن

<svg class="icon" width="24" height="24" viewBox="0 0 24 24" role="img" aria-labelledby="searchTitle">
  <title id="searchTitle">جستجو</title>
  <path d="M15.5 14h-.79l-.28-.27A6.471 6.471 0 0 0 16 9.5 6.5 6.5 0 1 0 9.5 16a6.471 6.471 0 0 0 4.23-1.57l.27.28v.79L20 21.5 21.5 20l-5.99-6z" fill="currentColor"/>
</svg>

استفاده از currentColor باعث می‌شود رنگ آیکون از رنگ متن گرفته شود و امکان تم‌دهی از طریق CSS ساده شود. همچنین با <title> و role="img" دسترس‌پذیری بهبود می‌یابد.

SVG sprite با <symbol> و <use>


<svg xmlns="http://www.w3.org/2000/svg">
  <symbol id="icon-search" viewBox="0 0 24 24">
    <path d="..." />
  </symbol>
</svg>


<svg class="icon"><use href="sprite.svg#icon-search"></use></svg>

این روش تعداد درخواست‌ها را کاهش می‌دهد و امکان کش شدن sprite را فراهم می‌کند. در برخی مرورگرها نیاز به پیش‌بارگذاری یا inline کردن فایل sprite برای جلوگیری از مشکلات CORS است.

نمونه: آیکون با ماسک برای تغییر رنگ دقیق

.icon-mask {
  width: 24px;
  height: 24px;
  background-color: currentColor;
  -webkit-mask: url('icons.svg#icon-heart') no-repeat center / contain;
  mask: url('icons.svg#icon-heart') no-repeat center / contain;
}

استفاده از CSS mask به شما اجازه می‌دهد با یک تصویر سیاه/سفید آیکون را رنگ‌آمیزی کنید. این روش برای آیکون‌های تک‌رنگ مناسب است ولی پشتیبانی در مرورگرهای قدیمی ممکن است محدود باشد.

انیمیشن و تعامل با CSS

.icon-hover {
  transition: transform 0.2s ease, color 0.2s ease;
  color: #333;
}
.icon-hover:hover {
  transform: scale(1.1);
  color: #e63946;
}

این قطعه به آیکون‌ها افکت hover نرم می‌دهد. اگر از SVG با currentColor استفاده کنید، تغییر رنگ به‌راحتی قابل کنترل است. برای انیمیشن‌های پیچیده‌تر از SMIL یا JS استفاده می‌شود، اما CSS در اغلب موارد کافی است.

نکات بهینه‌سازی و بهترین شیوه‌ها

  • برای آیکون‌های تک‌رنگ و پویا از Inline SVG یا currentColor استفاده کنید.
  • برای مجموعه بزرگ آیکون‌ها از SVG sprite بهره ببرید تا درخواست‌ها کم شود.
  • در صورت استفاده از فونت آیکون، متن جایگزین و aria-hidden را فراموش نکنید.
  • آیکون‌های قابل کلیک باید اندازه لمسی مناسب (حداقل 44×44 پیکسل) داشته باشند.
  • پرفورمنس: آیکون‌های کوچک و پرتکرار را inline کنید یا sprite بسازید تا لِی‌اوت کمتر تحت تأثیر قرار گیرد.
  • از CSS variables برای تم‌دهی و حالت‌های تاریک/روشن استفاده کنید: --icon-color.

مثال کامل: کامپوننت آیکون با CSS Variables و Inline SVG

<style>
.icon {
  width: 32px;
  height: 32px;
  color: var(--icon-color, #333);
  display: inline-block;
}
.icon svg {
  width: 100%;
  height: 100%;
  display: block;
}
</style>

<span class="icon" style="--icon-color: #1d4ed8">
  <svg viewBox="0 0 24 24" role="img" aria-hidden="false">
    <title>نوتیفیکیشن</title>
    <path d="..." fill="currentColor"></path>
  </svg>
</span>

در این نمونه از متغیر CSS برای تعیین رنگ استفاده شده است تا بتوان در سطح والد رنگ آیکون را به‌سادگی تغییر داد. همچنین ساختار HTML کوچک و قابل استفاده مجدد است.

کلام آخر: کدام روش را انتخاب کنیم؟

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

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

آیا این مطلب برای شما مفید بود ؟

خیر
بله
موضوعات شما در انجمن: