সিএসএস গ্রিড এবং জাভাস্ক্রিপ্ট ব্যবহার করে পিন্টারেস্ট এর মতো গ্রিড লেআউট তৈরি করতে হয় কিভাবে

পিন্টারেস্ট একটি সোশ্যাল মিডিয়া ওয়েবসাইট যেটা বিশেষ করে ইমেজ ভিত্তিক। তো মূল কথা হচ্ছে যে পিন্টারেস্ট এর ইমেজ গ্যালারির যে গ্রিড লেআউট সেটা অনেক জনপ্রিয়। গ্রিড লেআউট টি মেশনরি (Masonry) স্টাইলের। পিন্টারেস্ট এর লেআউট দেখার পর আপনারা হয়তো অনেকেই ভেবেছেন যে কিভাবে পিন্টারেস্ট এর মত লেআউট তৈরি করা যায়। তো যদি ভেবেই থাকেন তাহলে আজকের এই পোস্ট করতে চলেছে আপনার ভাবনার অবসান। কেননা আজকের পোস্টে আলোচনা করা হবে কিভাবে সিএসএস গ্রিড এবং জাভাস্ক্রিপ্ট ব্যবহার করে পিন্টারেস্ট এর মতো গ্রিড লেআউট তৈরি করা যায়। তাহলে চলুন আর কথা না বাড়িয়ে জাম্প করা যাক মূল পোস্টে।


পিন্টারেস্ট এর মতো গ্রিড লেআউট তৈরি করার জন্য আমাদের এইচটিএমএল, সিএসএস এবং জাভাস্ক্রিপ্ট তিনটি ল্যাঙ্গুয়েজের প্রয়োজন হবে। তো প্রথমে নিচের এইচটিএমএল এর মত করে প্রথমে একটি প্যারেন্ট ডিব(div) এর মধ্যে প্রতিটি গ্রিড এর জন্য চাইল্ড ডিব নিন এবং চাইল্ড ডিব এর ভিতরে আরেকটি ডিব নিন যেটার ভিতরে গ্রিড এর সকল কনটেন্ট থাকবে। আর হ্যা ক্লাস নেম গুলো আমাদের ডেমো এইচটিএমএল এর মতো করেই দেবেন, তা না হলে আবার সিএসএস জাভাস্ক্রিপ্ট সবকিছু আবারো মডিফাই করতে হবে।
<div class="grid">
  <div class="grid-item">
    <div class="grid-item-inner">
        <img src="https://via.placeholder.com/300x600/fff/555.png"/>
    </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x400/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x600/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x300/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x300/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x600/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x500/fff/555.png"/>
      </div>
  </div>
  
  <div class="grid-item">
      <div class="grid-item-inner">
          <img src="https://via.placeholder.com/300x300/fff/555.png"/>
      </div>
  </div>
</div>


আমাদের দেওয়া ডেমো এইচটিএমএল এর মত করে আপনার এইচটিএমএল তৈরি করার পর এবার নিচের সিএসএস কোডটুকু কপি করে আপনার সিএসএস এর মধ্যে যুক্ত করে দিন। আমাদের দেওয়া সিএসএস দিয়ে শুধু লেআউট তৈরি করা হয়েছে। আপনি আপনার প্রয়োজন অনুযায়ী সেটা স্টাইল করে নিতে পারবেন।
.grid {
    display: grid;
    grid-gap: 10px;
    grid-template-columns: repeat(auto-fill, minmax(150px, 1fr));
    grid-auto-rows: 0;
    padding: 10px;
    background: #99f;
}
.grid-item {
    background: #fff;
    border-radius: 10px;
    overflow: hidden;
}
.grid-item img {
    width: 100%;
}

এইচটিএমএল এবং সিএসএস এর কাজ শেষ হলে এবার নিচের জাভাস্ক্রিপ্ট কোডটুকু কপি করে আপনার জাভাস্ক্রিপ্ট এর মধ্যে যুক্ত করে নিন। আর হ্যা গ্রিডের মধ্যে ইমেজ ব্যবহার করলে অবশ্যই এই (https://cdnjs.cloudflare.com/ajax/libs/jquery.imagesloaded/4.1.1/imagesloaded.pkgd.min.js) এক্সটার্নাল জাভাস্ক্রিপ্ট ফাইলটি আপনার এইচটিএমএল এর সাথে লিঙ্ক করে নেবেন।
function resizeGridItem(item){
  grid = document.getElementsByClassName("grid")[0];
  rowHeight = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-auto-rows'));
  rowGap = parseInt(window.getComputedStyle(grid).getPropertyValue('grid-row-gap'));
  rowSpan = Math.ceil((item.querySelector('.grid-item-inner').getBoundingClientRect().height+rowGap)/(rowHeight+rowGap));
    item.style.gridRowEnd = "span "+rowSpan;
}

function resizeAllGridItems(){
  allItems = document.getElementsByClassName("grid-item");
  for(x=0;x<allItems.length;x++){
    resizeGridItem(allItems[x]);
  }
}

function resizeInstance(instance){
  item = instance.elements[0];
  resizeGridItem(item);
}

window.onload = resizeAllGridItems();
window.addEventListener("resize", resizeAllGridItems);

allItems = document.getElementsByClassName("grid-item");
for(x=0;x<allItems.length;x++){
  imagesLoaded( allItems[x], resizeInstance);
}

তো পোস্ট মূলত শেষ। আপনি যদি পুরো প্রজেক্ট এর সকল কোড ডাউনলোড করে রাখতে চান তাহলে নিচে প্রজেক্ট এর গুগল ড্রাইভ লিঙ্ক দিলাম সেখান থেকে ডাউনলোড করতে পারবেন, ধন্যবাদ সবাইকে।

Download From Google Drive

Getting Info...

إرسال تعليق

Cookie Consent
We serve cookies on this site to analyze traffic, remember your preferences, and optimize your experience.
Oops!
It seems there is something wrong with your internet connection. Please connect to the internet and start browsing again.
Site is Blocked
Sorry! This site is not available in your country.