אינטראקציה

במכשירים עם מסך קטן, כמו טלפונים ניידים, בדרך כלל יש מסכי מגע. מכשירים עם מסך גדול, כמו מחשבים ניידים ושולחניים, בדרך כלל כוללים ציוד חומרה כמו עכבר או משטח מגע. מפתה להשתמש במסכים קטנים עם מגע ובמסכים גדולים עם סמנים.

אבל המציאות היא מורכבת יותר. למחשבים ניידים מסוימים יש יכולות של מסך מגע. המשתמשים יכולים להשתמש במסך מגע, במשטח מגע או בשניהם. באותה מידה, קיימת אפשרות להשתמש במקלדת או בעכבר חיצוניים עם מסך מגע, כמו טאבלט.

במקום לנסות להסיק את מנגנון הקלט מגודל המסך, השתמשו בתכונות מדיה ב-CSS.

מצביע

אפשר לבדוק שלושה ערכים אפשריים באמצעות תכונת המדיה pointer: none, coarse ו-fine.

אם דפדפן מדווח על ערך pointer של none, יכול להיות שהמשתמש משתמש במקלדת כדי לבצע פעולות באתר.

אם דפדפן מדווח על הערך coarse כ-pointer, פירוש הדבר שמנגנון הקלט הראשי לא מדויק מאוד. אצבע על מסך מגע היא מצביע גס.

אם הדפדפן מדווח על הערך fine של pointer, המשמעות היא שמנגנון הקלט הראשי יכול לשלוט בצורה פרטנית. עכבר או סטיילוס הם סמן עדין.

אפשר לשנות את הגודל של רכיבי הממשק כך שיתאימו לערך של 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 היא שאין התקן הצבעה זמין.

ערך any-pointer של coarse פירושו שלפחות התקן הצבעה אחד לא מדויק מאוד. אבל יכול להיות שזה לא מנגנון הקלט הראשי.

הערך 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;
  }
}

אם מעבירים את העכבר מעל הלחצן, הסמל יופיע. עם זאת, אם משתמשים במקלדת כדי לעבור ללחצן Tab, הסמל נשאר בלתי נראה. כשמשתמשים במקלדת, אתם מתמקדים במקום להעביר את העכבר מעל התמונה. מחשב שולחני שחבר אליו עכבר ידווח שמנגנון הקלט הראשי יכול להעביר את העכבר, וזה נכון. אבל כל מי שמשתמש במקלדת בזמן שמחובר לעכבר לא ייהנה מהיתרון של הסגנונות של :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 מתקיים אם אחד ממנגנוני הקלט הזמינים יכול להעביר את העכבר מעל רכיבים.

אם החלטתם להפוך את הלוגיקה בדוגמה הקודמת, אפשר להגדיר את הסגנונות של העברת העכבר כברירת מחדל ואז להסיר אותם אם ל-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">

שיטות קלט

תמיכה בדפדפן

  • Chrome: 66.
  • קצה: 79.
  • Firefox: 95.
  • Safari: 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 – הם תוספות קטנות לשדות הטופס, אבל יש להם השפעה משמעותית על חוויית המשתמש. ציפייה ותגובה ליכולות המכשיר של המשתמשים יעזרו לך להעצים את המשתמשים. למידע מפורט יותר, יש קורס שמיועד לעזור לכם ללמוד טפסים.

בשלב הבא בקורס הזה נראה כמה תבניות ממשק נפוצות.

בדיקת ההבנה

בחינת הידע שלכם לגבי אינטראקציות

באיזו תכונה כדאי להשתמש במקום לנסות להסיק את סוג הקלט של המשתמש לפי גודל המסך?

לשאול את המשתמש באמצעות prompt() של JavaScript
תכונות מדיה של CSS
סוג מדיה CSS: handheld

מה ההבדל בין @media (pointer) לבין @media (any-pointer)?

המצביעים לא כוללים פריטים כמו עכבר.
כל מצביע ידווח כ-true כשמזינים קלט נוסף שאינו ראשי, כמו סטיילוס, עוברים את הבדיקה.
כל מצביע כולל פריטים כמו האצבע שלכם כמצביע.

באילו סוגי קלט מוצגת מקלדת וירטואלית מתאימה יותר למשתמשים?

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