Menu

CSS Background Image: גודל, מיקום, חזרה ו-cover

background-image מציב תמונה או מעבר צבע מאחורי התוכן של אלמנט. למדו את url() ומעברי צבע, background-size (cover ו-contain), background-position, background-repeat, שכבות של כמה רקעים, והקיצור background.

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

איך מוסיפים תמונת רקע

background-image מצייר תמונה מאחורי התוכן, ה-padding והגבול של האלמנט. כברירת מחדל היא מתחילה בפינה העליונה השמאלית של תיבת ה-padding, שומרת על הגודל הטבעי שלה וחוזרת על עצמה כדי למלא את התיבה:

בפרויקט אמיתי ה-url() מצביע על קובץ: url("images/hero.jpg"). הנתיב יחסי לגיליון הסגנונות שמכיל אותו (או לעמוד, במקרה של אלמנט <style>). הדוגמאות בעמוד הזה משתמשות בתמונות SVG קטנות שנכתבו ישירות בקוד ככתובות data:, כדי שירוצו בכל מקום.

שני דברים שכדאי לדעת מההתחלה:

  • רקע לא נותן לאלמנט גודל. div ריק עם תמונת רקע הוא בגובה 0px. תנו לו תוכן, padding, height או aspect-ratio.
  • תמונת רקע היא קישוט. קוראי מסך מדלגים עליה ואין לה טקסט חלופי. תמונה שנושאת משמעות צריכה להיות באלמנט <img>.

background-size: cover, contain ואורכים

background-size משנה את גודל התמונה. שתי מילות המפתח שומרות על הפרופורציות שלה:

התמונה רחבה פי שניים מגובהה, וכל תיבה היא ריבוע.

ערךתוצאה
auto (ברירת מחדל)הגודל המקורי של התמונה
coverמוגדלת עד שהתיבה מלאה לגמרי; העודף נחתך
containמוגדלת עד שכל התמונה נכנסת; נשארים פסים אפורים בשני צדדים
200pxברוחב 200px, הגובה לפי הפרופורציה
50% autoחצי מרוחב התיבה, הגובה לפי הפרופורציה
100% 100%בדיוק בגודל התיבה; מעוותת את התמונה אם הפרופורציות שונות

cover הוא הבחירה הרגילה לבאנרים ראשיים ולכרטיסים. contain מתאים ללוגואים ולאיורים שאסור לחתוך אף פעם.

background-position ו-background-repeat

background-position ממקם את התמונה בתוך התיבה, עם מילות מפתח (top, center, bottom, left, right), אחוזים או אורכים. background-repeat שולט בפריסת האריחים. נסו כמה ערכים:

נסו את המיקומים top right, bottom 10px right 20px ו-25% 75%, ואת ערכי החזרה repeat-x, repeat-y, space (אריחים עם רווחים כך שאף אחד לא נחתך) ו-round (אריחים שגודלם משתנה כך שייכנס מספר שלם מהם).

שכבות: כמה רקעים וטקסט מעל תמונה

background-image מקבל רשימה מופרדת בפסיקים. השכבה הראשונה מצוירת למעלה. השימוש הנפוץ הוא מעבר צבע חצי שקוף מעל תמונה, כדי שטקסט לבן יישאר קריא:

aspect-ratio נותן לתיבה הריקה גובה, ו-background-size: cover חל על שתי השכבות. למתכונים נוספים של מעברי צבע, ראו CSS gradients.

הקיצור background

background קובע את כל מאפייני הרקע בשורה אחת. הגודל חייב לבוא מיד אחרי המיקום, מופרד בלוכסן, והצבע נכתב בשכבה האחרונה:

.hero {
  background: url("hero.jpg") center / cover no-repeat, #1f2937;
}
/* the same as */
.hero {
  background-image: url("hero.jpg");
  background-position: center;
  background-size: cover;
  background-repeat: no-repeat;
  background-color: #1f2937;
}

צבע הגיבוי מוצג בזמן שהתמונה נטענת, וגם אם היא נכשלת. כל מאפיין שלא כתבתם בקיצור מתאפס לברירת המחדל שלו, אז כתבו קודם את הקיצור ואחריו את המאפיינים הבודדים.

מאפייני רקע נוספים

מאפייןמה הוא עושה
background-attachment: fixedהתמונה נשארת במקומה בזמן שהעמוד נגלל (לא נתמך ב-Safari של iOS)
background-originאם המיקום מתחיל מקצה הגבול, ה-padding או התוכן
background-clipאיפה הרקע נצבע, כולל text כדי למלא אותיות
background-blend-modeממזג שכבות זו בזו, כמו multiply

טעויות נפוצות

  • נתיב שגוי. url() בגיליון סגנונות יחסי לקובץ ה-CSS, לא לעמוד ה-HTML.
  • אלמנט ריק. אין לו גובה, אז לתמונה אין איפה להופיע.
  • שכחה של no-repeat עם contain או עם תמונה קטנה: היא נפרסת כאריחים.
  • מתיחה עם 100% 100% כשהתכוונתם ל-cover.
  • תמונות חשובות כרקעים. השתמשו ב-<img> עם טקסט חלופי לתוכן; רקעים בלתי נראים לקוראי מסך.
  • חסרים מירכאות סביב כתובת data: שמכילה רווחים או מירכאות. כתבו תמיד url("...").

שאלות נפוצות

איך מוסיפים תמונת רקע ב-CSS?

משתמשים ב-background-image: url("photo.jpg"); על האלמנט. הנתיב יחסי לקובץ ה-CSS (או לעמוד, במקרה של תכונת style או אלמנט <style>). תנו לאלמנט גודל, כי רקע אף פעם לא גורם לאלמנט ריק לגדול.

איך גורמים לתמונת רקע לכסות את כל האלמנט?

משתמשים ב-background-size: cover; יחד עם background-position: center;. התמונה מוגדלת או מוקטנת עד שהיא ממלאת את התיבה לגמרי, תוך שמירה על הפרופורציות, והעודף נחתך.

מה ההבדל בין cover ל-contain?

cover ממלא את כל התיבה וחותך את מה שלא נכנס. contain מציג את כל התמונה ומשאיר שטח ריק בשני צדדים כשהפרופורציות שונות.

איך מונעים מתמונת רקע לחזור על עצמה?

מוסיפים background-repeat: no-repeat;. כברירת מחדל תמונת רקע נפרסת כאריחים בשני הכיוונים כדי למלא את האלמנט.

למה תמונת הרקע שלי לא מופיעה?

הסיבות הנפוצות הן נתיב שגוי ב-url() (הוא יחסי לקובץ ה-CSS), אלמנט בלי גובה כי אין בו תוכן, או קיצור background מאוחר יותר שאיפס את התמונה.

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

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

להתחיל