בשיעור הזה תלמדו איך לשלוט בגודל הרכיבים, לשמור על ריווח תקין ולהטמיע טיפוגרפיה גמישה באמצעות פונקציות CSS שנתמכות היטב.
העיצוב הרספונסיבי הופך לניואנס יותר, ולכן שירות ה-CSS מתפתח כל הזמן כדי לתת ליוצרים יותר שליטה. הפונקציות min()
, max()
ו-clamp()
, שנתמכות עכשיו בכל הדפדפנים המתקדמים, הן בין הכלים העדכניים ביותר ביצירת אתרים ואפליקציות לדינמיים ולרספונסיביים יותר. אפשר להשתמש בפונקציות האלה כדי לקבוע את הגודל של רכיבים ולשנות את הגודל שלהם, לשמור על המרווחים בין הרכיבים וליצור טיפוגרפיה גמישה וזורמת.
הפונקציות המתמטיות,
ערכים ויחידות של CSS ברמה 4calc()
,min()
,max()
ו-clamp()
מאפשרות להשתמש בביטויים מתמטיים עם חיבור (+), חיסור (-), כפל (*) וחילוק (/) כערכי רכיבים.
תמיכה בדפדפנים
min()
max()
clamp()
שימוש
אפשר להשתמש ב-min()
, ב-max()
וב-clamp()
בצד שמאל של כל ביטוי CSS, כשזה הגיוני. בשביל min()
ו-max()
צריך לספק רשימת ארגומנטים, והדפדפן קובע איזה מהם הוא הקטן ביותר או הגדול ביותר. לדוגמה, במקרה של width: min(1rem, 50%, 10vw)
, הדפדפן מחשב איזו מהיחידות היחסיות האלה היא הקטנה ביותר ומשתמש בערך הזה לרוחב הרכיב.
הפונקציה max()
עושה את אותה פעולה לגבי הערך המקסימלי.
כדי להשתמש ב-clamp()
, מזינים שלושה ערכים: ערך מינימלי, ערך אידיאלי לחישוב וערך מקסימלי.
אפשר להשתמש בפונקציות האלה בכל מקום שבו מותר להשתמש בפונקציות <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
.
אפשר גם לפצל את הנתונים באמצעות min()
או max()
בלבד. אם רוצים שהרכיב יהיה תמיד ברוחב של 50%
, ולא לחרוג מהרוחב של 75ch
במסכים גדולים יותר, משתמשים ב-width: min(75ch, 50%);
כדי להגדיר את הגודל המקסימלי.
באופן דומה, אפשר להגדיר גודל מינימלי לטקסט קריא באמצעות הפונקציה max()
, כמו ב-width: max(45ch, 50%);
. כאן הדפדפן בוחר בערך הגדול ביותר. כלומר, הרכיב חייב להיות 45ch
ומעלה.
ניהול התמלאו
אפשר גם להשתמש ב-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);
}
טיפוגרפיה נוזלית
כדי לאפשר טיפוגרפיה גמישה, מייק רייטמולר הפיץ טכניקה שמשתמשת בפונקציה clamp()
כדי להגדיר גודל גופן מינימלי, גודל גופן מקסימלי ולאפשר שינוי קנה מידה בין הגדלים האלה.
לפני clamp(),
העיצוב של שינוי גודל הגופן הצריך מחרוזות סגנון מורכבות. עכשיו תוכלו לאפשר לדפדפן לעשות את העבודה בשבילכם. מגדירים את גודל הפונט המינימלי הקביל (למשל, 1.5rem
לכותרת), את הגודל המקסימלי (למשל, 3rem
) ואת הגודל האידיאלי (למשל, 5vw
). עכשיו יש לכם טיפוגרפיה שמתאימה לרוחב שדה התצוגה של הדף עד שהיא מגיעה לערכי המינימום והמקסימום המגבילים, תוך שימוש בקוד מועט מאוד:
p {
font-size: clamp(1.5rem, 5vw, 3rem);
}
מקורות מידע נוספים
- ערכים ויחידות של CSS ב-MDN
- מפרט ברמה 4 של יחידות וערכים ב-CSS
- מאמר בנושא CSS Tricks בנושא רוחב רכיב פנימי
- min(), max(), clamp() – סקירה כללית מאת Ahmad Shadeed
תמונת שער מ-@yer_a_wizard ב-Unbounce.