התשובה המהירה: text-align על ההורה
<img> הוא אלמנט inline: הוא יושב בשורת טקסט כמו מילה. לכן ממרכזים אותו באותה דרך שממרכזים טקסט, עם text-align: center על ההורה שלו:
הסגנון נכתב על ה-div, לא על התמונה. text-align: center על ה-<img> עצמו לא עושה כלום, כי אין בתוך התמונה טקסט ליישר.
שיטה 2: display block ו-margin auto
אם אתם מעדיפים לעצב את התמונה עצמה, הפכו אותה לבלוק ותנו לה margin אוטומטי בצדדים. המקום הפנוי משני הצדדים מתחלק שווה בשווה:
לתמונה האפורה יש margin: 0 auto אבל היא נשארת בתחילת השורה: margin אוטומטי לא עושה כלום על אלמנט inline. display: block הוא החלק החסר. max-width: 100% יחד עם height: auto מונעים מהתמונה לגלוש ממסך צר ושומרים על הפרופורציות שלה.
שיטה 3: flexbox או grid, כולל מרכוז אנכי
כדי למרכז תמונה בשני הכיוונים בתוך תיבה, תנו לתיבה גובה ומרכזו את התוכן שלה עם grid או flexbox:
המקבילה ב-flexbox היא display: flex; justify-content: center; align-items: center;. בשני המקרים התיבה צריכה גובה גדול מהתמונה, אחרת אין מקום שבו אפשר למרכז. אותן שיטות ממרכזות כל אלמנט; עמוד מרכוז div משווה את כולן.
מרכוז תמונה עם כיתוב
תמונה עם כיתוב שייכת ל-<figure>. מרכזו את התוכן של ה-figure, והתמונה והכיתוב יתיישרו יחד:
כמה תמונות בשורה ממורכזת
שורה של לוגואים או תמונות ממוזערות היא משימה ל-flexbox. justify-content: center ממרכז את הקבוצה, gap מרווח אותה, ו-flex-wrap מאפשר לה לעבור שורה במסכים קטנים ולהישאר ממורכזת:
באיזו שיטה להשתמש
| מצב | השתמשו ב |
|---|---|
| תמונה בפסקה או בבלוק פשוט | text-align: center על ההורה |
| אפשר לעצב רק את התמונה | display: block; margin: 0 auto; |
| מרכוז בשני הכיוונים בתוך תיבה | Grid place-items: center (או flexbox) על התיבה |
| שורה של תמונות | Flexbox עם justify-content: center |
| תמונה עם כיתוב | <figure> עם text-align: center |
| תמונת רקע, לא תוכן | background-position: center, ראו background-image |
הדרכים הישנות, ולמה לא
עדיין תמצאו אותן במדריכים ישנים:
<!-- obsolete: do not use -->
<center><img src="logo.png" alt="Logo"></center>
<img src="logo.png" alt="Logo" align="center">
<center> והתכונה align הוסרו מ-HTML. דפדפנים עדיין מציגים את <center> בשביל תאימות לאחור, ו-align="center" על תמונה אפילו לא ממרכז אותה אופקית: דפדפנים מתייחסים אליו כיישור אנכי בתוך השורה. השתמשו באחת משיטות ה-CSS שלמעלה.
טעויות נפוצות
text-align: centerעל ה-<img>. שימו אותו על ההורה.margin: 0 autoעל תמונת inline. הוסיפוdisplay: block.- מרכוז אנכי בלי גובה להורה. התיבה מתכווצת לגודל התמונה, ולא נשאר מקום שבו אפשר למרכז.
float: center. אין ערך כזה. float הולך רק לצד אחד.- שכחה של
alt. תמונה ממורכזת עדיין צריכה טקסט חלופי; השתמשו ב-alt=""רק לתמונות קישוטיות לגמרי. - תמונה מתוחה. הגדרה של
widthוגםheightב-CSS לערכים עם יחס שונה מעוותת אותה. הגדירו אחד מהם והשתמשו ב-height: auto, או הוסיפוobject-fit: cover.
שאלות נפוצות
איך ממרכזים תמונה ב-HTML?
שמים text-align: center על האלמנט שמכיל אותה, למשל <p style="text-align: center;"><img src="logo.png" alt="Logo"></p>. תמונה היא inline כברירת מחדל, ולכן היא מתמרכזת כמו מילה בטקסט.
איך ממרכזים תמונה עם margin auto?
קודם הופכים את התמונה לבלוק: img { display: block; margin: 0 auto; }. margin אוטומטי לא ממרכז אלמנטי inline, ותמונה היא inline עד שמשנים את זה.
איך ממרכזים תמונה אנכית ואופקית?
הופכים את המכל שלה ל-grid (או flexbox) עם גובה: .box { display: grid; place-items: center; height: 300px; }. התמונה יושבת אז באמצע התיבה.
אפשר להשתמש בתגית <center> או ב-align="center" כדי למרכז תמונה?
לא. <center> והתכונה align על <img> מיושנות ב-HTML5. דפדפנים עדיין מציגים את <center> בשביל עמודים ישנים, אבל align="center" על תמונה מיישר אותה אנכית בתוך השורה, לא אופקית. השתמשו ב-CSS.
למה יש רווח קטן מתחת לתמונה הממורכזת שלי?
תמונת inline יושבת על קו הבסיס של הטקסט, ומשאירה מקום מתחתיה לזנבות של אותיות. הגדירו display: block על התמונה, או vertical-align: middle, והרווח ייעלם.