সমাধান
নেস্টেড ফ্লেক্স পাত্রে ব্যবহার করুন।
শতাংশের উচ্চতা থেকে মুক্তি পান। টেবিলের বৈশিষ্ট্যগুলি থেকে মুক্তি পান। পরিত্রাণ পেতে vertical-align
। পরম অবস্থান থেকে বিরত থাকুন। সারা পথ ধরে কেবল ফ্লেক্সবক্সের সাথে লেগে থাকুন।
display: flex
ফ্লেক্স আইটেমটিতে প্রয়োগ করুন ( .item
) এটি একটি ফ্লেক্স ধারক করে তোলে। এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যায় align-items: stretch
, যা শিশুকে ( .item-inner
) পিতামাতার পূর্ণ উচ্চতা প্রসারিত করতে বলে ।
গুরুত্বপূর্ণ: এই পদ্ধতির কাজ করার জন্য ফ্লেক্স আইটেমগুলি থেকে নির্দিষ্ট উচ্চতাগুলি সরান। যদি কোনও সন্তানের উচ্চতা নির্দিষ্ট করা থাকে (উদাঃ height: 100%
), তবে এটি align-items: stretch
পিতামাতার কাছ থেকে আসা অগ্রাহ্য করবে । জন্য stretch
কাজ ডিফল্ট, সন্তানের উচ্চতা গনা আবশ্যক auto
(সম্পূর্ণ ব্যাখ্যা )।
এটি চেষ্টা করুন (এইচটিএমএলে কোনও পরিবর্তন নেই):
.container {
display: flex;
flex-direction: column;
height: 20em;
border: 5px solid black
}
.item {
display: flex; /* new; nested flex container */
flex: 1;
border-bottom: 1px solid white;
}
.item-inner {
display: flex; /* new; nested flex container */
flex: 1; /* new */
/* height: 100%; <-- remove; unnecessary */
/* width: 100%; <-- remove; unnecessary */
/* display: table; <-- remove; unnecessary */
}
a {
display: flex; /* new; nested flex container */
flex: 1; /* new */
align-items: center; /* new; vertically center text */
background: orange;
/* display: table-cell; <-- remove; unnecessary */
/* vertical-align: middle; <-- remove; unnecessary */
}
<div class="container">
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
</div>
jsFizz ডেমো
ব্যাখ্যা
আমার সমস্যাটি হ'ল .item-inner { height: 100% }
ওয়েবকিট (ক্রোম) এ কাজ করছে না।
এটি কাজ করছে না কারণ আপনি শতাংশের উচ্চতা এমনভাবে ব্যবহার করছেন যা অনুমানের traditionalতিহ্যগত প্রয়োগের সাথে খাপ খায় না।
10.5 সামগ্রীর উচ্চতা: height
সম্পত্তি
শতাংশ শতাংশ
শতাংশ উচ্চতা নির্দিষ্ট করে। শতাংশটি উত্পন্ন বাক্সযুক্ত ব্লকটির উচ্চতার ক্ষেত্রে গণনা করা হয়। যদি ধারণকৃত ব্লকের উচ্চতাটি স্পষ্টভাবে নির্দিষ্ট না করা হয় এবং এই উপাদানটি একেবারে অবস্থান না করে তবে মানটি গণনা করে auto
।
স্বয়ংক্রিয়তা
উচ্চতা অন্যান্য বৈশিষ্ট্যের মানগুলির উপর নির্ভর করে।
অন্য কথায়, ইন-ফ্লো শিশুতে কাজ করার জন্য শতাংশের উচ্চতার জন্য, পিতামাতার অবশ্যই একটি উচ্চতা নির্ধারণ করতে হবে ।
আপনার কোডে, শীর্ষ স্তরের ধারকটির একটি সংজ্ঞায়িত উচ্চতা রয়েছে: .container { height: 20em; }
তৃতীয় স্তরের ধারকটির একটি সংজ্ঞায়িত উচ্চতা রয়েছে: .item-inner { height: 100%; }
কিন্তু তাদের মধ্যে, দ্বিতীয় স্তরের ধারক - .item
- না একটি নির্ধারিত উচ্চতা আছে। ওয়েবকিট এটি অনুপস্থিত লিঙ্ক হিসাবে দেখছে sees
.item-inner
ক্রোমকে বলছে: আমাকে দাওheight: 100%
। ক্রোম .item
রেফারেন্সের জন্য পিতামাতাকে ( ) সন্ধান করে এবং প্রতিক্রিয়া জানায়: এর 100% কী? আমি কিছুই দেখতে পাচ্ছি না ( flex: 1
সেখানে থাকা নিয়মটি উপেক্ষা করে )। ফলস্বরূপ, height: auto
স্পেক অনুসারে এটি প্রয়োগ করা হয় (সামগ্রীর উচ্চতা)।
অন্যদিকে, ফায়ারফক্স এখন সন্তানের শতাংশের উচ্চতার রেফারেন্স হিসাবে পিতামাতার ফ্লেক্স উচ্চতা গ্রহণ করে। আইই 11 এবং এজ এছাড়াও ফ্লেক্স উচ্চতা গ্রহণ করে।
এছাড়াও, (কোনও সংখ্যাসূচক মান কাজ করে ( হবে না) সহ ) ব্যবহৃত হলে ক্রম flex-grow
পর্যাপ্ত পিতামাতার রেফারেন্স হিসাবে গ্রহণ করবে । এই লেখার হিসাবে, তবে, এই সমাধানটি সাফারিতে ব্যর্থ।flex-basis
auto
flex-basis: 0
#outer {
display: flex;
flex-direction: column;
height: 300px;
background-color: white;
border: 1px solid red;
}
#middle {
flex-grow: 1;
flex-basis: 1px;
background-color: yellow;
}
#inner {
height: 100%;
background-color: lightgreen;
}
<div id="outer">
<div id="middle">
<div id="inner">
INNER
</div>
</div>
</div>
চারটি সমাধান
1. সমস্ত মূল উপাদানগুলির উপর একটি উচ্চতা উল্লেখ করুন
সমস্ত নির্ভরযোগ্য উপাদানগুলির উপর একটি উচ্চতা নির্দিষ্ট করা একটি নির্ভরযোগ্য ক্রস ব্রাউজার সমাধান। এটি নিখোঁজ লিঙ্কগুলি প্রতিরোধ করে, যা ওয়েবকিট-ভিত্তিক ব্রাউজারগুলি অনুমানের লঙ্ঘন বিবেচনা করে।
নোট করুন min-height
এবং max-height
গ্রহণযোগ্য নয়। এটা height
সম্পত্তি হতে হবে ।
এখানে আরও বিশদ: সিএসএসের height
সম্পত্তি এবং শতাংশের মানগুলির সাথে কাজ করা
২. সিএসএস সম্পর্কিত এবং সম্পূর্ণ অবস্থান নির্ধারণ osition
position: relative
পিতা-মাতার এবং position: absolute
সন্তানের ক্ষেত্রে প্রয়োগ করুন ।
আকার সঙ্গে শিশু height: 100%
এবং width: 100%
, বা ব্যবহারের অফসেট বৈশিষ্ট্য: top: 0
, right: 0
, bottom: 0
, left: 0
।
পরম অবস্থানের সাথে, শতাংশের উচ্চতা পিতামাতার উপরে নির্দিষ্ট উচ্চতা ছাড়াই কাজ করে।
৩. অপ্রয়োজনীয় এইচটিএমএল পাত্রে সরান (প্রস্তাবিত)
চারপাশে দুটি পাত্রে button
কী দরকার ? কেন .item
বা .item-inner
, বা উভয়ই সরাবেন না ? যদিও button
উপাদানগুলি কখনও কখনও ফ্লেক্স পাত্রে হিসাবে ব্যর্থ হয় তবে তারা ফ্লেক্স আইটেম হতে পারে। বা তার button
সন্তান তৈরি করা এবং অবহেলিত মার্ক-আপ সরিয়ে ফেলার কথা বিবেচনা করুন ।.container
.item
এখানে একটি উদাহরণ:
.container {
height: 20em;
display: flex;
flex-direction: column;
border: 5px solid black
}
a {
flex: 1;
background: orange;
border-bottom: 1px solid white;
display: flex; /* nested flex container (for aligning text) */
align-items: center; /* center text vertically */
justify-content: center; /* center text horizontally */
}
<div class="container">
<a>Button</a>
<a>Button</a>
<a>Button</a>
</div>
4. নেস্টেড ফ্লেক্স পাত্রে (প্রস্তাবিত)
শতাংশের উচ্চতা থেকে মুক্তি পান। টেবিলের বৈশিষ্ট্যগুলি থেকে মুক্তি পান। পরিত্রাণ পেতে vertical-align
। পরম অবস্থান থেকে বিরত থাকুন। সারা পথ ধরে কেবল ফ্লেক্সবক্সের সাথে লেগে থাকুন।
display: flex
ফ্লেক্স আইটেমটিতে প্রয়োগ করুন ( .item
) এটি একটি ফ্লেক্স ধারক করে তোলে। এটি স্বয়ংক্রিয়ভাবে সেট হয়ে যায় align-items: stretch
, যা শিশুকে ( .item-inner
) পিতামাতার পূর্ণ উচ্চতা প্রসারিত করতে বলে ।
গুরুত্বপূর্ণ: এই পদ্ধতির কাজ করার জন্য ফ্লেক্স আইটেমগুলি থেকে নির্দিষ্ট উচ্চতাগুলি সরান। যদি কোনও সন্তানের উচ্চতা নির্দিষ্ট করা থাকে (উদাঃ height: 100%
), তবে এটি align-items: stretch
পিতামাতার কাছ থেকে আসা অগ্রাহ্য করবে । জন্য stretch
কাজ ডিফল্ট, সন্তানের উচ্চতা গনা আবশ্যক auto
(সম্পূর্ণ ব্যাখ্যা )।
এটি চেষ্টা করুন (এইচটিএমএলে কোনও পরিবর্তন নেই):
.container {
display: flex;
flex-direction: column;
height: 20em;
border: 5px solid black
}
.item {
display: flex; /* new; nested flex container */
flex: 1;
border-bottom: 1px solid white;
}
.item-inner {
display: flex; /* new; nested flex container */
flex: 1; /* new */
/* height: 100%; <-- remove; unnecessary */
/* width: 100%; <-- remove; unnecessary */
/* display: table; <-- remove; unnecessary */
}
a {
display: flex; /* new; nested flex container */
flex: 1; /* new */
align-items: center; /* new; vertically center text */
background: orange;
/* display: table-cell; <-- remove; unnecessary */
/* vertical-align: middle; <-- remove; unnecessary */
}
<div class="container">
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
<div class="item">
<div class="item-inner">
<a>Button</a>
</div>
</div>
</div>