নতুন CSS প্রপার্টি যা প্রতিক্রিয়াশীল লেআউটে ব্যবধান বজায় রাখতে সাহায্য করে।
আকৃতির অনুপাত
আকৃতির অনুপাতকে সাধারণত দুটি পূর্ণসংখ্যা এবং একটি কোলন হিসাবে প্রকাশ করা হয়: প্রস্থ:উচ্চতা, বা x:y। ফটোগ্রাফির জন্য সবচেয়ে সাধারণ আকৃতির অনুপাত হল 4:3 এবং 3:2, যখন ভিডিও এবং আরও সাম্প্রতিক ভোক্তা ক্যামেরাগুলিতে একটি 16:9 অনুপাত থাকে।
প্রতিক্রিয়াশীল ডিজাইনের আবির্ভাবের সাথে, দৃষ্টিভঙ্গি অনুপাত বজায় রাখা ওয়েব ডেভেলপারদের জন্য ক্রমবর্ধমান গুরুত্বপূর্ণ হয়ে উঠেছে, বিশেষত যেহেতু উপলব্ধ স্থানের উপর ভিত্তি করে চিত্রের মাত্রা ভিন্ন হয় এবং উপাদানের আকার পরিবর্তন হয়।
যেখানে আকৃতির অনুপাত বজায় রাখা গুরুত্বপূর্ণ হয়ে ওঠে তার কিছু উদাহরণ হল:
- প্রতিক্রিয়াশীল আইফ্রেম তৈরি করা, যেখানে সেগুলি পিতামাতার প্রস্থের 100%, এবং উচ্চতা একটি নির্দিষ্ট ভিউপোর্ট অনুপাত থাকা উচিত
- যখন আইটেমগুলি লোড হয় এবং স্থান নেয় তখন পুনরায় বিন্যাস রোধ করতে চিত্র, ভিডিও এবং এম্বেডগুলির জন্য অন্তর্নিহিত স্থানধারক পাত্র তৈরি করা
- ইন্টারেক্টিভ ডেটা ভিজ্যুয়ালাইজেশন বা SVG অ্যানিমেশনের জন্য অভিন্ন, প্রতিক্রিয়াশীল স্থান তৈরি করা
- কার্ড বা ক্যালেন্ডার তারিখের মতো বহু-উপাদান উপাদানগুলির জন্য অভিন্ন, প্রতিক্রিয়াশীল স্থান তৈরি করা
- বিভিন্ন মাত্রার একাধিক ছবির জন্য অভিন্ন, প্রতিক্রিয়াশীল স্থান তৈরি করা (
object-fit
পাশাপাশি ব্যবহার করা যেতে পারে)
অবজেক্ট-ফিট
একটি দিক অনুপাত সংজ্ঞায়িত করা আমাদের একটি প্রতিক্রিয়াশীল প্রসঙ্গে মিডিয়া আকার দিতে সহায়তা করে। এই বালতির আরেকটি টুল হল object-fit
প্রপার্টি, যা ব্যবহারকারীদের বর্ণনা করতে সক্ষম করে যে কীভাবে একটি ব্লকের মধ্যে একটি অবজেক্ট (যেমন ছবি) সেই ব্লকটি পূরণ করবে:
initial
এবং fill
মানগুলি স্থানটি পূরণ করতে চিত্রটিকে পুনরায় সামঞ্জস্য করে। আমাদের উদাহরণস্বরূপ, এটি চিত্রটি স্কুইশ এবং অস্পষ্টতার কারণ করে, কারণ এটি পিক্সেলগুলি পুনরায় সামঞ্জস্য করে। আদর্শ নয়। object-fit: cover
স্থান পূরণ করতে চিত্রের ক্ষুদ্রতম মাত্রা ব্যবহার করে এবং এই মাত্রার উপর ভিত্তি করে এটিতে ফিট করার জন্য চিত্রটি ক্রপ করে। এটি এর সর্বনিম্ন সীমানায় "জুম ইন"। object-fit: contain
নিশ্চিত করে যে সম্পূর্ণ চিত্রটি সর্বদা দৃশ্যমান হয়, এবং তাই cover
বিপরীতে, যেখানে এটি বৃহত্তম সীমানার আকার নেয় (উপরের আমাদের উদাহরণে এটি প্রস্থ) এবং এর অন্তর্নিহিত আকৃতির অনুপাত বজায় রাখতে চিত্রটির আকার পরিবর্তন করে স্থানের মধ্যে ফিট করার সময়। object-fit: none
ক্ষেত্রেই তার কেন্দ্রে (ডিফল্ট অবজেক্টের অবস্থান) প্রাকৃতিক আকারে কাটা ছবি দেখায় না।
object-fit: cover
বিভিন্ন মাত্রার চিত্রগুলির সাথে কাজ করার সময় একটি সুন্দর অভিন্ন ইন্টারফেস নিশ্চিত করতে বেশিরভাগ পরিস্থিতিতে কাজ করে, তবে, আপনি এইভাবে তথ্য হারাবেন (ছবিটি তার দীর্ঘতম প্রান্তে কাটা হয়েছে)।
যদি এই বিবরণগুলি গুরুত্বপূর্ণ হয় (উদাহরণস্বরূপ, সৌন্দর্য পণ্যগুলির সমতল স্তরের সাথে কাজ করার সময়), গুরুত্বপূর্ণ বিষয়বস্তু ক্রপ করা গ্রহণযোগ্য নয়। তাই আদর্শ দৃশ্যকল্প হবে বিভিন্ন আকারের প্রতিক্রিয়াশীল ছবি যা ক্রপ না করেই UI স্পেসের সাথে মানানসই।
পুরানো হ্যাক: padding-top
সাথে আকৃতির অনুপাত বজায় রাখা
এইগুলিকে আরও প্রতিক্রিয়াশীল করার জন্য, আমরা আকৃতির অনুপাত ব্যবহার করতে পারি। এটি আমাদের একটি নির্দিষ্ট অনুপাতের আকার সেট করতে এবং বাকি মিডিয়াকে একটি পৃথক অক্ষের (উচ্চতা বা প্রস্থ) উপর ভিত্তি করে তৈরি করতে দেয়।
একটি চিত্রের প্রস্থের উপর ভিত্তি করে আকৃতির অনুপাত বজায় রাখার জন্য বর্তমানে একটি ভাল-স্বীকৃত ক্রস-ব্রাউজার সমাধান "প্যাডিং-টপ হ্যাক" নামে পরিচিত। এই সমাধানটির জন্য একটি অভিভাবক ধারক এবং একটি একেবারে রাখা শিশু ধারক প্রয়োজন। তারপরে padding-top
হিসাবে সেট করার জন্য একটি শতাংশ হিসাবে আকৃতির অনুপাত গণনা করবে। যেমন:
- 1: 1 দিক অনুপাত = 1/1 = 1 =
padding-top: 100%
- 4:3 আকৃতির অনুপাত = 3 / 4 = 0.75 =
padding-top: 75%
- 3:2 আকৃতির অনুপাত = 2 / 3 = 0.66666 =
padding-top: 66.67%
- 16:9 আকৃতির অনুপাত = 9 / 16 = 0.5625 =
padding-top: 56.25%
এখন যেহেতু আমরা আকৃতির অনুপাতের মান চিহ্নিত করেছি, আমরা এটি আমাদের মূল কন্টেইনারে প্রয়োগ করতে পারি। নিম্নলিখিত উদাহরণ বিবেচনা করুন:
<div class="container">
<img class="media" src="..." alt="...">
</div>
তারপরে আমরা নিম্নলিখিত সিএসএস লিখতে পারি:
.container {
position: relative;
width: 100%;
padding-top: 56.25%; /* 16:9 Aspect Ratio */
}
.media {
position: absolute;
top: 0;
}
aspect-ratio
সাথে দিক অনুপাত বজায় রাখা
দুর্ভাগ্যবশত, এই padding-top
মানগুলি গণনা করা খুব স্বজ্ঞাত নয়, এবং কিছু অতিরিক্ত ওভারহেড এবং অবস্থানের প্রয়োজন। নতুন অভ্যন্তরীণ aspect-ratio
CSS সম্পত্তির সাথে, দৃষ্টিভঙ্গি অনুপাত বজায় রাখার ভাষা আরও স্পষ্ট।
একই মার্কআপের সাহায্যে, আমরা প্রতিস্থাপন করতে পারি: padding-top: 56.25%
aspect-ratio: 16 / 9
, width
/ height
একটি নির্দিষ্ট অনুপাতের aspect-ratio
সেট করে।
.container {
width: 100%;
padding-top: 56.25%;
}
.container {
width: 100%;
aspect-ratio: 16 / 9;
}
padding-top
পরিবর্তে aspect-ratio
ব্যবহার করা অনেক বেশি স্পষ্ট, এবং প্যাডিং বৈশিষ্ট্যটিকে তার স্বাভাবিক সুযোগের বাইরে কিছু করার জন্য ওভারহল করে না।
এই নতুন বৈশিষ্ট্যটি auto
আকৃতির অনুপাত সেট করার ক্ষমতাও যোগ করে, যেখানে "একটি অভ্যন্তরীণ অনুপাতের সাথে প্রতিস্থাপিত উপাদানগুলি সেই আকৃতির অনুপাত ব্যবহার করে; অন্যথায় বাক্সের কোন পছন্দের অনুপাত নেই।" যদি auto
এবং এ <ratio>
উভয়ই একসাথে নির্দিষ্ট করা থাকে তবে পছন্দসই দিক অনুপাতটি height
দ্বারা বিভক্ত width
নির্দিষ্ট অনুপাত হ'ল যদি না এটি একটি অভ্যন্তরীণ দিক অনুপাতের সাথে প্রতিস্থাপন উপাদান হয়, তবে সেই ক্ষেত্রে সেই দিক অনুপাতটি ব্যবহার করা হয়।
উদাহরণ: একটি গ্রিডে ধারাবাহিকতা
এটি সিএসএস গ্রিড এবং ফ্লেক্সবক্সের মতো সিএসএস লেআউট মেকানিজমের সাথে সত্যিই ভাল কাজ করে। বাচ্চাদের সাথে একটি তালিকা বিবেচনা করুন যা আপনি 1:1 অনুপাত বজায় রাখতে চান, যেমন স্পনসর আইকনগুলির একটি গ্রিড:
<ul class="sponsor-grid">
<li class="sponsor">
<img src="..." alt="..."/>
</li>
<li class="sponsor">
<img src="..." alt="..."/>
</li>
</ul>
.sponsor-grid {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(120px, 1fr));
}
.sponsor img {
aspect-ratio: 1 / 1;
width: 100%;
object-fit: contain;
}
উদাহরণ: লেআউট শিফট প্রতিরোধ
aspect-ratio
আরেকটি দুর্দান্ত বৈশিষ্ট্য হল এটি ক্রমবর্ধমান লেআউট শিফট প্রতিরোধ করতে এবং আরও ভাল ওয়েব ভাইটাল সরবরাহ করতে স্থানধারক স্থান তৈরি করতে পারে। এই প্রথম উদাহরণে, একটি API থেকে একটি সম্পদ লোড করা যেমন Unsplash মিডিয়ার লোডিং শেষ হলে একটি লেআউট শিফট তৈরি করে।
aspect-ratio
ব্যবহার করে, অন্যদিকে, এই লেআউট শিফ্ট প্রতিরোধ করার জন্য একটি স্থানধারক তৈরি করে:
img {
width: 100%;
aspect-ratio: 8 / 6;
}
বোনাস টিপ: আকৃতির অনুপাতের জন্য চিত্র বৈশিষ্ট্য
একটি ছবির আকৃতির অনুপাত সেট করার আরেকটি উপায় হল ইমেজ অ্যাট্রিবিউটের মাধ্যমে। আপনি যদি সময়ের আগে চিত্রের মাত্রাগুলি জানেন তবে এই মাত্রাগুলিকে এর width
এবং height
হিসাবে সেট করা একটি সর্বোত্তম অনুশীলন ৷
উপরের আমাদের উদাহরণের জন্য, মাত্রাগুলি 800px বাই 600px হয় তা জেনে চিত্রের মার্কআপটি দেখতে হবে: <img src="image.jpg" alt="..." width="800" height="600">
। যদি প্রেরিত চিত্রটির একই দিক অনুপাত থাকে তবে সেই সঠিক পিক্সেল মানগুলি অগত্যা নয়, আমরা এখনও অনুপাতটি সেট করতে চিত্রের বৈশিষ্ট্য মানগুলি ব্যবহার করতে পারি, width: 100%
যাতে চিত্রটি সঠিক স্থানটি গ্রহণ করে। সব একসাথে যা দেখতে হবে:
<!-- Markup -->
<img src="image.jpg" alt="..." width="8" height="6">
/* CSS */
img {
width: 100%;
}
শেষ পর্যন্ত, প্রভাবটি সিএসএসের মাধ্যমে চিত্রটিতে aspect-ratio
নির্ধারণের সমান এবং ক্রমবর্ধমান লেআউট শিফট এড়ানো যায় ( কোডপেনের ডেমো দেখুন )।
উপসংহার
নতুন aspect-ratio
সিএসএস সম্পত্তি সহ, একাধিক আধুনিক ব্রাউজার জুড়ে চালু করা, আপনার মিডিয়া এবং লেআউট পাত্রে যথাযথ দিক অনুপাত বজায় রাখা আরও কিছুটা সোজা হয়ে যায়।
আনস্প্ল্যাশের মাধ্যমে অ্যামি শ্যাম্বলেন এবং লিওনেল গুস্তাভের ছবি।