object-fit

ویژگی object-fit تعیین می کند که محتوای عنصری از نوع Replaced چگونه در ابعاد مشخص شده اش رسم شود.

Replaced Element

به عناصری گفته می شود که محتوا و ابعاد آنها از منبعی خارج از محدوده سی اس اس تعیین می شوند. به عنوان مثال عنصر <video>، <img> و یا عناصری مثل <textarea> و <input>ها.

کاربرد object-fit

فرض کنید سایتی داریم که کاربران در آن پروفایل شخصی دارند و می توانند تصویر پروفایل برای خود مشخص کنند. قطعا ابعاد و اندازه ای که ما برای قسمت تصویر مشخص می کنیم برای تمام کاربران یکسان است ولی امکان اینکه کاربران تصاویری با ابعاد مختلف قرار دهند وجود دارد. و این امر باعث می شود تا گاهی تصویر افراد تناسب خود را از دست بدهد.

 
object-fit مشکل
 

در این مورد می توان از طریق این ویژگی تصاویر مختلف با ابعاد مختلف را طوری تنظیم کرد تا در ابعاد تعیین شده برای قسمت تصویر پروفایل به صورت قابل قبول نمایش داده شوند.

به عنوان مثال در مثال زیر اندازه عنصر تصویر را برابر با 100 در 100 پیکسل قرار داده ایم و از یکی از مقادیر این ویژگی استفاده می کنیم تا تصاویری که با ابعاد و تناسب متفاوت در آن قرار می گیرند هم بصورت مناسبی نمایش داده شوند:


img {
  display: block;
  width: 100px;
  height: 100px;
  object-fit: contain;
}

مقادیر ویژگی object-fit

تمام مقادیری که این ویژگی می تواند داشته باشد به شرح زیر هستند:


object-fit: fill | contain | cover | none | scale-down

fill

این مقدار، مقدار اولیه این ویژگی می باشد و باعث می شود تا اندازه محتوای عنصر طوری تغییر کند تا کل فضای مشخص شده برای عنصر را پر کند و همه محتوا قابل مشاهده باشد.

چون هدف این مقدار فقط این است که سراسر عنصر پوشیده از محتوا شود اگر تناسب ابعاد مشخص شده برای عنصر با تناسب ابعاد محتوا یکی نباشد محتوا کج و معوج شده و تناسب خود را از دست می دهد.

contain

contain باعث می شود تا محتوا به اندازه ای در بیاید که هم عرض و هم ارتفاع محتوا درون ناحیه ترسیم آن قرار بگیرند. توجه داشته باشید که این کار با حفظ تناسب عرض و ارتفاع محتوا صورت می گیرد.

تصویر متحرک زیر درک بهتری از این مقدار را به ما می دهد. در اولین حرکت فرض کنید تصویری بزرگتر از محیط ترسیم دارید این مقدار باعث کوچک شدن تصویر می شود تا جایی که کل تصویر قابل مشاهده باشد. در حالت دوم تصویر کوچکتر از محیط در نظر گرفته شده این بار مقدار contain باعث می شود تا تصویر تاجایی بزرگ شود تا اندازه عرض و یا ارتفاع تصویر متناسب با اندازه نگهدارنده شود:

 
contain کردن object-fit
 

اگر بخواهیم در یک جمله contain را تعریف کنیم خواهیم گفت این مقدار باعث می شود تا حداقل یک سمت محتوا برابر با نگهدارنده شود بطوری که کل محتوا قابل مشاهده باشد.

cover

cover باعث می شود تا مقدار کوچکتر بین عرض و ارتفاع, تمام سطح محیط ترسیم محتوا را بپوشاند و واضح است که مثلا اگر عرض کوچکتر از ارتفاع است و سطح را بعد از تغییر می پوشاند قطعا ارتفاع هم از آنجایی که بزرگتر است باعث پوشش عمودی سطح می شود.

تصویر متحرک زیر حالتی که تصویر اصلی از نگهدارنده کوچکتر است و حالتی که بزرگتر است را برای درک بهتر موضوع شبیه سازی می کند:

 
cover برای object-fit در css
 

 

none

این مقدار باعث می شود تا محتوا به هیچ عنوان تغییر اندازه ندهد و با همان اندازه ای که به ذات دارد درون ناحیه محتوای عنصر ترسیم شود.

مثلا فرض کنید ویدویی داریم با ابعاد 800 در 600 پیکسل و عنصر video بصورت زیر تنظیم شده است:


video {
  width: 100px;
  height: 100px;
  object-fit: none;
}

با توجه به مقادیر مشخص شده و ابعاد محتوا فقط گوشه ای از ویدیو در این ناحیه رسم می شود و کاربر نمی تواند تمام سطح ویدیو را مشاهده کند.

scale-down

این مقدار باعث می شود تا مرورگر مقادیر none و contain را برای محتوا و ابعاد مشخص شده برای عنصر آن مقایسه کند و هر کدام که باعث می شود تا اندازه نهایی محتوا کوچک تر باشد را انتخاب می کند.

به بیان دیگر اگر هیچ کدام از ابعاد محتوای ما بزرگتر از عرض و ارتفاع عنصر نباشند مقدار none برای محتوا اعمال می شود در غیر این صورت contain برنده مقایسه خواهد بود.

توجه کنیم که با توجه به نامی که برای این مقدار انتخاب شده است هدف این است که محتوا در کوچک ترین سایز ممکن نمایش داده شود.

مقایسه مقادیر ویژگی object-fit

در زیر تصویری با ابعاد ذاتی مشخص نمایش داده شده است و همینطور در موارد مختلف ابعاد تگ img برابر و با حاشیه قرمز مشخص شده است:

مقادیر ویژگی object-fit

اگر مقداری باعث شود تا محتوا سراسر عنصر را نپوشاند، قسمت های خالی پس زمینه عنصر را نمایش می دهند پس می توان مثلا پس زمینه عنصر img و یا video را با رنگی دلخواه تنظیم کرد.

دمو

دموی زیر در سایت موزیلا قرار گرفته است. می توانید با تغییر مقادیر به درک بهتر موضوع کمک کنید. (پس زمینه عنصر img قرمز می باشد)

 

See the Pen object-fit by Mojtaba Seyedi (@seyedi) on CodePen.


 

پشتیبانی مرورگر ها

پشتیبانی مرورگرها در سایت caniuse.com بصورت زیر می باشد:

6 دیدگاه برای “object-fit

  1. با سلام و تشکر از شما
    واقعا ً با جزئیاتی که قرار می دین و شکل های متحرک و دیگر عکس ها تفاوت ها رو بین خودتون و دیگر سایت ها رقم می زنید.
    خیلی خیلی کارتون بیسته و من همواره از سایت تون بهره می برم.

    امیدوارم ادامه بدین، بخش مرجع خیلی خوبه و یکی از اولین گزینه هایی هستش که من به وقت نیاز بهش رجوع می کنم. سپاسگزارم.

  2. من در خصوص عکس ها ی سری مشکلات دارم، یعنی نمی دونم چجوری باید در مواقع مختلف عمل کنم.

    اولین مسئله اینه که چه اوقاتی از img استفاده کنیم؟ و چه اوقاتی از background-image بهره ببریم برای قرار دادن عکس هامون؟
    دومیش اینه که در چه مواردی بهتره یا باید ابعاد عکس رو مشخص کنیم؟
    بعدیش هم اینکه چجوری به عکس مون اندازه بدیم؟ هر یک از موارد در چه مواردی کاربرد دارند؟ منظورم مقادیر cover, contain, none, … هستش.
    بعدشم اینکه برای خود عکس ها حالت های مختلفی می تونه باشه: 1 نگهدارنده عکس مون ابعاد نداره. 2 نگهدارنده ابعاد داره، اما خود عکس ها اندازه شون معلوم نیست، شاید بزرگتر یا کوچکتر باشند. 3) برخی عکس ها احتمالا از نگهدارنده بزرگترند 4) برخی عکسها احتمالا از نگهدارنده کوچکترند

    ی مسئله دیگه هم اینه که در چه مواردی باید از ی طراح ِ گرافیکی بخوایم که عکس مون حتما svg کنه؟ چه مواردی از ی سایت نیاز مبرمی به این نوع از عکس ها دارند؟ البته اگر همه ی عکس هامون svg بودند مطمئنا کارمون راحت میشدش. اما این مقدور نیست.

    اینها مواردی بودش که به نظر من می تونند پیش بیان. اگر امکانش هست اصولی رو درین باره می فرمایید؟ واقعا مشکل دارم با قرار دادن عکس ها.

    1. در چه مواردی هم بهتره که نگهدارنده یا خود عکس مون ابعاد داشته باشه؟ در چه مواردی بهتره ابعاد نداشته باشه؟

      چجوری عکس ها رو بصورت واکنش گرا کنیم؟ در چه مواردی کاربرد داره؟

  3. سلام خسته نباشید
    من واسه اندازه دادن به عکس به مشکل خوردم و عکسو براساس اندازه ارتفاع مشخص میکنه وقتی ارتفاع رو 500 پیکسل قرار میدم و عرض رو 100درصد اما عکس کل عرض رو پر نمیکنه چون ارتفاع رو 500 پیکسل قرار دادم و تناسب خودشو حفظ میکنه چطور میتونم جلوی اینکارو بگیرم و اندازه هایی که قرار میدم رو بگیره از گزینه important هم استفاده کردم نشد ممنون میشم راهنمایی کنید

سوال داری؟ برو به پنل پرسش و پاسخ

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *