Menu

CSS justify-content ו-align-items: כל הערכים

justify-content ממקם פריטי flex לאורך הציר הראשי ו-align-items ממקם אותם לאורך הציר הניצב. ראו כל ערך זה לצד זה, מדוד, עם רשת יישור לחיצה, align-self, והסיבות לכך ש-justify-content לפעמים לא עושה כלום.

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

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.

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

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

להתחיל