Menu

Center Image ב-HTML ו-CSS: איך ממרכזים תמונה

<img> הוא אלמנט inline, ולכן הוא מתמרכז כמו טקסט: text-align: center על ההורה שלו. אפשר גם להפוך אותו לבלוק עם margin: 0 auto, או למרכז אותו עם flexbox או grid, כולל אנכית. כל שיטה רצה בזמן אמת ומודדת את התוצאה.

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

התשובה המהירה: 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, והרווח ייעלם.

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

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

להתחיל