מה זה margin
Margin הוא המרווח מחוץ לגבול של אלמנט. הוא תמיד שקוף, והתפקיד שלו הוא לדחוף אלמנטים אחרים הלאה. בדוגמה, המיכל האפור נראה דרך ה-margin שסביב הקופסה הכחולה:
הרצועה האפורה היא לא חלק מהקופסה: הרקע של הקופסה עצמה נעצר בגבול שלה. למרווח שמקבל את הרקע של האלמנט, השתמשו ב-padding.
הקיצור margin
margin מקבל ערך אחד עד ארבעה, באותו סדר של כיוון השעון כמו padding:
| הצהרה | למעלה | ימין | למטה | שמאל |
|---|---|---|---|---|
margin: 10px; | 10 | 10 | 10 | 10 |
margin: 10px 20px; | 10 | 20 | 10 | 20 |
margin: 10px 20px 30px; | 10 | 20 | 30 | 20 |
margin: 10px 20px 30px 40px; | 10 | 20 | 30 | 40 |
לכל צד יש גם מאפיין משלו (margin-top, margin-right, margin-bottom, margin-left) וגרסאות לוגיות שעוקבות אחרי כיוון הטקסט (margin-inline-start, margin-inline-end, margin-block, margin-inline).
בניגוד ל-padding, margin מקבל auto וערכים שליליים:
| ערך | דוגמה | הערות |
|---|---|---|
| אורך | 16px, 1.5rem | הנפוץ ביותר |
| אחוז | 5% | מרוחב הבלוק המכיל, לכל ארבעת הצדדים |
auto | margin: 0 auto | הדפדפן ממלא את המקום שנשאר |
| שלילי | margin-top: -10px | מקרב את האלמנט או את השכן שלו, יכול לחפוף |
מרכוז עם margin: 0 auto
margin: 0 auto היא הדרך הקלאסית למרכז בלוק אופקית. auto בשני הצדדים אומר לדפדפן לחלק שווה את המקום שנשאר. זה דורש רוחב קטן מהמיכל, אחרת לא נשאר מה לחלק:
margins אוטומטיים לא ממרכזים אנכית בזרימה הרגילה (margins אנכיים עם auto הופכים ל-0) ולא עושים כלום על אלמנטים inline. לסקירה מלאה של מרכוז, ראו איך למרכז div.
התמזגות margins
כששני margins אנכיים נוגעים זה בזה, הם לא מתחברים. הדפדפן שומר רק את הגדול מביניהם. כאן לקופסה הראשונה יש margin-bottom: 30px ולשנייה margin-top: 20px, והרווח ביניהן הוא 30px, לא 50px:
ההתמזגות מכוונת: היא מאפשרת לפסקאות ולכותרות לשאת כל אחת את המרווח שלה בלי להכפיל אותו במקום שבו הן נפגשות. היא מפתיעה אנשים במקרה שני, שבו ה-margin העליון של ילד בורח מההורה שלו:
בהורה הראשון, ה-margin של 30px של הילד התמזג דרך הקצה העליון של ההורה, ולכן הוא דוחף את כל ההורה למטה במקום ליצור מקום אפור בתוכו. כל אחד מאלה עוצר את זה:
display: flow-rootעל ההורה (בניגוד ל-overflow: hidden, הוא לא חותך כלום).- padding או גבול בקצה העליון של ההורה.
- הורה מסוג flex או grid: margins של פריטי flex ו-grid אף פעם לא מתמזגים.
margins אופקיים אף פעם לא מתמזגים, וגם לא margins של אלמנטים עם float או עם מיקום absolute.
margins שליליים
margin שלילי מושך בכיוון ההפוך. בצד העליון או בצד ההתחלה הוא מזיז את האלמנט עצמו; בצד התחתון או בצד הסיום הוא מקרב את האלמנט הבא. קופסאות יכולות לחפוף:
margin auto ב-flexbox
בתוך מיכל flex, margin עם auto לוקח את כל המקום הפנוי בצד שלו. זו הדרך הפשוטה ביותר לדחוף פריט אחד לקצה הרחוק של שורה, וב-flexbox auto עובד גם אנכית:
margin-inline-start: auto שם את המקום הפנוי לפני "Log in", בסוף השורה, גם בדפים משמאל לימין וגם בדפים מימין לשמאל.
טעויות נפוצות
margin: 0 autoעל אלמנט בלי רוחב. בלוק כבר ממלא את המיכל שלו; הגדירוwidthאוmax-width.margin: autoעל אלמנט inline. margins אוטומטיים עלspan,aאוimgשנשאר inline שווים 0. הפכו אותו ל-display: block.- לחבר שני margins אנכיים ולצפות לסכום. הם מתמזגים לגדול מביניהם; השתמשו ב-
gapב-flex או ב-grid, או בכיוון margin אחד באופן עקבי. - margin של ילד שדוחף את ההורה שלו. זו התמזגות בין הורה לילד; הוסיפו
display: flow-rootלהורה. - שימוש ב-margin למרווח שצריך רקע. margin שקוף; השתמשו ב-padding.
שאלות נפוצות
מה זה margin ב-CSS?
Margin הוא המרווח מחוץ לגבול של אלמנט. הוא שקוף ודוחף אלמנטים שכנים הלאה. מגדירים אותו עם margin או עם המאפיינים של צד אחד margin-top, margin-right, margin-bottom ו-margin-left.
מה margin: 0 auto עושה?
הוא קובע את ה-margins העליון והתחתון ל-0 ומחלק את המקום האופקי שנשאר שווה בין ה-margin השמאלי לימני, וכך ממרכז אופקית אלמנט בלוק. האלמנט צריך רוחב קטן מהמיכל שלו, למשל max-width: 600px.
למה margin auto לא ממרכז את האלמנט שלי?
בדרך כלל כי לאלמנט אין רוחב (בלוק ממלא את המיכל שלו, כך שאין מה לחלק), או כי הוא inline (span, a, img כברירת מחדל), ושם margins אוטומטיים שווים 0. תנו לו רוחב ו-display: block, או מרכזו אותו מההורה עם flexbox או grid.
מה זה התמזגות margins?
כששני margins אנכיים נפגשים, למשל ה-margin התחתון של פסקה אחת וה-margin העליון של הבאה, הדפדפן משתמש רק בגדול מביניהם במקום לחבר אותם. זה קורה רק ל-margins אנכיים של קופסאות בלוק בזרימה הרגילה, לא בפריסות flex או grid.
האם margin יכול להיות שלילי?
כן. margin שלילי מושך את האלמנט לכיוון הצד הזה, או מושך את האלמנט הבא מעליו, כך שקופסאות יכולות לחפוף. זה שימושי לתיקוני יישור קטנים ולאפשר לאלמנט לפרוץ מה-padding של המיכל שלו.