প্রতিক্রিয়াশীল স্কোয়ারের গ্রিড


170

আমি ভাবছি আমি কীভাবে প্রতিক্রিয়াশীল স্কোয়ারগুলি সহ একটি বিন্যাস তৈরি করতে যাব । প্রতিটি বর্গক্ষেত্র উল্লম্ব এবং অনুভূমিকভাবে প্রান্তিক সামগ্রী থাকবে। নির্দিষ্ট উদাহরণ নীচে প্রদর্শিত হয় ...

বিষয়বস্তু সহ প্রতিক্রিয়াশীল স্কোয়ার


স্ট্যাকওভারফ্লো কেমন হওয়া উচিত সে সম্পর্কে সত্যিকারের পেডেন্টিক দৃষ্টিভঙ্গি সহ দুর্দান্ত উত্তর দিয়ে প্রশ্নগুলি এলোমেলোভাবে বন্ধ হয়ে যায় তা আমি ঘৃণা করি। তাদের যদি ভাল, স্বীকৃত, upvated উত্তর আছে ... কেন এটি বন্ধ ??? বিভ্রান্তি কোথায় হবে? অবশ্যই, তার নিজের "প্রতিক্রিয়াশীল স্কোয়ারগুলির গ্রিড" তে ব্যাখ্যা করার জন্য কিছুটা বা অনেক বেশি প্রয়োজন হতে পারে তবে এটি একটি 400+ উত্তর সহ 7 বছরের পুরানো 160+ প্রশ্ন। আমি আবারও ভোট দিচ্ছি।
লীনাডি_নাটিপ্যাক

উত্তর:


416

আপনি কেবল CSS এর সাহায্যে উল্লম্ব এবং অনুভূমিক কেন্দ্রিক সামগ্রী সহ স্কোয়ারগুলির প্রতিক্রিয়াশীল গ্রিড তৈরি করতে পারেন । আমি কীভাবে এক ধাপে ধাপে প্রক্রিয়াটি ব্যাখ্যা করব তবে প্রথমে আপনি কী অর্জন করতে পারবেন তার 2 টি ডেমো এখানে রয়েছে:

প্রতিক্রিয়াশীল 3x3 বর্গ গ্রিড একটি 3x3 গ্রিডে প্রতিক্রিয়াশীল বর্গ চিত্র

এখন আসুন কিভাবে এই অভিনব প্রতিক্রিয়াশীল স্কোয়ারগুলি তৈরি করবেন!



1. প্রতিক্রিয়াশীল স্কোয়ার তৈরি:

উপাদানগুলি বর্গক্ষেত্র রাখার কৌশল (বা অন্য যে কোনও দিকের অনুপাত) শতাংশ ব্যবহার করা padding-bottom
পার্শ্ব নোট: আপনি উপরের প্যাডিং খুব বেশি বা শীর্ষ / নীচের মার্জিন ব্যবহার করতে পারেন তবে উপাদানটির পটভূমি প্রদর্শিত হবে না।

যেহেতু শীর্ষ প্যাডিং প্যারেন্ট উপাদানগুলির প্রস্থ অনুসারে গণনা করা হয় ( রেফারেন্সের জন্য MDN দেখুন ), উপাদানটির উচ্চতা তার প্রস্থ অনুসারে পরিবর্তিত হবে। আপনি এখন এর প্রস্থ অনুপাতটিকে এর প্রস্থ অনুসারে রাখতে পারেন ।
এই মুহুর্তে আপনি কোড করতে পারেন:

এইচটিএমএল :

 <div></div>

সিএসএস

div {
    width: 30%;
    padding-bottom: 30%; /* = width for a square aspect ratio */
}

উপরের কোডটি ব্যবহার করে এখানে 3 * 3 স্কোয়ার গ্রিডের একটি সহজ লেআউট উদাহরণ

এই কৌশলটি দিয়ে আপনি অন্য যে কোনও দিক অনুপাত তৈরি করতে পারেন, এখানে একটি টেবিলটি অনুপাত অনুপাত এবং 30% প্রস্থ অনুসারে নীচে প্যাডিংয়ের মান প্রদান করে।

 Aspect ratio  |  padding-bottom  |  for 30% width
------------------------------------------------
    1:1        |  = width         |    30%
    1:2        |  width x 2       |    60%
    2:1        |  width x 0.5     |    15%
    4:3        |  width x 0.75    |    22.5%
    16:9       |  width x 0.5625  |    16.875%




২. স্কোয়ারের ভিতরে সামগ্রী যুক্ত করা

যেহেতু আপনি সরাসরি স্কোয়ারের মধ্যে সামগ্রী যুক্ত করতে পারবেন না (এটি তাদের উচ্চতা প্রসারিত করবে এবং স্কোয়ারগুলি আর স্কোয়ার হবে না) আপনার তাদের ভিতরে শিশু উপাদান তৈরি করতে হবে (উদাহরণস্বরূপ আমি ডিভগুলি ব্যবহার করছি) position: absolute;এবং সামগ্রীটি তাদের ভিতরে রেখে দিতে হবে । এটি সামগ্রী প্রবাহের বাইরে নিয়ে যাবে এবং স্কোয়ারের আকার রাখবে।

position:relative;প্যারেন্ট ডিভগুলি যুক্ত করতে ভুলবেন না যাতে পরম বাচ্চাদের তাদের পিতামাতার তুলনায় তুলনামূলকভাবে আকার / আকার দেওয়া হয়।

আসুন আমাদের বর্গের 3x3 গ্রিডে কিছু সামগ্রী যুক্ত করুন:

এইচটিএমএল :

<div class="square">
    <div class="content">
        .. CONTENT HERE ..
    </div>
</div>
... and so on 9 times for 9 squares ...

সিএসএস :

.square {
    float:left;
    position: relative;
    width: 30%;
    padding-bottom: 30%; /* = width for a 1:1 aspect ratio */
    margin:1.66%;
    overflow:hidden;
}

.content {
    position:absolute;
    height:80%; /* = 100% - 2*10% padding */
    width:90%; /* = 100% - 2*5% padding */
    padding: 10% 5%;
}

ফলাফল <- কিছু সুন্দর করার জন্য কিছু ফর্ম্যাটিং সহ!



3. বিষয়বস্তু কেন্দ্র করে

অনুভূমিকভাবে:

এটি বেশ সহজ, আপনার কেবল যোগ text-align:centerকরতে হবে .content
ফলাফল

উল্লম্ব প্রান্তিককরণ

এটি মারাত্মক হয়ে যায়! কৌশলটি ব্যবহার করা হয় to

display:table;
/* and */
display:table-cell;
vertical-align:middle;

কিন্তু আমরা ব্যবহার করতে পারবেন না display:table;উপর .squareবা .contentআছে divs কারণ এটি সাথে সংঘাত position:absolute;তাই আমরা ভিতরে দুটি সন্তান তৈরি করা প্রয়োজন .contentআছে divs। আমাদের কোড অনুসরণ হিসাবে আপডেট করা হবে:

এইচটিএমএল :

<div class="square">
    <div class="content">
        <div class="table">
            <div class="table-cell">
                ... CONTENT HERE ...
            </div>
        </div>
    </div>
</div>
... and so on 9 times for 9 squares ...

সিএসএস:

.square {
    float:left;
    position: relative;
    width: 30%;
    padding-bottom : 30%; /* = width for a 1:1 aspect ratio */
    margin:1.66%;
    overflow:hidden;
}

.content {
    position:absolute;
    height:80%; /* = 100% - 2*10% padding */
    width:90%; /* = 100% - 2*5% padding */
    padding: 10% 5%;
}
.table{
    display:table;
    height:100%;
    width:100%;
}
.table-cell{
    display:table-cell;
    vertical-align:middle;
    height:100%;
    width:100%;
}




আমরা এখন শেষ করেছি এবং আমরা ফলাফলটি এখানে দেখতে পারি:

ফুলস্ক্রিন ফলাফল লাইভ

এখানে সম্পাদনাযোগ্য মজার



2
@ ডি.রায়েভ হ্যাঁ শতাংশ প্যাডিংস এবং মার্জিনগুলি পিতামাতার প্রস্থ অনুযায়ী গণনা করা হয়। প্যাডিং জন্য এখানে চেক করুন developer.mozilla.org/en-US/docs/Web/CSS/padding
ওয়েব-টিকি

4
এটা অসাধারণ. অন্যদের জন্য কেবল একটি শিরোনাম: আপনি যদি ব্যবহার করেন তবে আপনাকে * { box-sizing: border-box; }। উপাদান ডিভের উচ্চতা এবং প্রস্থকে 100% এ সামঞ্জস্য করতে হবে। :)
রব ফ্ল্যাটার্টি

2
মার্জিন মানের পিছনে ক্যালকুলাস কি? আমি যদি গ্রিড 5x5 সেট করতে চাই?
কিউই 1342

2
@ kiwi1342 এর সমষ্টি সব একটি সারিতে মার্জিন + + সব প্রস্থ 100% সমান হতে হবে। সুতরাং 5x5 গ্রিডের জন্য, আপনি উপাদানগুলির প্রতিটি পক্ষের 1% মার্জিন সহ 18% প্রস্থ ব্যবহার করতে পারেন।
ওয়েব-টিকি

1
ফ্যান্টাস্টিক। মাত্র একটি মাথা আপ: আনুভূমিকভাবে এবং উল্লম্বভাবে কেন্দ্রীভূত করতে, কেবলমাত্র উপাদানটিকে একটি ফ্লেক্সবক্স করুনjustify-content: center; align-items: center; flex-flow: column nowrap;
ননাম এসএল

14

আপনি ভিডাব্লু (ভিউ-প্রস্থ) ইউনিট ব্যবহার করতে পারেন, যা স্ক্রিনের প্রস্থ অনুসারে স্কোয়ারগুলিকে প্রতিক্রিয়াশীল করে তুলবে।

এর একটি দ্রুত মক আপ হ'ল:

html,
body {
  margin: 0;
  padding: 0;
}
div {
  height: 25vw;
  width: 25vw;
  background: tomato;
  display: inline-block;
  text-align: center;
  line-height: 25vw;
  font-size: 20vw;
  margin-right: -4px;
  position: relative;
}
/*demo only*/

div:before {
  content: "";
  position: absolute;
  top: 0;
  left: 0;
  height: inherit;
  width: inherit;
  background: rgba(200, 200, 200, 0.6);
  transition: all 0.4s;
}
div:hover:before {
  background: rgba(200, 200, 200, 0);
}
<div>1</div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
<div>6</div>
<div>7</div>
<div>8</div>


4
ব্যবহার করবেন না margin-left: -4px;ব্যবহার margin-right:-4px। বরং মিনারস্পেসে অসঙ্গতি নিয়ে গণ্ডগোল করবেন না তবে সন্তানের উপাদানগুলির 1rem(রিলেটিভ-এম) এ পুনরায় সেট করার চেয়ে র‌্যাপার প্যারেন্ট ফন্টের আকার 0-এ সেট করুন
রোকো সি বুলজান

9

গৃহীত উত্তর দুর্দান্ত, তবে এটি দিয়ে করা যায় flexbox

এখানে বিইএম সিনট্যাক্স সহ লিখিত একটি গ্রিড সিস্টেম রয়েছে যা প্রতি সারি 1-10 টি কলাম প্রদর্শিত হতে পারে।

যদি সেখানে সর্বশেষ সারিটি অসম্পূর্ণ থাকে (উদাহরণস্বরূপ আপনি প্রতি সারিতে 5 টি সেল দেখায় এবং সেখানে 7 টি আইটেম থাকে), পিছনের আইটেমগুলি অনুভূমিকভাবে কেন্দ্রীভূত হবে। চলমান আইটেমগুলির অনুভূমিক প্রান্তিককরণ নিয়ন্ত্রণ করতে, কেবল শ্রেণীর অধীনে justify-contentসম্পত্তি পরিবর্তন করুন .square-grid

.square-grid {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
}

.square-grid__cell {
  background-color: rgba(0, 0, 0, 0.03);
  box-shadow: 0 0 0 1px black;
  overflow: hidden;
  position: relative;
}

.square-grid__content {
  left: 0;
  position: absolute;
  top: 0;
}

.square-grid__cell:after {
  content: '';
  display: block;
  padding-bottom: 100%;
}

// Sizes  Number of cells per row

.square-grid__cell--10 {
  flex-basis: 10%;
}

.square-grid__cell--9 {
  flex-basis: 11.1111111%;
}

.square-grid__cell--8 {
  flex-basis: 12.5%;
}

.square-grid__cell--7 {
  flex-basis: 14.2857143%;
}

.square-grid__cell--6 {
  flex-basis: 16.6666667%;
}

.square-grid__cell--5 {
  flex-basis: 20%;
}

.square-grid__cell--4 {
  flex-basis: 25%;
}

.square-grid__cell--3 {
  flex-basis: 33.333%;
}

.square-grid__cell--2 {
  flex-basis: 50%;
}

.square-grid__cell--1 {
  flex-basis: 100%;
}

ফিডল: https://jsfiddle.net/patrickberkeley/noLm1r45/3/

এটি এফএফ এবং ক্রোমে পরীক্ষা করা হয়।


3
তবুও, আপনি উচ্চতা ঠিক করতে প্যাডিং-বটম ব্যবহার করছেন, সুতরাং এটি গ্রহণযোগ্য হিসাবে একই উত্তর। পার্থক্য হ'ল গ্রিডটি কীভাবে তৈরি, স্কোয়ারড গ্রিড নয়।
extempl

0

আমি বিভিন্ন সমাধানের প্রতিক্রিয়াশীল বাক্সগুলির জন্য এই সমাধানটি ব্যবহার করি:

এইচটিএমএল:

<div class="box ratio1_1">
  <div class="box-content">
            ... CONTENT HERE ...
  </div>
</div>

সিএসএস:

.box-content {
  width: 100%; height: 100%;
  top: 0;right: 0;bottom: 0;left: 0;
  position: absolute;
}
.box {
  position: relative;
  width: 100%;
}
.box::before {
    content: "";
    display: block;
    padding-top: 100%; /*square for no ratio*/
}
.ratio1_1::before { padding-top: 100%; }
.ratio1_2::before { padding-top: 200%; }
.ratio2_1::before { padding-top: 50%; }
.ratio4_3::before { padding-top: 75%; }
.ratio16_9::before { padding-top: 56.25%; }

জেএসফিডালটনে ডেমো দেখুন


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