Menu
flag Ar iconالعربيةdown icon

صورة الخلفية background-image في CSS: الحجم والموضع والتكرار

تضع background-image صورة أو تدرجًا لونيًا خلف محتوى العنصر. تعلّم url() والتدرجات، وbackground-size (cover وcontain)، وbackground-position، وbackground-repeat، وتكديس عدة خلفيات، والاختصار background.

تحتوي هذه الصفحة على محررات قابلة للتشغيل - حرّر، شغّل، وشاهد النتيجة فوراً.

كيف تضيف صورة خلفية

تطلي background-image صورة خلف محتوى العنصر وحشوه وحده. افتراضيًا تبدأ من الزاوية العلوية اليسرى لصندوق الحشو، وتحتفظ بحجمها الطبيعي، وتتكرر لتملأ الصندوق:

في مشروع حقيقي يشير url() إلى ملف: url("images/hero.jpg"). المسار نسبي إلى ملف الأنماط الذي يحتويه (أو إلى الصفحة، في حالة العنصر <style>). تستخدم الأمثلة في هذه الصفحة صور SVG صغيرة مكتوبة مباشرة كعناوين data: كي تعمل في أي مكان.

أمران يجب معرفتهما من البداية:

  • الخلفية لا تعطي العنصر حجمًا. عنصر div فارغ بصورة خلفية ارتفاعه 0px. أعطه محتوى أو حشوًا أو 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.

الاختصار 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هل يبدأ الموضع من حافة الحد أم الحشو أم المحتوى
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 programming languages illustration

تعلّم البرمجة مع Coddy

ابدأ الآن