התגית שצריך
שימו את השורה הזו ב-<head> של כל עמוד:
<meta name="viewport" content="width=device-width, initial-scale=1">
width=device-width הופך את הפריסה לרחבה כמו המסך, ו-initial-scale=1 פותח את העמוד בזום של 100%. זה כל מה שרוב האתרים צריכים. עמוד מלא עם התגית במקומה:
הסקריפט קורא את התגית ואת רוחב הפריסה. דפדפנים במחשב מתעלמים מתגית ה-viewport, ולכן בתצוגה המקדימה הזו הרוחב הוא פשוט הרוחב של תיבת התצוגה. בטלפון, אותו קובץ מדווח את רוחב הטלפון (בדרך כלל 360 עד 430 פיקסלי CSS) בזכות התגית.
מה טלפונים עושים בלעדיה
דפדפן נייד שלא מוצא תגית viewport מניח שהעמוד נבנה למחשב. הוא פורס את העמוד ברוחב של כ-980 פיקסלים, ואז מכווץ את כולו כדי שייכנס למסך. שני הטלפונים המדומים שלמטה טוענים את אותו עמוד, אחד בפריסה של 980px ואחד ברוחב של טלפון, ושניהם מוקטנים לאותו גודל:
בטלפון הראשון הטקסט בגודל 16px יוצא זעיר והקורא צריך לצבוט ולהגדיל. בשני הוא נשאר קריא, והעמודות נערמות זו מעל זו כי הכלל @media (max-width: 600px) מתקיים. זה התפקיד השני של התגית: שאילתות מדיה רואות את רוחב הפריסה, כך שבלי התגית טלפון מדווח 980px וסגנונות המובייל שלכם אף פעם לא מופעלים. שנו את 375 ל-980 ב-show('with', 375) ושני הטלפונים נראים אותו דבר.
התגית היא רק חצי מהעבודה
תגית ה-viewport נותנת לכם פריסה צרה; ה-CSS שלכם צריך להיכנס בה. אלמנט אחד עם רוחב קבוע שרחב מהמסך גורם לכל העמוד להיגלל הצידה:
התיבה הראשונה נגללת הצידה; השנייה מתכווצת כדי להיכנס. תנו לתמונות ולאלמנטים רחבים אחרים max-width: 100%, והעדיפו רוחבים גמישים (אחוזים, fr, flexbox) על פני רוחבים קבועים בפיקסלים.
ערכי ה-viewport
| ערך | דוגמה | מה הוא עושה |
|---|---|---|
width | width=device-width | רוחב הפריסה. device-width הוא רוחב המסך בפיקסלי CSS; מותר גם מספר, אבל זה רק לעיתים רחוקות רעיון טוב. |
initial-scale | initial-scale=1 | רמת הזום כשהעמוד נפתח. |
minimum-scale / maximum-scale | maximum-scale=5 | מגבלות על זום. מקסימום נמוך חוסם זום, אז השמיטו את maximum-scale. |
user-scalable | user-scalable=yes | האם מותר זום בצביטה. השמיטו אותו. |
viewport-fit | viewport-fit=cover | מאפשר לעמוד להתפרש מתחת לנוטץ' או לפינות מעוגלות, יחד עם padding של env(safe-area-inset-*). |
interactive-widget | interactive-widget=resizes-content | איך המקלדת שעל המסך משפיעה על הפריסה. נתמך ב-Chrome ב-Android. |
הערכים מופרדים בפסיקים. עמוד שממלא את כל המסך בטלפונים עם נוטץ' נראה כך:
<meta name="viewport" content="width=device-width, initial-scale=1, viewport-fit=cover">
<style>
body {
padding-top: env(safe-area-inset-top);
padding-bottom: env(safe-area-inset-bottom);
}
</style>
אל תחסמו זום
את התגית הזו תמצאו בתבניות ישנות:
<!-- Avoid: stops people from zooming -->
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">
היא מונעת זום בצביטה, שאנשים עם ראייה ירודה תלויים בו, וכלי בדיקת נגישות כמו Lighthouse מסמנים אותה. Safari ב-iOS מתעלם מ-user-scalable=no, כך שהתגית אפילו לא עובדת באופן עקבי. אם שדה בטופס מתקרב כשמקישים עליו באייפון, הסיבה היא גודל גופן קטן מ-16px ב-input; הגדירו את ה-font-size של ה-input ל-16px לפחות במקום לבטל זום.
טעויות נפוצות
- לשכוח את התגית. גיליון סגנונות רספונסיבי לא עושה כלום בטלפונים בלעדיה, כי שאילתות המדיה רואות פריסה של 980px. שימו אותה ליד תגית ה-title בתבנית העמוד שלכם.
- נקודה-פסיק בין הערכים. השתמשו בפסיקים:
width=device-width, initial-scale=1. - רוחב קבוע בקוד כמו
width=375. מסכים שונים זה מזה; השתמשו ב-device-width. - ביטול זום עם
user-scalable=noאוmaximum-scale=1. - להאשים את התגית בגלילה הצידה. מצאו את האלמנט שרחב מהמסך ותנו לו רוחב גמיש.
שאלות נפוצות
מה עושה תגית ה-meta viewport?
היא אומרת לדפדפנים בנייד כמה רחבה צריכה להיות הפריסה. בלעדיה, רוב הטלפונים פורסים את העמוד ברוחב של כ-980 פיקסלי CSS ומכווצים אותו כדי שייכנס למסך. עם width=device-width הפריסה תואמת את רוחב המסך, כך שהטקסט קריא ושאילתות מדיה עובדות.
מהי תגית ה-meta viewport הסטנדרטית?
<meta name="viewport" content="width=device-width, initial-scale=1">, בתוך <head>. זו הבחירה הנכונה כמעט לכל עמוד רספונסיבי.
למה ה-meta viewport שלי לא עובד?
בדקו שהתגית נמצאת ב-<head>, שה-name הוא viewport ושהערכים מופרדים בפסיקים. אם העמוד עדיין נגלל הצידה, יש אלמנט רחב מהמסך, כמו רוחב קבוע, תמונה גדולה או מילה ארוכה; התגית לא יכולה לתקן CSS שרחב יותר מהמכשיר.
להשתמש ב-user-scalable=no או ב-maximum-scale=1?
לא. שניהם מונעים מאנשים לעשות זום, שמשתמשים רבים עם ראייה ירודה נשענים עליו, והם נכשלים בבדיקות נגישות. Safari ב-iOS מתעלם מ-user-scalable=no בכל מקרה.
האם תגית ה-meta viewport משפיעה על דפדפנים במחשב?
לא. דפדפנים במחשב מתעלמים ממנה; רוחב הפריסה שם הוא פשוט רוחב החלון. התגית חשובה בטלפונים ובטאבלטים.