تعامل

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

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

به جای تلاش برای استنتاج مکانیسم ورودی از اندازه صفحه، از ویژگی های رسانه در CSS استفاده کنید.

اشاره گر

می توانید سه مقدار ممکن را با ویژگی رسانه pointer آزمایش کنید: none ، coarse ، و fine .

اگر یک مرورگر مقدار pointer none را گزارش کند، ممکن است کاربر از صفحه کلید برای تعامل با وب سایت شما استفاده کند.

اگر یک مرورگر مقدار pointer را coarse گزارش کند، به این معنی است که مکانیسم ورودی اولیه خیلی دقیق نیست. انگشت روی صفحه لمسی یک نشانگر درشت است.

اگر یک مرورگر مقدار pointer را fine گزارش کند، به این معنی است که مکانیسم ورودی اولیه قادر به کنترل دقیق است. ماوس یا قلم یک اشاره گر خوب است.

می توانید اندازه عناصر رابط خود را متناسب با مقدار pointer تنظیم کنید. سعی کنید از این وب‌سایت در انواع دستگاه‌های مختلف دیدن کنید تا ببینید رابط چگونه سازگار است.

در این مثال، دکمه ها برای نشانگرهای درشت بزرگتر شده اند:

button {
  padding: 0.5em 1em;
}
@media (pointer: coarse) {
  button {
    padding: 1em 2em;
  }
}

همچنین می توان عناصر را برای نشانگرهای ظریف کوچکتر کرد، اما مراقب انجام این کار باشید:

نکن
@media (pointer: fine) {
  button {
    padding: 0.25em 0.5em;
  }
}

حتی اگر فردی مکانیزم ورودی اولیه دارد که قادر به کنترل دقیق است، قبل از کاهش اندازه عناصر تعاملی دو بار فکر کنید. قانون فیتس هنوز هم اعمال می شود. یک هدف کوچکتر حتی با یک اشاره گر ظریف به تمرکز بیشتری نیاز دارد. منطقه هدف بزرگتر صرف نظر از دستگاه اشاره گر به نفع همه است.

هر اشاره گر

ویژگی رسانه pointer ظرافت مکانیزم ورودی اولیه را گزارش می دهد. اما بسیاری از دستگاه ها بیش از یک مکانیسم ورودی دارند. این امکان وجود دارد که شخصی با استفاده از صفحه نمایش لمسی و ماوس همزمان با وب سایت شما تعامل داشته باشد.

any-pointer با ویژگی رسانه pointer تفاوت دارد زیرا در صورت موفقیت هر دستگاه اشاره گر آزمایش را گزارش می دهد.

مقدار any-pointer none به این معنی است که هیچ دستگاه اشاره‌ای در دسترس نیست.

مقدار coarse any-pointer به این معنی است که حداقل یک دستگاه اشاره گر دقیق نیست. اما ممکن است این مکانیسم ورودی اولیه نباشد.

مقدار any-pointer fine به این معنی است که حداقل یک دستگاه اشاره گر قادر به کنترل ریزدانه است. اما باز هم، این ممکن است مکانیزم ورودی اولیه نباشد.

از آنجایی که در صورت موفقیت هر یک از مکانیسم‌های ورودی، جستجوی رسانه‌ای any-pointer نتیجه مثبتی را گزارش می‌کند، این امکان برای مرورگر وجود دارد که نتیجه‌ای را برای any-pointer: fine و همچنین یک نتیجه را برای any-pointer: coarse گزارش کند. در این صورت ترتیب درخواست های رسانه ای شما اهمیت دارد. آخرین مورد اولویت خواهد داشت.

در این مثال، اگر دستگاه دارای مکانیزم ورودی ریز و درشت باشد، سبک‌های درشت اعمال می‌شوند.

@media (any-pointer: fine) {
  button {
    padding: 0.5em 1em;
  }
}
@media (any-pointer: coarse) {
  button {
    padding: 1em 2em;
  }
}

شناور

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

بر خلاف ویژگی رسانه pointer که بین نشانگرهای ظریف و درشت تفاوت قائل می شود، ویژگی رسانه hover باینری است. اگر دستگاه ورودی اولیه قابلیت شناور شدن روی عناصر را داشته باشد، مقدار hover را گزارش خواهد کرد. در غیر این صورت ارزش none است.

در این مثال، برخی از نمادهای تکمیلی در حالت شناور در دسترس هستند، اما تنها در صورتی که دستگاه ورودی اولیه قادر به شناور شدن روی یک عنصر باشد.

button .extra {
  visibility: visible;
}
@media (hover: hover) {
  button .extra {
    visibility: hidden;
  }
  button:hover .extra {
    visibility: visible;
  }
}

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

button .extra {
  visibility: visible;
}
@media (hover: hover) {
  button .extra {
    visibility: hidden;
  }
  button:is(:hover, :focus) .extra {
    visibility: visible;
  }
}

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

هر شناور

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

همانطور که any-pointer در هر یک از مکانیزم های ورودی گزارش می دهد، هر یک از مکانیسم های ورودی موجود قادر به شناور شدن بر روی عناصر باشد any-hover درست خواهد بود.

اگر تصمیم به معکوس کردن منطق در مثال قبلی داشتید، می‌توانید استایل‌های hover را به صورت پیش‌فرض درآورید و سپس اگر any-hover مقدار none داشت، آن‌ها را حذف کنید.

button .extra {
  visibility: hidden;
}
button:hover .extra,
button:focus .extra {
  visibility: visible;
}
@media (any-hover: none) {
  button .extra {
    visibility: visible;
  }
}

در دستگاهی که مکانیسم ورودی ندارد، نماد اضافی همیشه قابل مشاهده است.

کیبوردهای مجازی

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

انواع ورودی

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

انواع ورودی HTML5 یک راه عالی برای توصیف عناصر input شما هستند. ویژگی type مقادیری مانند email ، number ، tel ، url و موارد دیگر را می پذیرد.

  <label for="email">Email</label>
  <input type="email" id="email">
  <label for="number">Number</label>
  <input type="number" id="number">
  <label for="tel">Tel</label>
  <input type="tel" id="tel">
  <label for="url">URL</label>
  <input type="url" id="url">

حالت های ورودی

پشتیبانی مرورگر

  • کروم: 66.
  • لبه: 79.
  • فایرفاکس: 95.
  • سافاری: 12.1.

منبع

ویژگی inputmode به شما کنترل دقیقی بر روی صفحه کلیدهای مجازی می دهد. برای مثال، در حالی که یک type input با مقدار number وجود دارد، می‌توانید از ویژگی inputmode برای تمایز بین اعداد کامل و اعشاری استفاده کنید.

اگر یک عدد کامل می‌خواهید، مانند سن شخصی، از inputmode="numeric" استفاده کنید.

<label for="age">Age</label>
<input type="number" id="age" inputmode="numeric">

اگر عددی را می‌خواهید که شامل اعشار باشد، مانند قیمت، از inputmode="decimal" استفاده کنید.

<label for="price">Price</label>
<input type="number" id="price" inputmode="decimal">

تکمیل خودکار

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

<label for="name">Name</label>
<input type="text" id="name" autocomplete="name">
<label for="country">Country</label>
<input type="text" id="country" autocomplete="country">
<label for="email">Email</label>
<input type="email" id="email" autocomplete="email">

این ویژگی‌های HTML - type ، inputmode و autocomplete - افزوده‌های کوچکی به فیلدهای فرم شما هستند، اما می‌توانند تفاوت بزرگی در تجربه کاربر ایجاد کنند. با پیش بینی و پاسخگویی به قابلیت های دستگاه کاربر خود، کاربران خود را قدرتمند می کنید. برای اطلاعات عمیق تر، دوره ای برای کمک به یادگیری فرم ها وجود دارد.

در مرحله بعدی در این دوره، زمان بررسی برخی از الگوهای رابط رایج است.

درک خود را بررسی کنید

دانش خود را در مورد تعاملات آزمایش کنید

به جای اینکه بخواهید نوع ورودی کاربر را از روی اندازه صفحه استنتاج کنید، از کدام ویژگی باید استفاده کنید؟

ویژگی های رسانه CSS
نوع رسانه CSS handheld
از کاربر با prompt()

تفاوت بین @media (pointer) و @media (any-pointer) چیست؟

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

کدام نوع ورودی صفحه کلید مجازی مناسب تری را برای کاربران نشان می دهد؟

type="number"
type="tel"
type="email"
type="url"