تقنية

object-fit: كيف تختار بين قص الصورة وترك فراغ حولها؟

ثلاثة أطر متساوية تعرض دائرة وعلامتي حافة: فراغ مع contain، وقص مع cover، وتمدد مع fill.
رسم مؤلف لنسبة 2:1 داخل إطار مربع؛ المربعات الخارجية متساوية. [3]

قد تتشوه الصورة داخل بطاقة مربعة أو تختفي أطرافها. يبدأ الفرق بين cover وcontain للصور من القرار المطلوب: هل تريد كل الصورة داخل الإطار، أم تريد ملء الإطار ولو غاب جزء منها؟ الخاصية object-fit تحدد طريقة عرض المحتوى داخل عنصر الصورة. [1]

تحافظ contain على الصورة كاملة مع فراغ محتمل، بينما تملأ cover الإطار وتحافظ على النسبة مع قص الجزء الزائد عند اختلاف النسب. [1]

الخلاصة السريعة

  • تحافظ contain وcover على نسبة الصورة؛ أما fill فتملأ الصندوق بتغيير النسبة عند الحاجة، ولذلك قد تتحول الدائرة إلى شكل بيضاوي. [1]
  • لصورة نقطية أبعادها 600×300 داخل صندوق محتوى 240×240، تعطي contain محتوى 240×120، وتعطي cover محتوى 480×240؛ مع التوسيط يبقى فراغ 60 أعلى وأسفل في الأولى، ويُقص 120 من كل جانب من المحتوى المكبّر في الثانية. [3]
  • تحدد object-position موضع المحتوى داخل الصندوق؛ القيمة الابتدائية 50% 50% توسّطه، بينما left top تحاذي حافتيه اليسرى والعليا. [2]
  • طبّق object-fit على img وحدد أبعاد عنصر الصورة نفسه؛ في تجربتنا نثبتها عند 240px لكل اتجاه، ونقارن الملف نفسه دون حشو أو حدود داخل القياس. [4]

ما الذي يتغير بين القيم الثلاث؟

تحافظ contain وcover على نسبة الصورة؛ أما fill فتملأ الصندوق بتغيير النسبة عند الحاجة، ولذلك قد تتحول الدائرة إلى شكل بيضاوي. [1]

اختر contain حين تكون الأطراف جزءًا من المعلومة، مثل مخطط يجب أن يظهر كاملًا. واختر cover حين تكون أولوية التصميم ملء مساحة محددة ويمكن الاستغناء عن الأطراف. أما fill فتعرض جميع المحتويات داخل المساحة، لكن ملامحها قد تتمدد في اتجاه أكثر من الآخر. [1]

احسب التحجيم قبل الحكم على القص

لصورة نقطية أبعادها 600×300 داخل صندوق محتوى 240×240، تعطي contain محتوى 240×120، وتعطي cover محتوى 480×240؛ مع التوسيط يبقى فراغ 60 أعلى وأسفل في الأولى، ويُقص 120 من كل جانب من المحتوى المكبّر في الثانية. [3]

النسبتان اللازمتان للوصول إلى الإطار هما 240÷600=0.4 و240÷300=0.8. تأخذ contain الأصغر لتسع الصندوق، وتأخذ cover الأكبر لتغطيه. الأرقام المقصوصة تخص حجم العرض بعد التحجيم؛ لا تعني حذف بكسلات من الملف. وفي fill يصبح المحتوى 240×240: العامل الأفقي 0.4 والعمودي 0.8. هذه الحسابات تخص صورتنا ذات النسبة المعروفة والأبعاد الموجبة. [3]

غيّر موضع القص حين تحتاج إلى طرف معين

تحدد object-position موضع المحتوى داخل الصندوق؛ القيمة الابتدائية 50% 50% توسّطه، بينما left top تحاذي حافتيه اليسرى والعليا. [2]

بعد تنفيذ المقارنة الأساسية، أضف السطر التالي إلى تنسيقها لتجربة object-position: left top مع cover؛ يبقى الطرف الأيسر ظاهرًا ويتركز القص في الطرف الأيمن. لم يتغير حجم الصندوق، وإنما تحرك المحتوى بالنسبة إليه. أعد قيمة القاعدة إلى center لاسترجاع التوسيط، وقارن العلامة القريبة من الحافة. إذا كانت الصورة كاملة داخل الإطار، فقد يظهر أثر المحاذاة في توزيع الفراغ بدل اختفاء التفاصيل. [2]

مرّر الشيفرة أفقيًا عند الحاجة.

.cover { object-position: left top; }

تجربة قصيرة بصورة واحدة

طبّق object-fit على img وحدد أبعاد عنصر الصورة نفسه؛ في تجربتنا نثبتها عند 240px لكل اتجاه، ونقارن الملف نفسه دون حشو أو حدود داخل القياس. [4]

اختر ملفًا بنسبة عرض إلى ارتفاع 2:1 وسمّه sample.png، ثم استخدمه في ثلاثة عناصر img لها الفئات contain وcover وfill. غيّر قيمة واحدة في كل نسخة كما في الشيفرة. قارن ظهور الحواف وشكل دائرة أو مربع داخل الصورة؛ لا تكتفِ بقياس إطار العنصر لأن الأطر الثلاثة متساوية هنا. [4]

مرّر الشيفرة أفقيًا عند الحاجة.

img {
  display: block;
  width: 240px;
  height: 240px;
  padding: 0;
  border: 0;
  background: #dce7e4;
  object-position: center;
}
.contain { object-fit: contain; }
.cover { object-fit: cover; }
.fill { object-fit: fill; }

المصادر ومتابعة القراءة

  1. MDN: خاصية object-fit (يفتح في نافذة جديدة)developer.mozilla.org
  2. MDN: محاذاة object-position (يفتح في نافذة جديدة)developer.mozilla.org
  3. W3C: قياس محتوى الصورة (يفتح في نافذة جديدة)w3.org
  4. MDN: ملء الإطار بالصورة (يفتح في نافذة جديدة)developer.mozilla.org

أُعدّ هذا المقال بصياغة عربية أصلية بالاستناد إلى المصادر أعلاه، وهو مدخل تمهيدي إلى الموضوع. اقرأ منهجية المحتوى وحدوده.