با این راهنمای جامع، حالت تاریک را در وبسایت خود پیادهسازی کنید. درباره کوئریهای مدیا در CSS، دکمههای جاوا اسکریپت، ملاحظات دسترسیپذیری و بهترین شیوهها برای یک تجربه کاربری روان بیاموزید.
پیادهسازی حالت تاریک: راهنمای جامع با CSS و جاوا اسکریپت
حالت تاریک به طور فزایندهای محبوب شده است و تجربه دیداری راحتتری را بهویژه در محیطهای کمنور ارائه میدهد. این راهنما یک مرور جامع از نحوه پیادهسازی حالت تاریک در وبسایت شما با استفاده از CSS و جاوا اسکریپت ارائه میدهد تا یک تجربه کاربری روان و قابل دسترس برای مخاطبان جهانی تضمین شود.
چرا حالت تاریک را پیادهسازی کنیم؟
چندین دلیل قانعکننده برای در نظر گرفتن پیادهسازی حالت تاریک وجود دارد:
- بهبود تجربه کاربری: بسیاری از کاربران حالت تاریک را برای چشمها راحتتر میدانند، زیرا خستگی چشم را کاهش میدهد، بهویژه هنگام وبگردی در شب یا در محیطهای کمنور. این ویژگی به مخاطبان جهانی با عادات مختلف استفاده از صفحه نمایش و شرایط نوری متفاوت پاسخ میدهد.
- دسترسیپذیری: حالت تاریک میتواند دسترسیپذیری را برای کاربرانی که دارای اختلالات بینایی یا حساسیت به نور هستند، بهبود بخشد. با ارائه یک گزینه با کنتراست بالا، وبسایت خود را فراگیرتر میکنید.
- عمر باتری: در دستگاههای دارای صفحه نمایش OLED یا AMOLED، حالت تاریک میتواند مصرف انرژی را کاهش داده و عمر باتری را افزایش دهد. این امر بهویژه برای کاربران موبایل در مناطقی که دسترسی محدودی به زیرساختهای شارژ دارند، اهمیت دارد.
- روند طراحی مدرن: حالت تاریک یک روند طراحی محبوب است و پیادهسازی آن میتواند وبسایت شما را مدرنتر و جذابتر نشان دهد. این امر درک برند و تعامل کاربر را افزایش میدهد.
روشهای پیادهسازی حالت تاریک
چندین رویکرد برای پیادهسازی حالت تاریک وجود دارد که هر کدام مزایا و معایب خود را دارند. ما متداولترین روشها را بررسی خواهیم کرد:
- کوئریهای مدیا در CSS (
prefers-color-scheme
): این روش به طور خودکار طرح رنگی ترجیحی کاربر را بر اساس تنظیمات سیستم عامل او تشخیص میدهد. - دکمه جاوا اسکریپت: این روش یک دکمه دستی (مانند یک سوئیچ یا دکمه) فراهم میکند که به کاربران اجازه میدهد بین حالت روشن و تاریک جابجا شوند.
- ترکیب کوئریهای مدیا و جاوا اسکریپت: این رویکرد مزایای هر دو روش را ترکیب میکند، تشخیص خودکار را فراهم کرده و در عین حال به کاربران اجازه میدهد تا تنظیمات سیستم را نادیده بگیرند.
۱. پیادهسازی حالت تاریک با کوئریهای مدیا در CSS
کوئری مدیا prefers-color-scheme
در CSS به شما امکان میدهد تا طرح رنگی ترجیحی کاربر را تشخیص داده و استایلهای متفاوتی را بر اساس آن اعمال کنید. این سادهترین و کارآمدترین روش برای پیادهسازی حالت تاریک برای کاربرانی است که قبلاً تنظیمات سیستم خود را مشخص کردهاند.
مثال کد
CSS زیر را به فایل استایل خود اضافه کنید:
/* تم پیشفرض (روشن) */
body {
background-color: #fff;
color: #000;
}
/* تم تاریک */
@media (prefers-color-scheme: dark) {
body {
background-color: #222;
color: #fff;
}
/* تنظیم عناصر دیگر در صورت نیاز */
h1, h2, h3 {
color: #ddd;
}
a {
color: #8ab4f8;
}
}
توضیح:
- بخش اول CSS استایلهای تم پیشفرض (روشن) را تعریف میکند.
- بخش
@media (prefers-color-scheme: dark)
استایلها را فقط زمانی اعمال میکند که سیستم کاربر روی حالت تاریک تنظیم شده باشد. - درون بخش
@media
، میتوانید استایلهای حالت تاریک را برای عناصر مختلف مانند پسزمینه بدنه و رنگ متن، عناوین و لینکها تعریف کنید.
مزایا
- تشخیص خودکار: مرورگر به طور خودکار ترجیح کاربر را تشخیص میدهد و تجربهای روان را فراهم میکند.
- پیادهسازی ساده: این روش به حداقل کد نیاز دارد و پیادهسازی آن آسان است.
- عملکرد: کوئریهای مدیا در CSS به طور کارآمد توسط مرورگر پردازش میشوند.
معایب
- کنترل محدود: کاربران نمیتوانند به صورت دستی بین حالت روشن و تاریک در وبسایت شما جابجا شوند.
- وابستگی به تنظیمات سیستم: ظاهر وبسایت کاملاً به تنظیمات سیستم کاربر بستگی دارد، که ممکن است از آن آگاه نباشند یا نتوانند آن را تغییر دهند.
۲. پیادهسازی حالت تاریک با دکمه جاوا اسکریپت
استفاده از یک دکمه جاوا اسکریپت به کاربران یک سوئیچ دستی برای کنترل تم وبسایت میدهد. این به کاربران کنترل بیشتری میدهد و به آنها اجازه میدهد تا تنظیمات سیستم خود را نادیده بگیرند. این رویکرد برای پاسخگویی به کاربران در دستگاهها و پلتفرمهای مختلفی که ممکن است به طور مداوم از تنظیمات حالت تاریک سراسری پشتیبانی نکنند یا آن را نمایش ندهند، حیاتی است.
ساختار HTML
ابتدا، یک عنصر دکمه را به HTML خود اضافه کنید:
<label class="switch">
<input type="checkbox" id="darkModeToggle">
<span class="slider round"></span>
</label>
این یک سوئیچ ساده با استفاده از یک چکباکس و مقداری استایل سفارشی CSS ایجاد میکند.
استایلدهی CSS (اختیاری)
شما میتوانید سوئیچ را با استفاده از CSS استایلدهی کنید. در اینجا یک مثال آورده شده است:
.switch {
position: relative;
display: inline-block;
width: 60px;
height: 34px;
}
.switch input {
opacity: 0;
width: 0;
height: 0;
}
.slider {
position: absolute;
cursor: pointer;
top: 0;
left: 0;
right: 0;
bottom: 0;
background-color: #ccc;
-webkit-transition: .4s;
transition: .4s;
}
.slider:before {
position: absolute;
content: "";
height: 26px;
width: 26px;
left: 4px;
bottom: 4px;
background-color: white;
-webkit-transition: .4s;
transition: .4s;
}
input:checked + .slider {
background-color: #2196F3;
}
input:focus + .slider {
box-shadow: 0 0 1px #2196F3;
}
input:checked + .slider:before {
-webkit-transform: translateX(26px);
-ms-transform: translateX(26px);
transform: translateX(26px);
}
/* اسلایدرهای گرد */
.slider.round {
border-radius: 34px;
}
.slider.round:before {
border-radius: 50%;
}
کد جاوا اسکریپت
اکنون، کد جاوا اسکریپت زیر را برای مدیریت عملکرد دکمه اضافه کنید:
const darkModeToggle = document.getElementById('darkModeToggle');
const body = document.body;
// تابع برای تغییر حالت تاریک
function toggleDarkMode() {
body.classList.toggle('dark-mode');
// ذخیره ترجیح کاربر در localStorage
if (body.classList.contains('dark-mode')) {
localStorage.setItem('darkMode', 'enabled');
} else {
localStorage.setItem('darkMode', 'disabled');
}
}
// بررسی localStorage برای ترجیح ذخیره شده
if (localStorage.getItem('darkMode') === 'enabled') {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
}
// اضافه کردن event listener به دکمه
darkModeToggle.addEventListener('change', toggleDarkMode);
توضیح:
- کد، عنصر دکمه و عنصر بدنه (body) را بازیابی میکند.
- تابع
toggleDarkMode
کلاسdark-mode
را به عنصر بدنه اضافه یا از آن حذف میکند. - کد از
localStorage
برای ذخیره ترجیح کاربر استفاده میکند تا در جلسات مختلف باقی بماند. - کد هنگام بارگذاری صفحه،
localStorage
را بررسی میکند تا ترجیح ذخیره شده را اعمال کند. - یک event listener به دکمه اضافه میشود تا با کلیک روی آن، تابع
toggleDarkMode
فراخوانی شود.
استایلدهی CSS برای حالت تاریک (با استفاده از کلاس)
CSS خود را بهروزرسانی کنید تا از کلاس dark-mode
برای اعمال استایلهای تم تاریک استفاده کند:
/* تم پیشفرض (روشن) */
body {
background-color: #fff;
color: #000;
}
/* تم تاریک */
body.dark-mode {
background-color: #222;
color: #fff;
}
body.dark-mode h1, body.dark-mode h2, body.dark-mode h3 {
color: #ddd;
}
body.dark-mode a {
color: #8ab4f8;
}
مزایا
- کنترل کاربر: کاربران میتوانند به صورت دستی بین حالت روشن و تاریک در وبسایت شما جابجا شوند.
- پایداری: ترجیح کاربر با استفاده از
localStorage
ذخیره میشود و در جلسات مختلف باقی میماند.
معایب
- پیادهسازی پیچیدهتر: این روش نسبت به استفاده تنها از کوئریهای مدیا در CSS به کد بیشتری نیاز دارد.
- وابستگی به جاوا اسکریپت: عملکرد دکمه به فعال بودن جاوا اسکریپت در مرورگر کاربر بستگی دارد.
۳. ترکیب کوئریهای مدیا و جاوا اسکریپت
بهترین رویکرد اغلب ترکیب کوئریهای مدیا در CSS و یک دکمه جاوا اسکریپت است. این روش بهترینهای هر دو دنیا را فراهم میکند: تشخیص خودکار طرح رنگی ترجیحی کاربر، و در عین حال اجازه میدهد کاربران به صورت دستی تنظیمات سیستم را نادیده بگیرند. این روش به مخاطبان گستردهتری پاسخ میدهد، از جمله کسانی که ممکن است از تنظیمات تم سراسری سیستم خود آگاه نباشند یا نتوانند آن را تغییر دهند.
مثال کد
از همان HTML و CSS مثال دکمه جاوا اسکریپت استفاده کنید. جاوا اسکریپت را برای بررسی ترجیحات سیستم تغییر دهید:
const darkModeToggle = document.getElementById('darkModeToggle');
const body = document.body;
// تابع برای تغییر حالت تاریک
function toggleDarkMode() {
body.classList.toggle('dark-mode');
// ذخیره ترجیح کاربر در localStorage
if (body.classList.contains('dark-mode')) {
localStorage.setItem('darkMode', 'enabled');
} else {
localStorage.setItem('darkMode', 'disabled');
}
}
// بررسی localStorage برای ترجیح ذخیره شده، سپس ترجیح سیستم
if (localStorage.getItem('darkMode') === 'enabled') {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
} else if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) {
body.classList.add('dark-mode');
darkModeToggle.checked = true;
}
// اضافه کردن event listener به دکمه
darkModeToggle.addEventListener('change', toggleDarkMode);
توضیح:
- کد ابتدا
localStorage
را برای ترجیح ذخیره شده بررسی میکند. - اگر هیچ ترجیحی در
localStorage
یافت نشود، با استفاده ازwindow.matchMedia
بررسی میکند که آیا سیستم کاربر حالت تاریک را ترجیح میدهد یا خیر. - اگر سیستم حالت تاریک را ترجیح دهد، کلاس
dark-mode
به بدنه اضافه شده و دکمه تیک میخورد.
مزایا
- تشخیص خودکار و کنترل کاربر: هم تشخیص خودکار و هم کنترل دستی را فراهم میکند.
- پایداری: ترجیح کاربر با استفاده از
localStorage
ذخیره میشود.
معایب
- کمی پیچیدهتر: این روش کمی پیچیدهتر از استفاده از هر یک از روشها به تنهایی است.
- وابستگی به جاوا اسکریپت: به فعال بودن جاوا اسکریپت متکی است.
ملاحظات دسترسیپذیری
هنگام پیادهسازی حالت تاریک، در نظر گرفتن دسترسیپذیری برای اطمینان از اینکه وبسایت شما برای همه کاربران قابل استفاده باقی میماند، حیاتی است. به یاد داشته باشید که صرفاً معکوس کردن رنگها به طور خودکار دسترسیپذیری را تضمین نمیکند. در اینجا چند ملاحظه کلیدی آورده شده است:
- کنتراست رنگ: از کنتراست رنگ کافی بین متن و پسزمینه در هر دو حالت روشن و تاریک اطمینان حاصل کنید. از ابزارهایی مانند Contrast Checker وبسایت WebAIM (webaim.org/resources/contrastchecker/) برای تأیید اینکه ترکیب رنگهای شما با استانداردهای دسترسیپذیری مطابقت دارد، استفاده کنید. این امر به ویژه برای کاربران کمبینا مهم است.
- نشانگرهای فوکوس: اطمینان حاصل کنید که نشانگرهای فوکوس در هر دو حالت روشن و تاریک به وضوح قابل مشاهده هستند تا کاربرانی که با صفحهکلید پیمایش میکنند بتوانند به راحتی ببینند کدام عنصر در حال حاضر فوکوس دارد.
- تصاویر و آیکونها: در نظر بگیرید که تصاویر و آیکونها در حالت تاریک چگونه به نظر خواهند رسید. ممکن است نیاز به ارائه نسخههای جایگزین یا استفاده از فیلترهای CSS برای تنظیم رنگهای آنها برای دید بهینه داشته باشید.
- تست با کاربران: پیادهسازی حالت تاریک خود را با کاربرانی که دارای اختلالات بینایی مختلف هستند، آزمایش کنید تا هرگونه مشکل دسترسیپذیری را شناسایی و برطرف کنید.
بهترین شیوهها برای پیادهسازی حالت تاریک
در اینجا چند بهترین شیوه برای دنبال کردن هنگام پیادهسازی حالت تاریک در وبسایت شما آورده شده است:
- استفاده از متغیرهای CSS (ویژگیهای سفارشی): متغیرهای CSS به شما امکان میدهند رنگها و سایر استایلها را در یک مکان مرکزی تعریف کنید، که مدیریت و بهروزرسانی تم شما را آسانتر میکند.
- تست کامل: پیادهسازی حالت تاریک خود را در دستگاهها و مرورگرهای مختلف برای اطمینان از سازگاری تست کنید.
- ارائه یک دکمه واضح: دکمه تغییر حالت را به راحتی قابل پیدا کردن و استفاده کنید. از یک آیکون واضح و شهودی برای نشان دادن عملکرد آن استفاده کنید.
- در نظر گرفتن ترجیحات کاربر: به ترجیحات کاربر احترام بگذارید و آنها را با استفاده از
localStorage
یا کوکیها ذخیره کنید. - حفظ سازگاری: اطمینان حاصل کنید که پیادهسازی حالت تاریک شما در سراسر وبسایت شما سازگار است.
مثال: متغیرهای CSS برای تمبندی
متغیرهای CSS جابجایی بین تمهای روشن و تاریک را آسان میکنند. متغیرها را در شبهکلاس :root
تعریف کنید:
:root {
--bg-color: #fff;
--text-color: #000;
--link-color: #007bff;
}
body {
background-color: var(--bg-color);
color: var(--text-color);
}
a {
color: var(--link-color);
}
body.dark-mode {
--bg-color: #222;
--text-color: #fff;
--link-color: #8ab4f8;
}
اکنون، هنگامی که کلاس dark-mode
به بدنه اضافه میشود، متغیرهای CSS بهروز میشوند و استایلها به طور خودکار اعمال میشوند.
نتیجهگیری
پیادهسازی حالت تاریک میتواند به طور قابل توجهی تجربه کاربری وبسایت شما را افزایش دهد، دسترسیپذیری را بهبود بخشد و حتی عمر باتری را ذخیره کند. با دنبال کردن تکنیکها و بهترین شیوههای ذکر شده در این راهنما، میتوانید یک تجربه حالت تاریک روان و لذتبخش برای کاربران خود در سراسر جهان ایجاد کنید.
به یاد داشته باشید که دسترسیپذیری را در اولویت قرار دهید و پیادهسازی خود را به طور کامل تست کنید تا اطمینان حاصل شود که وبسایت شما برای همه کاربران، صرف نظر از ترجیحات یا تواناییهای بینایی آنها، قابل استفاده باقی میماند.
با پیادهسازی متفکرانه حالت تاریک، شما نه تنها یک روند را دنبال میکنید، بلکه یک تجربه وب فراگیرتر و کاربرپسندتر برای مخاطبان جهانی ایجاد میکنید. این تعهد به تجربه کاربری میتواند به طور قابل توجهی به عملکرد و جذابیت کلی وبسایت شما کمک کند.