فارسی

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

ارتقاء تدریجی: تشخیص قابلیت - ساخت تجربیات وب تاب‌آور برای مخاطبان جهانی

در چشم‌انداز همواره در حال تحول اینترنت، اطمینان از اینکه اپلیکیشن‌های وب شما دسترس‌پذیر، کارآمد و آینده‌نگر هستند، امری حیاتی است. یکی از مؤثرترین استراتژی‌ها برای دستیابی به این هدف، ارتقاء تدریجی است؛ یک فلسفه طراحی که بر ساخت قابلیت‌های اصلی که در طیف وسیعی از دستگاه‌ها و مرورگرها کار می‌کنند، تأکید دارد و در عین حال، بر اساس توانایی‌های محیط کاربر، بهبودهایی را اضافه می‌کند. یک جزء حیاتی از ارتقاء تدریجی، تشخیص قابلیت است که به توسعه‌دهندگان اجازه می‌دهد قبل از پیاده‌سازی یک ویژگی خاص، پشتیبانی مرورگر از آن را تعیین کنند. این رویکرد یک تجربه کاربری یکپارچه را تضمین می‌کند، به‌ویژه در چشم‌انداز فناوری متنوع در سراسر جهان.

ارتقاء تدریجی چیست؟

ارتقاء تدریجی یک استراتژی توسعه وب است که با یک پایه محکم و دسترس‌پذیر شروع می‌شود و سپس ویژگی‌های پیشرفته را بر اساس توانایی مرورگر یا دستگاه اضافه می‌کند. این رویکرد، محتوا و قابلیت‌های اصلی را برای همه کاربران، صرف‌نظر از دستگاه، مرورگر یا اتصال اینترنت آن‌ها، در اولویت قرار می‌دهد. این ایده را در بر می‌گیرد که وب باید برای همه، در همه جا، قابل استفاده و آموزنده باشد.

اصول اصلی ارتقاء تدریجی عبارتند از:

چرا تشخیص قابلیت ضروری است

تشخیص قابلیت سنگ بنای ارتقاء تدریجی است. به جای تکیه بر تشخیص مرورگر (شناسایی مرورگر کاربر بر اساس رشته عامل کاربر آن)، تشخیص قابلیت بر روی آنچه مرورگر *می‌تواند* انجام دهد تمرکز دارد. این یک رویکرد بسیار قابل اعتمادتر است زیرا:

روش‌های تشخیص قابلیت

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

۱. استفاده از جاوا اسکریپت برای بررسی قابلیت‌ها

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

مثال: بررسی API `fetch` (جاوا اسکریپت برای دریافت داده از شبکه)


if ('fetch' in window) {
  // API 'fetch' پشتیبانی می‌شود. از آن برای بارگذاری داده‌ها استفاده کنید.
  fetch('data.json')
    .then(response => response.json())
    .then(data => {
      // پردازش داده‌ها
    })
    .catch(error => {
      // مدیریت خطاها
    });
} else {
  // API 'fetch' پشتیبانی نمی‌شود. از یک جایگزین مانند XMLHttpRequest استفاده کنید.
  var xhr = new XMLHttpRequest();
  xhr.open('GET', 'data.json');
  xhr.onload = function() {
    if (xhr.status >= 200 && xhr.status < 300) {
      // پردازش داده‌ها
    } else {
      // مدیریت خطاها
    }
  };
  xhr.onerror = function() {
    // مدیریت خطاها
  };
  xhr.send();
}

در این مثال، کد بررسی می‌کند که آیا ویژگی `fetch` در شیء `window` وجود دارد یا خیر. اگر وجود داشته باشد، مرورگر از API `fetch` پشتیبانی می‌کند و کد می‌تواند از آن استفاده کند. در غیر این صورت، یک مکانیزم جایگزین (با استفاده از `XMLHttpRequest`) پیاده‌سازی می‌شود.

مثال: بررسی پشتیبانی از API `classList`


if ('classList' in document.body) {
  // مرورگر از classList پشتیبانی می‌کند. از متدهای classList استفاده کنید (مثلاً add, remove)
  document.body.classList.add('has-js');
} else {
  // مرورگر از classList پشتیبانی نمی‌کند. از روش‌های جایگزین استفاده کنید.
  // مثلاً، استفاده از دستکاری رشته برای افزودن و حذف کلاس‌های CSS
  document.body.className += ' has-js';
}

۲. استفاده از کوئری‌های قابلیت CSS (@supports)

کوئری‌های قابلیت CSS، که با قاعده `@supports` مشخص می‌شوند، به شما امکان می‌دهند قوانین CSS را بر اساس اینکه آیا مرورگر از ویژگی‌ها یا مقادیر خاص CSS پشتیبانی می‌کند یا خیر، اعمال کنید.

مثال: استفاده از `@supports` برای استایل‌دهی یک چیدمان با استفاده از Grid Layout


.container {
  display: flex; /* جایگزین برای مرورگرهایی که گرید ندارند */
}

@supports (display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(3, 1fr);
  }
}

در این مثال، `.container` در ابتدا از چیدمان `flex` (یک ویژگی با پشتیبانی گسترده) استفاده می‌کند. قاعده `@supports` بررسی می‌کند که آیا مرورگر از `display: grid` پشتیبانی می‌کند یا خیر. اگر پشتیبانی کند، استایل‌های درون این قاعده اعمال می‌شوند و چیدمان اولیه flex را با یک چیدمان grid جایگزین می‌کنند.

۳. کتابخانه‌ها و فریمورک‌ها

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

مثال: استفاده از Modernizr


<html class="no-js" >
<head>
  <!-- سایر متا تگ‌ها و غیره. -->
  <script src="modernizr.min.js"></script>
</head>
<body>
  <div class="my-element"></div>
  <script>
    if (Modernizr.borderradius) {
      // اعمال استایل‌های border-radius
      document.querySelector('.my-element').style.borderRadius = '10px';
    }
  </script>
</body>
</html>

در این سناریو، Modernizr اگر مرورگر از `border-radius` پشتیبانی کند، کلاس `borderradius` را به عنصر `` اضافه می‌کند. سپس کد جاوا اسکریپت این کلاس را بررسی کرده و استایل مربوطه را اعمال می‌کند.

مثال‌های عملی و ملاحظات جهانی

بیایید چند مثال عملی از تشخیص قابلیت و نحوه پیاده‌سازی آن‌ها را با در نظر گرفتن ملاحظات جهانی مانند دسترس‌پذیری، بین‌المللی‌سازی (i18n) و عملکرد بررسی کنیم.

۱. تصاویر واکنش‌گرا

تصاویر واکنش‌گرا برای ارائه اندازه‌های بهینه تصویر بر اساس دستگاه و اندازه صفحه کاربر ضروری هستند. تشخیص قابلیت می‌تواند نقش مهمی در پیاده‌سازی مؤثر آن‌ها داشته باشد.

مثال: بررسی پشتیبانی از `srcset` و `sizes`

`srcset` و `sizes` ویژگی‌های HTML هستند که اطلاعاتی در مورد گزینه‌های منبع تصویر به مرورگر ارائه می‌دهند و به آن امکان می‌دهند مناسب‌ترین تصویر را برای زمینه فعلی انتخاب کند.


<img
  src="image-fallback.jpg"
  srcset="image-small.jpg 480w, image-medium.jpg 768w, image-large.jpg 1024w"
  sizes="(max-width: 480px) 100vw, (max-width: 768px) 50vw, 33vw"
  alt="توضیحات تصویر"
>

ویژگی `srcset` لیستی از منابع تصویر را با عرض آن‌ها مشخص می‌کند. ویژگی `sizes` اطلاعاتی در مورد اندازه نمایش مورد نظر تصویر بر اساس کوئری‌های رسانه ارائه می‌دهد.

اگر مرورگر از `srcset` و `sizes` پشتیبانی نکند، می‌توانید از جاوا اسکریپت و تشخیص قابلیت برای دستیابی به نتیجه مشابه استفاده کنید. کتابخانه‌هایی مانند `picturefill` یک پلی‌فیل برای مرورگرهای قدیمی‌تر فراهم می‌کنند.


if (!('srcset' in document.createElement('img')) || !('sizes' in document.createElement('img'))) {
  // از یک پلی‌فیل مانند picturefill.js استفاده کنید
  // لینک به picturefill: https://scottjehl.github.io/picturefill/
  console.log('در حال استفاده از پلی‌فیل picturefill');
}

این رویکرد تضمین می‌کند که همه کاربران، صرف‌نظر از مرورگرشان، تصاویر بهینه‌سازی شده دریافت کنند.

۲. انیمیشن‌های وب

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

مثال: تشخیص پشتیبانی از ترنزیشن‌ها و انیمیشن‌های CSS


if (Modernizr.cssanimations && Modernizr.csstransitions) {
  // اعمال کلاس‌های انیمیشن
  document.body.classList.add('animations-enabled');
} else {
  // استفاده از یک رابط کاربری ثابت یا یک تجربه پایه‌ای‌تر بدون انیمیشن
  document.body.classList.add('animations-disabled');
}

با غیرفعال کردن انیمیشن‌ها برای کاربرانی که مرورگرهای قدیمی‌تر دارند یا زمانی که کاربر ترجیح خود را برای کاهش حرکت بیان کرده است (از طریق کوئری رسانه `prefers-reduced-motion`)، می‌توانید تجربه‌ای روان‌تر و فراگیرتر ارائه دهید.

ملاحظات جهانی برای انیمیشن‌ها: در نظر داشته باشید که برخی از کاربران ممکن است اختلالات دهلیزی یا شرایط دیگری داشته باشند که می‌تواند توسط انیمیشن‌ها تحریک شود. همیشه گزینه‌ای برای غیرفعال کردن انیمیشن‌ها فراهم کنید. به تنظیم `prefers-reduced-motion` کاربر احترام بگذارید.

۳. اعتبارسنجی فرم

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

مثال: بررسی پشتیبانی از اعتبارسنجی فرم HTML5


if ('checkValidity' in document.createElement('input')) {
  // استفاده از اعتبارسنجی فرم HTML5.
  // این ویژگی داخلی است و نیازی به جاوا اسکریپت ندارد
} else {
  // پیاده‌سازی اعتبارسنجی فرم مبتنی بر جاوا اسکریپت.
  // کتابخانه‌ای مانند Parsley.js می‌تواند مفید باشد:
  // https://parsleyjs.org/
}

این امر تضمین می‌کند که کاربران با مرورگرهای قدیمی‌تر همچنان اعتبارسنجی فرم را دریافت می‌کنند، حتی اگر با استفاده از جاوا اسکریپت پیاده‌سازی شده باشد. ارائه اعتبارسنجی سمت سرور را به عنوان لایه نهایی امنیت و استحکام در نظر بگیرید.

ملاحظات جهانی برای اعتبارسنجی فرم: اطمینان حاصل کنید که پیام‌های خطای شما بومی‌سازی شده و دسترس‌پذیر هستند. پیام‌های خطای واضح و مختصر را به زبان کاربر ارائه دهید. نحوه استفاده از فرمت‌های مختلف تاریخ و عدد را در سطح جهانی در نظر بگیرید.

۴. تکنیک‌های چیدمان پیشرفته (مانند CSS Grid)

CSS Grid Layout روشی قدرتمند برای ایجاد چیدمان‌های پیچیده و واکنش‌گرا فراهم می‌کند. با این حال، مهم است که اطمینان حاصل شود مرورگرهای قدیمی‌تر به خوبی مدیریت می‌شوند.

مثال: استفاده از CSS Grid با یک جایگزین


.container {
  display: flex;  /* جایگزین برای مرورگرهای قدیمی‌تر */
  flex-wrap: wrap;
}

@supports (display: grid) {
  .container {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
  }
}

این کد از `flexbox` به عنوان یک جایگزین برای مرورگرهایی که از `grid` پشتیبانی نمی‌کنند، استفاده می‌کند. اگر مرورگر از `grid` پشتیبانی کند، چیدمان با استفاده از گرید رندر می‌شود. این رویکرد یک چیدمان واکنش‌گرا ایجاد می‌کند که در مرورگرهای قدیمی‌تر به خوبی تنزل می‌یابد.

ملاحظات جهانی برای چیدمان: برای اندازه‌های مختلف صفحه، نسبت‌های تصویر و روش‌های ورودی (مانند صفحه‌های لمسی، ناوبری با صفحه‌کلید) طراحی کنید. چیدمان‌های خود را بر روی دستگاه‌ها و مرورگرهای مختلفی که در سطح جهانی استفاده می‌شوند، آزمایش کنید. اگر مخاطبان هدف شما شامل کاربرانی هستند که اسکریپت‌های راست-به-چپ (RTL) می‌خوانند (مانند عربی، عبری)، پشتیبانی از زبان RTL را در نظر بگیرید.

بهترین شیوه‌ها برای تشخیص قابلیت

برای به حداکثر رساندن اثربخشی تشخیص قابلیت، به این بهترین شیوه‌ها پایبند باشید:

پرداختن به دسترس‌پذیری (a11y) در تشخیص قابلیت

دسترس‌پذیری یک جزء حیاتی از ارتقاء تدریجی است. تشخیص قابلیت می‌تواند به اطمینان از دسترس‌پذیر بودن وب‌سایت شما برای کاربران دارای معلولیت کمک کند.

بین‌المللی‌سازی (i18n) و تشخیص قابلیت

هنگام ساخت یک وب‌سایت جهانی، i18n را در نظر بگیرید. تشخیص قابلیت می‌تواند با تسهیل محتوا و رفتار خاص زبان به تلاش‌های i18n شما کمک کند.

نتیجه‌گیری: ساختن برای آینده

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

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

اقدامات کاربردی: