নীচে এই বিন্যাসটি অর্জনের জন্য পাঁচটি বিকল্প রয়েছে:
- সিএসএস পজিশনিং
- অদৃশ্য ডোম উপাদান সহ ফ্লেক্সবক্স
- অদৃশ্য সিউডো-এলিমেন্ট সহ ফ্লেক্সবক্স
- সাথে ফ্লেক্সবক্স
flex: 1
- সিএসএস গ্রিড লেআউট
পদ্ধতি # 1: সিএসএস পজিশনিং বৈশিষ্ট্য
position: relative
ফ্লেক্স পাত্রে প্রয়োগ করুন ।
position: absolute
আইটেম ডি প্রয়োগ করুন।
এখন এই আইটেমটি একেবারে ফ্লেক্স ধারক মধ্যে অবস্থিত।
আরও সুনির্দিষ্টভাবে, আইটেম ডি নথির প্রবাহ থেকে সরানো হয়েছে তবে নিকটস্থ অবস্থান পূর্বসূরীর সীমানায় থাকে ।
সিএসএস অফসেট বৈশিষ্ট্যগুলি ব্যবহার করুন top
এবং right
এই উপাদানটিকে অবস্থানে সরাতে।
li:last-child {
position: absolute;
top: 0;
right: 0;
background: #ddd;
}
ul {
position: relative;
padding: 0;
margin: 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
li {
display: flex;
margin: 1px;
padding: 5px;
background: #aaa;
}
p {
text-align: center;
margin-top: 0;
}
span {
background-color: aqua;
}
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
<p><span>true center</span></p>
এই পদ্ধতির একটি সতর্কতা হ'ল কিছু ব্রাউজারগুলি সম্পূর্ণরূপে স্বাভাবিক প্রবাহ থেকে একেবারে অবস্থানযুক্ত ফ্লেক্স আইটেমটি সরিয়ে ফেলতে পারে না। এটি অ-মানক, অপ্রত্যাশিত উপায়ে প্রান্তিককরণ পরিবর্তন করে। আরও বিশদ: একেবারে অবস্থানযুক্ত ফ্লেক্স আইটেমটি আইই 11 এর স্বাভাবিক প্রবাহ থেকে সরানো হয় না
পদ্ধতি # 2: ফ্লেক্স অটো মার্জিন এবং অদৃশ্য ফ্লেক্স আইটেম (ডিওএম উপাদান)
auto
মার্জিনের সংমিশ্রণ এবং একটি নতুন, অদৃশ্য ফ্লেক্স আইটেমের সাথে লেআউটটি অর্জন করা যায়।
নতুন ফ্লেক্স আইটেমটি আইটেম ডি-এর সমান এবং বিপরীত প্রান্তে (বাম প্রান্তে) স্থাপন করা হয়েছে।
আরও সুনির্দিষ্টভাবে, যেহেতু ফ্লেক্স প্রান্তিককরণটি মুক্ত স্থানের বিতরণের উপর ভিত্তি করে, নতুন আইটেমটি তিনটি মাঝারি বাক্সকে অনুভূমিকভাবে কেন্দ্রীভূত রাখার জন্য প্রয়োজনীয় প্রতিবিম্ব। নতুন আইটেমটি অবশ্যই বিদ্যমান ডি আইটেমের সমান প্রস্থ হতে হবে, বা মাঝের বাক্সগুলি অবশ্যই কেন্দ্রিক হবে না।
নতুন আইটেমটি সাথে দেখা থেকে সরানো হয়েছে visibility: hidden
।
সংক্ষেপে:
D
উপাদানটির সদৃশ তৈরি করুন ।
- এটি তালিকার শুরুতে রাখুন।
- উভয় উপাদান উভয় প্রান্ত থেকে সমান ভারসাম্য তৈরি করে , এবং কেন্দ্রিক
auto
রাখতে ফ্লেক্স মার্জিন ব্যবহার করুন ।A
B
C
D
visibility: hidden
সদৃশ প্রয়োগ করুনD
li:first-child {
margin-right: auto;
visibility: hidden;
}
li:last-child {
margin-left: auto;
background: #ddd;
}
ul {
padding: 0;
margin: 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
li {
display: flex;
margin: 1px;
padding: 5px;
background: #aaa;
}
p { text-align: center; margin-top: 0; }
span { background-color: aqua; }
<ul>
<li>D</li><!-- new; invisible spacer item -->
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
<p><span>true center</span></p>
পদ্ধতি # 3: ফ্লেক্স অটো মার্জিন এবং অদৃশ্য ফ্লেক্স আইটেম (সিউডো-উপাদান)
এই পদ্ধতিটি # 2 এর সমান, এটি নির্বিশেষে ক্লিনার এবং প্রস্থটি D
অবশ্যই জানা উচিত be
- একই প্রস্থের সাথে সিউডো-উপাদান তৈরি করুন
D
।
- এটি দিয়ে ধারকটির শুরুতে রাখুন
::before
।
- সিউডো এবং উপাদানগুলি উভয় প্রান্ত থেকে সমান ভারসাম্য তৈরি করে , এবং পুরোপুরি কেন্দ্রিক
auto
রাখতে ফ্লেক্স মার্জিন ব্যবহার করুন ।A
B
C
D
ul::before {
content:"D";
margin: 1px auto 1px 1px;
visibility: hidden;
padding: 5px;
background: #ddd;
}
li:last-child {
margin-left: auto;
background: #ddd;
}
ul {
padding: 0;
margin: 0;
display: flex;
flex-direction: row;
justify-content: center;
align-items: center;
}
li {
display: flex;
margin: 1px;
padding: 5px;
background: #aaa;
}
p { text-align: center; margin-top: 0; }
span { background-color: aqua; }
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
<p><span>true center</span></p>
পদ্ধতি # 4: flex: 1
বাম এবং ডান আইটেমগুলিতে যুক্ত করুন
উপরের পদ্ধতি # 2 বা # 3 দিয়ে শুরু করে সমান ভারসাম্য বজায় রাখার জন্য বাম এবং ডান আইটেমগুলির জন্য সমান প্রস্থের বিষয়ে চিন্তা করার পরিবর্তে কেবল একটিকে দিন flex: 1
। এটি তাদের উভয়কে উপলব্ধ স্থান গ্রহণ করতে বাধ্য করবে, এইভাবে মধ্যবর্তী আইটেমটিকে কেন্দ্র করে।
তারপরে display: flex
আপনি পৃথক আইটেমগুলিতে তাদের সামগ্রীর সারিবদ্ধ করার জন্য যুক্ত করতে পারেন ।
এই পদ্ধতিটি এর সাথে ব্যবহার সম্পর্কে min-height
দ্রষ্টব্য : বর্তমানে ক্রোম, ফায়ারফক্স, এজ এবং সম্ভবত অন্যান্য ব্রাউজারগুলিতে শর্টহ্যান্ড নিয়মটি এতেflex: 1
বিভক্ত হয়:
flex-grow: 1
flex-shrink: 1
flex-basis: 0%
যে শতাংশ ইউনিট (%) উপর flex-basis
কারণ এই পদ্ধতি যখন বিরতি min-height
ধারক উপর ব্যবহার করা হয়। এটি কারণ, একটি সাধারণ নিয়ম হিসাবে, বাচ্চাদের শতাংশের উচ্চতা height
পিতামাতার উপর একটি সুস্পষ্ট সম্পত্তি সেটিং প্রয়োজন ।
এটি 1998 এর পুরানো সিএসএস নিয়ম ( সিএসএস স্তর 2 ) যা এখনও অনেক ব্রাউজারে কিছুটা ডিগ্রি বা অন্য কোনও ক্ষেত্রে কার্যকর হয় effect সম্পূর্ণ বিশদ জন্য দেখুন এখানে এবং এখানে দেখুন ।
এখানে ব্যবহারকারীর দ্বারা মন্তব্যগুলিতে পোস্ট করা সমস্যার চিত্রণ 2651804 :
#flex-container {
display: flex;
flex-direction: column;
background: teal;
width: 150px;
min-height: 80vh;
justify-content: space-between;
}
#flex-container>div {
background: orange;
margin: 5px;
}
#flex-container>div:first-child {
flex: 1;
}
#flex-container::after {
content: "";
flex: 1;
}
<div id="flex-container">
<div>very long annoying text that will add on top of the height of its parent</div>
<div>center</div>
</div>
সমাধানটি হ'ল শতাংশ ইউনিট ব্যবহার না করা। চেষ্টা করুন px
বা ঠিক কিছুই নয় ( কমপক্ষে কয়েকটি প্রধান ব্রাউজার যে কোনও কারণেই শতাংশের একক সংযুক্ত করেছে এমন সত্ত্বেও, যা অনুমানটি আসলে এটিই সুপারিশ করে )।
#flex-container {
display: flex;
flex-direction: column;
background: teal;
width: 150px;
min-height: 80vh;
justify-content: space-between;
}
#flex-container > div {
background: orange;
margin: 5px;
}
/* OVERRIDE THE BROWSER SETTING IN THE FLEX PROPERTY */
#flex-container > div:first-child {
flex: 1;
flex-basis: 0;
}
#flex-container::after {
content: "";
flex: 1;
flex-basis: 0;
}
/* OR... JUST SET THE LONG-HAND PROPERTIES INDIVIDUALLY
#flex-container > div:first-child {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
}
#flex-container::after {
content: "";
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0;
}
*/
<div id="flex-container">
<div>very long annoying text that will add on top of the height of its parent</div>
<div>center</div>
</div>
পদ্ধতি # 5: সিএসএস গ্রিড লেআউট
এটি সবচেয়ে পরিষ্কার এবং সবচেয়ে কার্যকর পদ্ধতি হতে পারে। পরম পজিশনিং, জাল উপাদান বা অন্যান্য হ্যাকারি দরকার নেই।
কেবল একাধিক কলাম সহ গ্রিড তৈরি করুন। তারপরে আপনার আইটেমগুলি মাঝের এবং শেষ কলামগুলিতে রাখুন। মূলত, কেবল প্রথম কলামটি খালি রাখুন।
ul {
display: grid;
grid-template-columns: 1fr repeat(3, auto) 1fr;
grid-column-gap: 5px;
justify-items: center;
}
li:nth-child(1) { grid-column-start: 2; }
li:nth-child(4) { margin-left: auto; }
/* for demo only */
ul { padding: 0; margin: 0; list-style: none; }
li { padding: 5px; background: #aaa; }
p { text-align: center; }
<ul>
<li>A</li>
<li>B</li>
<li>C</li>
<li>D</li>
</ul>
<p><span>| true center |</span></p>