justify-content ו-align-items במשפט אחד כל אחד
במיכל flex, justify-content מפזר את הפריטים לאורך הציר הראשי (לרוחב השורה) ו-align-items מיישר אותם על הציר הניצב (למעלה ולמטה בשורה). שניהם נכתבים על המיכל:
הקופסה ממורכזת בשני הכיוונים: באותו מרחק מקצה ההתחלה ומקצה הסיום, ומלמעלה ומלמטה. הסירו את height: 140px ול-align-items: center אין מה לעשות, כי המיכל מתכווץ לגובה של הפריט עצמו.
כל ערך של justify-content, מדוד
כל שורה למטה היא אותם שלושה פריטים עם justify-content אחר. המספרים בתווית מעל כל שורה הם הרווחים שהדפדפן השאיר: לפני הפריט הראשון, בין הפריטים ואחרי האחרון.
המיכל ברוחב 420px והפריטים תופסים 180px, כך שיש 240px של מקום פנוי. לאן הוא הולך:
| ערך | המקום הפנוי הולך | רווחים בהדגמה |
|---|---|---|
flex-start (וגם start) | כולו אחרי הפריטים | 0 / 0 / 0 / 240 |
center | חצי לפני, חצי אחרי | 120 / 0 / 0 / 120 |
flex-end (וגם end) | כולו לפני הפריטים | 240 / 0 / 0 / 0 |
space-between | רק בין הפריטים | 0 / 120 / 120 / 0 |
space-around | שווה משני הצדדים של כל פריט, כך שבקצוות יש חצי | 40 / 80 / 80 / 40 |
space-evenly | כל הרווחים שווים, כולל הקצוות | 60 / 60 / 60 / 60 |
flex-start עוקב אחרי כיוון ה-flex ו-start עוקב אחרי כיוון הכתיבה. הם שונים רק עם row-reverse או column-reverse, שבהם flex-start נמצא בקצה ההפוך.
כל ערך של align-items
align-items פועל לרוחב השורה. לפריטים למטה יש גבהים שונים כדי שתוכלו לראות מה כל ערך עושה איתם:
| ערך | מה קורה על הציר הניצב |
|---|---|
stretch (ברירת המחדל) | פריטים בלי גובה מוגדר גדלים וממלאים את המיכל |
flex-start (וגם start) | הפריטים יושבים למעלה, בגובה שלהם |
center | הפריטים ממורכזים, בגובה שלהם |
flex-end (וגם end) | הפריטים יושבים למטה |
baseline | הפריטים זזים כך שהשורות הראשונות של הטקסט חולקות קו בסיס אחד |
בקופסת baseline שלוש התוויות "Ag" יושבות על קו אחד, למרות שהראשונה גדולה יותר ולשנייה יש ריפוד מעליה. זה הערך לשורה שמשלבת כותרת גדולה עם טקסט קטן, או תווית עם שדה קלט.
לחצו כדי ליישר
לחצו על כל תא ברשת של 3 על 3. הקופסה זזה לשם, וה-CSS שמציב אותה שם מודפס מתחת:
השורות בבורר משנות את align-items והעמודות משנות את justify-content. התא האמצעי הוא ה"מרכוז של div" הקלאסי.
בעמודה, השניים מתחלפים
justify-content תמיד עוקב אחרי הציר הראשי. עם flex-direction: column הציר הראשי אנכי, ולכן justify-content מזיז פריטים למעלה ולמטה ו-align-items מזיז אותם לרוחב:
אם התבלבלתם ביניהם, החליפו את שני המאפיינים במקום לכתוב מחדש את הפריסה.
align-self ו-margin אוטומטי: לפריט אחד בלבד
align-self על פריט דורס את align-items עבור הפריט הזה. אין justify-self ב-flexbox; כדי להזיז פריט אחד לאורך הציר הראשי, תנו לו margin עם auto, שלוקח את כל המקום הפנוי בצד הזה:
הפריט הירוק יורד למטה לבד, והפריט הענברי נדחף לקצה הרחוק של השורה בזמן שהאחרים נשארים בהתחלה.
כשיש כמה שורות: align-content
align-items מיישר פריטים בתוך השורה שלהם. כשמיכל נשבר לכמה שורות, align-content מרווח את השורות עצמן, ומקבל את אותם ערכים כמו justify-content. הוא לא עושה כלום במיכל nowrap, שהשורה היחידה שלו תמיד ממלאת את גובה המיכל. הדף על flex-wrap מראה את זה.
טעויות נפוצות
- בלבול בין הצירים.
justify-contentהוא כיוון הזרימה,align-itemsהוא לרוחבו. בעמודה, מרכוז אנכי הואjustify-content: center. - אין מקום פנוי. פריט עם
flex: 1לוקח את כל המקום, ולכן ל-justify-contentאין מה לחלק. אותו דבר קורה כשהמיכל הואinline-flexורחב בדיוק כמו הפריטים שלו. - אין גובה ל-
align-items. מיכל שגבוה כמו התוכן שלו לא משאיר מה ליישר. הגדירוheightאוmin-height. - לחפש
justify-selfב-flexbox. שם הוא נזנח. השתמשו ב-margin-inline-start: auto(אוmargin-left: auto) על הפריט. align-items: stretchשלא מותח. פריט עםheightמשלו שומר עליו. הסירו את הגובה (השתמשו ב-min-heightאם צריך מינימום).- לשים את המאפיינים על הפריטים. שניהם נכתבים על מיכל ה-flex. רק
align-selfנכתב על פריט.
שאלות נפוצות
מה ההבדל בין justify-content ל-align-items?
justify-content מפזר פריטים לאורך הציר הראשי, הכיוון שבו הם זורמים (אופקי עבור flex-direction: row). align-items ממקם אותם לאורך הציר הניצב (אנכי עבור שורה). בעמודה השניים מתחלפים: justify-content הופך לאנכי.
מה ההבדל בין space-between, space-around ו-space-evenly?
space-between לא שם רווח לפני הפריט הראשון או אחרי האחרון ומחלק את השאר בין הפריטים. space-around נותן לכל פריט רווח שווה משני הצדדים, כך שבקצוות יש חצי רווח. space-evenly הופך את כל הרווחים לשווים, כולל הקצוות.
למה justify-content לא עובד?
בדרך כלל אין מקום פנוי לחלק: לאחד הפריטים יש flex-grow או flex: 1, או שהמיכל רחב בדיוק כמו הפריטים שלו (למשל display: inline-flex או מיכל עם float). בדקו גם ש-display: flex נמצא על ההורה, לא על הפריטים.
למה align-items center לא ממרכז אנכית?
כנראה שהמיכל גבוה בדיוק כמו התוכן שלו, כך שאין בתוך מה למרכז. תנו למיכל ה-flex גובה או min-height, והפריטים יזוזו לאמצע שלו.
מה align-self עושה?
align-self דורס את align-items של המיכל עבור פריט אחד. למשל align-self: flex-end על ילד אחד מזיז רק אותו לסוף הציר הניצב, בזמן שהאחרים נשארים איפה ש-align-items שם אותם.
יש justify-self ב-flexbox?
לא. flexbox מתעלם מ-justify-self, כי הציר הראשי משותף לכל הפריטים. כדי לדחוף פריט אחד לאורך הציר הראשי, השתמשו ב-margin עם auto, כמו margin-inline-start: auto. justify-self עובד ב-grid.