CSS min() , max() ו-clamp()

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

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

הפונקציות המתמטיות, calc(), min(), max() ו-clamp() מאפשרות להשתמש בביטויים מתמטיים עם חיבור (+), חיסור (-), כפל (*) וחילוק (/) כערכי רכיבים.

ערכים ויחידות של CSS ברמה 4

min()

תמיכה בדפדפנים

  • Chrome:‏ 79.
  • Edge:‏ 79.
  • Firefox:‏ 75.
  • Safari: 11.1.

מקור

max()

תמיכה בדפדפנים

  • Chrome:‏ 79.
  • Edge:‏ 79.
  • Firefox:‏ 75.
  • Safari: 11.1.

מקור

clamp()

תמיכה בדפדפנים

  • Chrome:‏ 79.
  • Edge:‏ 79.
  • Firefox:‏ 75.
  • Safari: 13.1.

מקור

שימוש

אפשר להשתמש ב-min(), ב-max() וב-clamp() בצד שמאל של כל ביטוי CSS, כשזה הגיוני. בשביל min() ו-max() צריך לספק רשימת ארגומנטים, והדפדפן קובע איזה מהם הוא הקטן ביותר או הגדול ביותר. לדוגמה, במקרה של width: min(1rem, 50%, 10vw), הדפדפן מחשב איזו מהיחידות היחסיות האלה היא הקטנה ביותר ומשתמש בערך הזה לרוחב הרכיב.

פונקציית min() בוחרת את הערך המינימלי מרשימת אפשרויות בדוגמה הזו ב-Codepen.

הפונקציה max() עושה את אותה פעולה לגבי הערך המקסימלי.

פונקציית max() בוחרת ערך מרשימת אפשרויות בדוגמה הזו ב-Codepen.

כדי להשתמש ב-clamp(), מזינים שלושה ערכים: ערך מינימלי, ערך אידיאלי לחישוב וערך מקסימלי.

הפונקציה clamp() שומרת על הערך שלה בין הערך המינימלי למקסימלי שצוינו בהדוגמה הזו ב-Codepen.

אפשר להשתמש בפונקציות האלה בכל מקום שבו מותר להשתמש בפונקציות <length>, <frequency>, <angle>, <time>, <percentage>, <number> או <integer>. אפשר להשתמש בהם לבד (כמו ב-font-size: max(0.5vw, 50%, 2rem)), עם calc() (כמו ב-font-size: max(calc(0.5vw - 1em), 2rem)) או בשילוב (כמו ב-font-size: max(min(0.5vw, 1em), 2rem)).

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

הרוחב המושלם

לפי הספר The Elements of Typographic Style של Robert Bringhurst, "אורך שורה של 45 עד 75 תווים נחשב בדרך כלל לאורך מספק לדף עם עמודה אחת, עם גופן טקסט עם serif בגודל טקסט מסוים".

כדי לוודא שבלוקים של טקסט יישארו ברוחב של 45 עד 75 תווים, צריך להשתמש ב-clamp() וביחידה ch (מקדמה באורך 0 תווים):

p {
 
width: clamp(45ch, 50%, 75ch);
}

כך הדפדפן יוכל לקבוע את רוחב הפסקה. כברירת מחדל, הרוחב מוגדר ל-50%. אם הערך של 50% קטן מ-45ch, המערכת משתמשת ב-45ch כרוחב, ואם הערך של 50% רחב מ-75ch, המערכת משתמשת ב-75ch.

משתמשים בפונקציה clamp()‎ כדי להגדיר רוחב מינימלי ורחב מקסימלי. הדגמה ב-Codepen

אפשר גם לפצל את הנתונים באמצעות min() או max() בלבד. אם רוצים שהרכיב יהיה תמיד ברוחב של 50%, ולא לחרוג מהרוחב של 75ch במסכים גדולים יותר, משתמשים ב-width: min(75ch, 50%); כדי להגדיר את הגודל המקסימלי.

משתמשים בפונקציה min()‎ כדי להגדיר רוחב מקסימלי.

באופן דומה, אפשר להגדיר גודל מינימלי לטקסט קריא באמצעות הפונקציה max(), כמו ב-width: max(45ch, 50%);. כאן הדפדפן בוחר בערך הגדול ביותר. כלומר, הרכיב חייב להיות 45ch ומעלה.

משתמשים בפונקציה max()‎ כדי להגדיר רוחב מינימלי.

ניהול התמלאו

אפשר גם להשתמש ב-max() כדי להגדיר גודל מרווח מינימלי. הדוגמה הזו מגיעה מטריקים של CSS, שבהם הקורא Calu החבילה de Lacerda Pataca שיתף את הרעיון הזה: מאפשרים לרכיב לקבל מרווח פנימי נוסף במסכים גדולים יותר, אבל לשמור על מרווח פנימי מינימלי במסכים קטנים יותר. כדי לעשות זאת, משתמשים ב-calc() או ב-max() ומחסירים את המרווח המינימלי משני צידי הרכיב: calc((100vw - var(--contentWidth)) / 2), או max(2rem, 50vw - var(--contentWidth) / 2). בגיליון הסגנונות הוא אמור להיראות כך:

footer {
 
padding: var(--blockPadding) max(2rem, 50vw - var(--contentWidth) / 2);
}
הגדרת רווח פנימי מינימלי לרכיב באמצעות הפונקציה max(). הדגמה ב-Codepen

טיפוגרפיה נוזלית

כדי לאפשר טיפוגרפיה גמישה, מייק רייטמולר הפיץ טכניקה שמשתמשת בפונקציה clamp() כדי להגדיר גודל גופן מינימלי, גודל גופן מקסימלי ולאפשר שינוי קנה מידה בין הגדלים האלה.

שימוש ב-clamp() כדי ליצור טיפוגרפיה חלקה. הדגמה ב-Codepen

לפני clamp(), העיצוב של שינוי גודל הגופן הצריך מחרוזות סגנון מורכבות. עכשיו תוכלו לאפשר לדפדפן לעשות את העבודה בשבילכם. מגדירים את גודל הפונט המינימלי הקביל (למשל, 1.5rem לכותרת), את הגודל המקסימלי (למשל, 3rem) ואת הגודל האידיאלי (למשל, 5vw). עכשיו יש לכם טיפוגרפיה שמתאימה לרוחב שדה התצוגה של הדף עד שהיא מגיעה לערכי המינימום והמקסימום המגבילים, תוך שימוש בקוד מועט מאוד:

p {
 
font-size: clamp(1.5rem, 5vw, 3rem);
}

מקורות מידע נוספים

תמונת שער מ-@yer_a_wizard ב-Unbounce.