আমি ভাবছি আমি কীভাবে প্রতিক্রিয়াশীল স্কোয়ারগুলি সহ একটি বিন্যাস তৈরি করতে যাব । প্রতিটি বর্গক্ষেত্র উল্লম্ব এবং অনুভূমিকভাবে প্রান্তিক সামগ্রী থাকবে। নির্দিষ্ট উদাহরণ নীচে প্রদর্শিত হয় ...
আমি ভাবছি আমি কীভাবে প্রতিক্রিয়াশীল স্কোয়ারগুলি সহ একটি বিন্যাস তৈরি করতে যাব । প্রতিটি বর্গক্ষেত্র উল্লম্ব এবং অনুভূমিকভাবে প্রান্তিক সামগ্রী থাকবে। নির্দিষ্ট উদাহরণ নীচে প্রদর্শিত হয় ...
উত্তর:
আপনি কেবল CSS এর সাহায্যে উল্লম্ব এবং অনুভূমিক কেন্দ্রিক সামগ্রী সহ স্কোয়ারগুলির প্রতিক্রিয়াশীল গ্রিড তৈরি করতে পারেন । আমি কীভাবে এক ধাপে ধাপে প্রক্রিয়াটি ব্যাখ্যা করব তবে প্রথমে আপনি কী অর্জন করতে পারবেন তার 2 টি ডেমো এখানে রয়েছে:
এখন আসুন কিভাবে এই অভিনব প্রতিক্রিয়াশীল স্কোয়ারগুলি তৈরি করবেন!
উপাদানগুলি বর্গক্ষেত্র রাখার কৌশল (বা অন্য যে কোনও দিকের অনুপাত) শতাংশ ব্যবহার করা 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%;
}
ফলাফল <- কিছু সুন্দর করার জন্য কিছু ফর্ম্যাটিং সহ!
অনুভূমিকভাবে:
এটি বেশ সহজ, আপনার কেবল যোগ 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%;
}
আমরা এখন শেষ করেছি এবং আমরা ফলাফলটি এখানে দেখতে পারি:
* { box-sizing: border-box; }
। উপাদান ডিভের উচ্চতা এবং প্রস্থকে 100% এ সামঞ্জস্য করতে হবে। :)
justify-content: center; align-items: center; flex-flow: column nowrap;
আপনি ভিডাব্লু (ভিউ-প্রস্থ) ইউনিট ব্যবহার করতে পারেন, যা স্ক্রিনের প্রস্থ অনুসারে স্কোয়ারগুলিকে প্রতিক্রিয়াশীল করে তুলবে।
এর একটি দ্রুত মক আপ হ'ল:
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>
margin-left: -4px;
ব্যবহার margin-right:-4px
। বরং মিনারস্পেসে অসঙ্গতি নিয়ে গণ্ডগোল করবেন না তবে সন্তানের উপাদানগুলির 1rem
(রিলেটিভ-এম) এ পুনরায় সেট করার চেয়ে র্যাপার প্যারেন্ট ফন্টের আকার 0-এ সেট করুন
গৃহীত উত্তর দুর্দান্ত, তবে এটি দিয়ে করা যায় 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/
এটি এফএফ এবং ক্রোমে পরীক্ষা করা হয়।
আমি বিভিন্ন সমাধানের প্রতিক্রিয়াশীল বাক্সগুলির জন্য এই সমাধানটি ব্যবহার করি:
এইচটিএমএল:
<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%; }
জেএসফিডালটনে ডেমো দেখুন