Menu

CSS Width ו-Height: הסבר על min, max, % ו-auto

width ו-height קובעים את הגודל של התיבה של אלמנט. למדו גדלים קבועים ובאחוזים, למה height: 100% לרוב לא עושה כלום, min-height ו-max-width לפריסות גמישות, auto מול 100%, ומילות המפתח fit-content.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

הגדרת width ו-height

width ו-height קובעים את הגודל של תיבת התוכן של אלמנט. כברירת מחדל, ה-padding וה-border מתווספים מחוץ לגודל הזה.

התיבה היא 260 על 100 פיקסלים: 240 על 80 של תוכן ועוד 10px של padding בכל צד. עם box-sizing: border-box היא הייתה בדיוק 240 על 80; הדף על מודל התיבה מסביר את שתי האפשרויות.

ערכים

ערךדוגמהמשמעות
autowidth: autoברירת המחדל. בלוקים ממלאים את רוחב הקונטיינר שלהם; הגובה מתאים את עצמו לתוכן
אורך300px, 20remגודל קבוע
אחוז50%מהרוחב (ל-width) או מהגובה (ל-height) של הבלוק המכיל
יחידות viewport100vh, 50vw, 100dvhמחלון הדפדפן
min-contentwidth: min-contentצר ככל האפשר, המילה הארוכה ביותר קובעת
max-contentwidth: max-contentרחב כמו התוכן בשורה אחת
fit-contentwidth: fit-contentכמו max-content, אבל אף פעם לא רחב יותר מהקונטיינר

למה height: 100% לא עושה כלום

height באחוזים צריך הורה עם גובה מוגדר כדי להיות אחוז ממנו. כשהגובה של ההורה הוא auto, שזה המצב הרגיל, גם height: 100% של הילד מתנהג כמו auto.

הילד הראשון גבוה רק כמו הטקסט שלו. השני ממלא את ההורה שלו כי להורה יש גובה. כדי ששרשרת של אחוזים תעבוד לאורך כל הדף, לכל אב עד html ו-body צריך להיות גובה, ולכן רוב הפריסות משתמשות במקום זה ב-flexbox או ב-grid: הילדים שלהם נמתחים למלא את המקום בלי שום אחוז.

min-height ו-max-width: גדלים גמישים

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

מאפייןמשמעות
min-widthאף פעם לא צר יותר מזה
max-widthאף פעם לא רחב יותר מזה
min-heightאף פעם לא נמוך יותר מזה, אבל יכול לגדול
max-heightאף פעם לא גבוה יותר מזה (תוכן עודף גולש)

במסך צר מ-360px, כמו בטלפון, הכרטיסים מתכווצים יחד איתו, כי max-width הוא רק תקרה.

כשגם גודל וגם גבול חלים, הגבולות מנצחים: max-width גובר על width, ו-min-width גובר על max-width.

width: auto מול width: 100%

באלמנט בלוק, להשאיר את width על auto הוא כמעט תמיד מה שאתם רוצים. auto מכניס את כל התיבה, כולל ה-padding וה-border, לתוך הקונטיינר. 100% הופך את התוכן לרחב כמו הקונטיינר ואז מוסיף מעליו את ה-padding וה-border:

width: 100% עדיין שימושי באלמנטים שהם לא בלוקים כברירת מחדל (<input>, <img>, inline-block), רצוי יחד עם box-sizing: border-box.

התאמת הגודל לתוכן: fit-content

כדי שבלוק יהיה רחב רק כמו הטקסט שלו, בלי להפוך אותו ל-inline-block, השתמשו ב-fit-content:

fit-content יחד עם margin-inline: auto ממרכז תווית או בלוק שנראה כמו כפתור, שנשאר רחב בדיוק כמו הטקסט שלו.

אזורים בגובה מלא ויחידות viewport

vh הוא 1% מגובה ה-viewport ו-vw הוא 1% מהרוחב שלו. בטלפונים, שורת הכתובת של הדפדפן גדלה ומתכווצת בזמן הגלילה, ולכן 100vh יכול להיות גבוה יותר ממה שרואים. היחידה הדינמית dvh עוקבת אחרי האזור הגלוי, ו-svh משתמשת בגובה הגלוי הקטן ביותר:

.hero {
  min-height: 100vh;  /* fallback */
  min-height: 100dvh; /* follows mobile toolbars */
}

השתמשו ב-min-height ולא ב-height לאזורים במסך מלא, כך שגם מסך קטן עם הרבה טקסט יקבל אזור שגדל. גובה קבוע עם תוכן שלא נכנס בו גולש החוצה, ובזה מטפל הדף על CSS overflow.

טעויות נפוצות

  • height: 100% בתוך הורה בלי גובה. הוא מתנהג כמו auto. תנו להורה גובה או השתמשו ב-flex או ב-grid.
  • width: 100% יחד עם padding. האלמנט גולש מהקונטיינר שלו. השאירו רוחב של בלוקים על auto, או השתמשו ב-box-sizing: border-box.
  • גובה קבוע לקונטיינרים של טקסט. השתמשו ב-min-height כדי שטקסט ארוך יותר או גופן גדול יותר לא יגלשו החוצה.
  • width על אלמנט inline. <span> ו-<a> מתעלמים מ-width ומ-height; הפכו אותם ל-inline-block או ל-block.
  • width: 1200px על עוטף הדף. הוא נגלל הצידה בכל טלפון. השתמשו במקום זה ב-max-width: 1200px.

שאלות נפוצות

למה height: 100% לא עובד?

גובה באחוזים הוא אחוז מהגובה של ההורה, והוא עובד רק כשהגובה הזה מוגדר. אם הגובה של ההורה הוא auto (נקבע לפי התוכן שלו), האחוז מטופל כ-auto. תנו להורה גובה, או השתמשו ב-flexbox או ב-grid, שמותחים את הילדים בלי אחוזים.

מה ההבדל בין width: 100% ל-width: auto?

באלמנט בלוק, auto ממלא את הקונטיינר כולל ה-padding וה-border שלו. width: 100% קובע את רוחב התוכן לרוחב הקונטיינר, ולכן עם ברירת המחדל box-sizing: content-box כל padding או border גורם לאלמנט לגלוש החוצה.

מה min-height עושה ב-CSS?

הוא קובע את הגובה המינימלי שאלמנט יכול לקבל, ועדיין מאפשר לו לגדול עם התוכן שלו. min-height: 200px נותן לכרטיס ריק 200px, וכרטיס עם יותר טקסט נהיה גבוה יותר במקום לגלוש, דבר ש-height קבוע לא היה מאפשר.

מה ההבדל בין width ל-max-width?

width קובע גודל מדויק. max-width קובע גבול עליון: האלמנט יכול להיות צר יותר, למשל בטלפון, אבל אף פעם לא רחב יותר. width: 100%; max-width: 600px; ממלא מסכים קטנים ועוצר ב-600px במסכים גדולים.

איך גורמים לאלמנט להיות בגובה המסך המלא?

השתמשו ב-min-height: 100vh (או ב-100dvh כדי שסרגלי הכלים של הדפדפן בנייד יילקחו בחשבון). min-height ולא height מאפשר לאזור לגדול אם התוכן שלו גבוה יותר מהמסך.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל