সিএসএস গ্রিড মোড়ানো


126

মিডিয়া ক্যোয়ারী ব্যবহার না করেই কি সিএসএস গ্রিডের মোড়ক তৈরি করা সম্ভব?

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

এখানে কিছু নমুনা কোড রয়েছে :

.grid {
  display: grid;
  grid-gap: 10px;
  grid-auto-flow: column;
  grid-template-columns: 186px 186px 186px 186px;
}

.grid > * {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

এবং এখানে একটি জিআইএফ চিত্র রয়েছে:

আমি যা দেখছি তার জিআইএফ চিত্র

পার্শ্ব-নোট হিসাবে, যদি কেউ আমাকে বলতে পারে যে আমি কীভাবে সমস্ত আইটেমের প্রস্থ নির্দিষ্ট করে এড়াতে পারি grid-template-columnsযে আমি এর সাথে আছি তবে দুর্দান্ত। আমি বাচ্চাদের নিজস্ব প্রস্থ নির্দিষ্ট করতে পছন্দ করব।


2
grid-template-columns: auto auto auto auto;এই ক্ষেত্রে কাজ করে? =)
জাকুব চ্লেবোইকিজ

উত্তর:


219

স্বরলিপিটির পুনরাবৃত্তি সংখ্যা হিসাবে auto-fillবা auto-fitহিসাবে ব্যবহার করুন repeat()

repeat( [ <positive-integer> | auto-fill | auto-fit ] , <track-list> )

auto-fill

auto-fillপুনরাবৃত্তি সংখ্যা হিসাবে যখন দেওয়া হয়, গ্রিডের ধারক যদি প্রাসঙ্গিক অক্ষে একটি নির্দিষ্ট আকার বা সর্বাধিক আকার থাকে তবে পুনরাবৃত্তির সংখ্যাটি বৃহত্তম সম্ভাব্য ধনাত্মক পূর্ণসংখ্যা যা গ্রিডটিকে তার গ্রিড ধারককে উপচে ফেলে না দেয়।

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, 186px);
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

গ্রিডটি তার ধারকটিকে উপচে না ফেলে যথাসম্ভব অনেকগুলি ট্র্যাকের পুনরাবৃত্তি করবে।

পুনরাবৃত্তি () স্বরলিপিটির পুনরাবৃত্তি সংখ্যা হিসাবে স্বতঃপূরণ ব্যবহার করা

এই ক্ষেত্রে, উপরের উদাহরণটি দেওয়া (চিত্র দেখুন) , মাত্র 5 টি ট্র্যাকগুলি প্রবাহিত না করে গ্রিড-ধারককে ফিট করতে পারে। আমাদের গ্রিডে কেবল 4 টি আইটেম রয়েছে, তাই পঞ্চমটি অবশিষ্ট স্থানের মধ্যে খালি ট্র্যাক হিসাবে তৈরি করা হয়।

অবশিষ্ট স্থান, ট্র্যাক # 6, স্পষ্ট গ্রিড শেষ করে। এর অর্থ অন্য ট্র্যাক রাখার মতো পর্যাপ্ত জায়গা ছিল না।


auto-fit

auto-fitশব্দ হিসাবে একই আচরণ করবে auto-fillছাড়া যে পরে গ্রিড আইটেমটি বসানো অ্যালগরিদম অবশিষ্ট স্থান মধ্যে যে কোনো খালি ট্র্যাক ধসে করা হবে না 0

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fit, 186px);
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

গ্রিডটি তার ধারকটি উপচে না ফেলে এখনও যতগুলি সম্ভব ট্র্যাক পুনরাবৃত্তি করবে, তবে খালি ট্র্যাকগুলি ধসে পড়বে 0

একটি ধসে পড়া ট্র্যাকটির একটি নির্দিষ্ট ট্র্যাক সাইজিং ফাংশন হিসাবে গণ্য করা হয় 0px

পুনরাবৃত্তি () স্বরলিপিটির পুনরাবৃত্তি সংখ্যা হিসাবে স্বতঃ-ফিট ব্যবহার করা

auto-fillচিত্রের উদাহরণের বিপরীতে , খালি পঞ্চম ট্র্যাকটি ধসে গেছে এবং চতুর্থ আইটেমের পরে স্পষ্ট গ্রিডের সমাপ্ত হবে।


auto-fill বনাম auto-fit

minmax()ফাংশনটি ব্যবহার করার সময় উভয়ের মধ্যে পার্থক্য লক্ষণীয় ।

ব্যবহার করুন minmax(186px, 1fr)থেকে আইটেমগুলি পরিসীমা 186pxথেকে 186pxপ্লাস গ্রিড কন্টেইনারে অবশেষ স্থান ভগ্নাংশ।

ব্যবহার করার সময় auto-fill, খালি ট্র্যাক রাখার জায়গা না থাকলে আইটেমগুলি বাড়বে।

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>

ব্যবহার করার সময় auto-fit, আইটেমগুলি অবশিষ্ট স্থানটি পূরণ করতে বাড়বে কারণ সমস্ত খালি ট্র্যাকগুলি ধসে পড়েছে 0px

.grid {
  display: grid;
  grid-gap: 10px;
  grid-template-columns: repeat(auto-fit, minmax(186px, 1fr));
}

.grid>* {
  background-color: green;
  height: 200px;
}
<div class="grid">
  <div>1</div>
  <div>2</div>
  <div>3</div>
  <div>4</div>
</div>


খেলার মাঠ:

CodePen

স্বতঃপূর্ণ ট্র্যাকগুলি পরিদর্শন করা হচ্ছে

স্বতঃপূর্ণ


স্বয়ংক্রিয় ফিট ট্র্যাকগুলি পরিদর্শন করা হচ্ছে

স্বয়ংক্রিয়ভাবে মানানসই


3
এটি পরের লাইনে থাকা কেন্দ্রকে কীভাবে তৈরি করার কোনও উপায় আছে?
কেন্টকড্ডস

শুধু তোমার উপর আনমন বক্স সঙ্গে would মত display: gridউপাদান ব্যবহারjustify-content: center
Spittal

প্রিয় @ রিকি কীভাবে এটি তৈরি করবেন যাতে মিনিম্যাক্সের প্রথম সম্পত্তি যেমন eg repeat(auto-fill, minmax(186px, 1fr));পিক্সেল নয়, তবে যতক্ষণ না ডিভের ভিতরে পাঠ্য রয়েছে?
মেসকেব

1
@ মেসেউয়েব এটি সম্ভব নয়, একটি নির্দিষ্ট আকারের প্রয়োজন। আপনি আরও তথ্যের জন্য এই উত্তরটি একবার দেখে নিতে পারেন ।
রিকি

1
এটি তৈরি করার কোনও উপায় আছে যাতে এটি যখন পরের লাইনে যেতে হয়, তখন দুটি আইটেম কেবল একটিটির পরিবর্তে নেমে যায়? সুতরাং 4 থেকে 2 থেকে 1 এর মতো এবং এটি 4 থেকে 3 থেকে 2 থেকে 1 পর্যন্ত নেই?
সেপ্টেম্বর

16

আপনি ফাংশনটি auto-fitবা auto-fillভিতরে চান repeat():

grid-template-columns: repeat(auto-fit, 186px);

আপনি যদি minmax()নমনীয় কলামের আকারের জন্য একটি ব্যবহার করেন তবে উভয়ের মধ্যে পার্থক্য স্পষ্ট হয়:

grid-template-columns: repeat(auto-fill, minmax(186px, 1fr));

এটি আপনার কলামগুলিকে আকারে ফ্লেক্স করতে দেয়, 186 পিক্সেল থেকে সমান প্রস্থের কলামের ধারকটির পুরো প্রস্থে ছড়িয়ে দেওয়া। auto-fillপ্রস্থে মাপসই যতগুলি কলাম তৈরি করবে। যদি, বলুন, পাঁচটি কলাম ফিট করে, যদিও আপনার কাছে কেবল চারটি গ্রিড আইটেম রয়েছে, একটি পঞ্চম খালি কলাম থাকবে:

এখানে চিত্র বিবরণ লিখুন

auto-fitপরিবর্তে ব্যবহার করা খালি কলামগুলিকে প্রতিরোধ করবে, প্রয়োজনে আরও প্রসারিত:

এখানে চিত্র বিবরণ লিখুন


7

আপনি খুঁজছেন হতে পারে auto-fill:

grid-template-columns: repeat(auto-fill, 186px);

ডেমো: http://codepen.io/alanbuchanan/pen/wJRMox

উপলভ্য স্থানটি আরও দক্ষতার সাথে ব্যবহার করতে, আপনি দ্বিতীয় যুক্তি হিসাবে ব্যবহার করতে minmaxএবং পাস করতে পারেন auto:

grid-template-columns: repeat(auto-fill, minmax(186px, auto));

ডেমো: http://codepen.io/alanbuchanan/pen/jBXWLR

আপনি যদি খালি কলামগুলি না চান তবে আপনি এর auto-fitপরিবর্তে ব্যবহার করতে পারেন auto-fill


2
এটি পরের লাইনে থাকা কেন্দ্রকে কীভাবে তৈরি করার কোনও উপায় আছে?
কেন্টকড্ডস

3

আমারও একই অবস্থা ছিল। আপনি যা করেছেন তার উপরে, আমি কলামগুলিতে আমার কলামগুলি কেন্দ্রবিন্দুতে রাখতে চেয়েছিলাম যখন খালি কলামগুলি তাদের বাম বা ডানদিকে না দেওয়ার অনুমতি দিন:

.grid { 
    display: grid;
    grid-gap: 10px;
    justify-content: center;
    grid-template-columns: repeat(auto-fit, minmax(200px, auto));
}

পুনরায় "যখন তাদের জন্য খালি কলাম যার ফলে নয়" : আপনি বোঝাতে চেয়েছেন "যখন খালি কলাম মঞ্জুরি দিচ্ছে না পারেন তাদের জন্য" ( থেকেখুবপারেন )? অথবা "যখন তাদের জন্য খালি কলাম যার ফলে নয়" (ছাড়া করার )? বা অন্য কিছু (এটি গণনা করা যাচ্ছে না)?
পিটার মর্টেনসেন

1

আমার চেষ্টা এখানে। ফ্লাফটি ক্ষমা করুন, আমি অতিরিক্ত সৃজনশীল বোধ করছিলাম।

আমার পদ্ধতিটি নির্দিষ্ট মাত্রাdiv সহ একটি পিতামাতার । বাকিগুলি সেই অনুযায়ী ডিভের ভিতরে থাকা সামগ্রীতে ফিট করে।

এটি দিক অনুপাত নির্বিশেষে চিত্রগুলি পুনরুদ্ধার করবে । থাকবে কোন হার্ড ক্রপিং পারেন।

body {
    background: #131418;
    text-align: center;
    margin: 0 auto;
}

.my-image-parent {
    display: inline-block;
    width: 300px;
    height: 300px;
    line-height: 300px; /* Should match your div height */
    text-align: center;
    font-size: 0;
}

/* Start demonstration background fluff */
    .bg1 {background: url(https://unsplash.it/801/799);}
    .bg2 {background: url(https://unsplash.it/799/800);}
    .bg3 {background: url(https://unsplash.it/800/799);}
    .bg4 {background: url(https://unsplash.it/801/801);}
    .bg5 {background: url(https://unsplash.it/802/800);}
    .bg6 {background: url(https://unsplash.it/800/802);}
    .bg7 {background: url(https://unsplash.it/802/802);}
    .bg8 {background: url(https://unsplash.it/803/800);}
    .bg9 {background: url(https://unsplash.it/800/803);}
    .bg10 {background: url(https://unsplash.it/803/803);}
    .bg11 {background: url(https://unsplash.it/803/799);}
    .bg12 {background: url(https://unsplash.it/799/803);}
    .bg13 {background: url(https://unsplash.it/806/799);}
    .bg14 {background: url(https://unsplash.it/805/799);}
    .bg15 {background: url(https://unsplash.it/798/804);}
    .bg16 {background: url(https://unsplash.it/804/799);}
    .bg17 {background: url(https://unsplash.it/804/804);}
    .bg18 {background: url(https://unsplash.it/799/804);}
    .bg19 {background: url(https://unsplash.it/798/803);}
    .bg20 {background: url(https://unsplash.it/803/797);}
/* end demonstration background fluff */

.my-image {
    width: auto;
    height: 100%;
    vertical-align: middle;
    background-size: contain;
    background-position: center;
    background-repeat: no-repeat;
}
<div class="my-image-parent">
    <div class="my-image bg1"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg2"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg3"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg4"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg5"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg6"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg7"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg8"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg9"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg10"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg11"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg12"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg13"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg14"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg15"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg16"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg17"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg18"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg19"></div>
</div>

<div class="my-image-parent">
    <div class="my-image bg20"></div>
</div>

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.