আমি কীভাবে পূর্ণ উচ্চতার অ্যাপ্লিকেশনটিতে ফ্লেক্সবক্স এবং উল্লম্ব স্ক্রোলটি একত্রিত করতে পারি?


106

আমি ফ্লেক্সবক্স ব্যবহার করে একটি পূর্ণ উচ্চতার অ্যাপ্লিকেশন ব্যবহার করতে চাই। আমি display: box;এই লিঙ্কটিতে পুরানো ফ্লেক্সবক্স লেআউট মডিউল ( এবং অন্যান্য জিনিস) ব্যবহার করতে চাই তা পেয়েছি : CSS3 ফ্লেক্সবক্স পূর্ণ-উচ্চতা অ্যাপ্লিকেশন এবং ওভারফ্লো

এটি ব্রাউজারগুলির জন্য সঠিক সমাধান যা কেবলমাত্র ফ্লেক্সবক্স সিএসএস বৈশিষ্ট্যের পুরানো সংস্করণকে সমর্থন করে।

আমি যদি আরও নতুন ফ্লেক্সবক্স বৈশিষ্ট্যগুলি ব্যবহার করে দেখতে চাই তবে আমি হ্যাক হিসাবে তালিকাভুক্ত একই লিঙ্কে দ্বিতীয় সমাধানটি ব্যবহার করার চেষ্টা করব: এর সাথে একটি ধারক ব্যবহার করে height: 0px;। এটি একটি উল্লম্ব স্ক্রোলটি দেখায়।

আমি এটি খুব বেশি পছন্দ করি না কারণ এটি অন্যান্য সমস্যার সাথে পরিচয় করিয়ে দেয় এবং এটি সমাধানের চেয়ে অনেক বেশি কাজ করে।

html, body {
    height: 100%;    
}
#container {
	display: flex;
	flex-direction: column;
	height: 100%;
}
#container article {
	flex: 1 1 auto;
	overflow-y: scroll;
}
#container header {
    background-color: gray;
}
#container footer {
    background-color: gray;
}
<section id="container" >
    <header id="header" >This is a header</header>
    <article id="content" >
        This is the content that
        <br />
        With a lot of lines.
        <br />
        With a lot of lines.
        <br />
        This is the content that
        <br />
        With a lot of lines.
        <br />
        <br />
        This is the content that
        <br />
        With a lot of lines.
        <br />
        <br />
        This is the content that
        <br />
        With a lot of lines.
        <br />
    </article>
    <footer id="footer" >This is a footer</footer>
</section>

আমি একটি বেসিক উদাহরণ সহ একটি জেএসফিডেল প্রস্তুত করেছি: http://jsfiddle.net/ch7n6/

এটি একটি সম্পূর্ণ উচ্চতার এইচটিএমএল ওয়েবসাইট এবং সামগ্রীর উপাদানটির ফ্লেক্সবক্স বৈশিষ্ট্যের কারণে পাদলেখ নীচে রয়েছে। আমি আপনাকে সিএসএস কোড এবং ফলাফলের মধ্যে বিভিন্ন উচ্চতা অনুকরণ করার জন্য বারটি সরাতে পরামর্শ দিই।


4
আপনি যে আচরণটি সন্ধান করছেন এটি কি নয়? jsfiddle.net/ch7n6/2
cimmanon

4
jsfiddle.net/ch7n6/3 হ্যাঁ! এইটা. : ডি তবে আমি বুঝতে পারি না কেন প্রভাবটি পেতে আমাকে উচ্চতা নির্দেশ করতে হবে। যাইহোক সেটিং: উচ্চতা: 1 পিএক্স; কাজ
জোসে

এখন আমি উচ্চতাটি নূন্যতম উচ্চতায় পরিবর্তন করেছি changed অনেক ভাল. তোমাকে ধন্যবাদ.
হোসে

4
@ জোসক্যাবো +1 - দুর্দান্ত ট্রিকের উচ্চতা: 0 উল্লম্ব স্ক্রোল দেখানোর জন্য! আপনি ব্যাখ্যা করতে পারেন কেন এটি কাজ করে?
ড্যানিয়েল্ড

4
আপনার flex-shrink:0শিরোনাম এবং পাদচরণ উভয় ক্ষেত্রেই আবেদন করা উচিত ।
সওরকিডো

উত্তর:


211

Https://stackoverflow.com/users/1652962/cimmanon ধন্যবাদ যা আমাকে উত্তর দিয়েছে।

সমাধানটি উল্লম্ব স্ক্রোলযোগ্য উপাদানটিতে একটি উচ্চতা নির্ধারণ করছে। উদাহরণ স্বরূপ:

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    height: 0px;
}

উপাদান হবে কারণ flexbox এটা recalculates যদি না আপনি একটি চান উচ্চতা আছে সর্বনিম্ন উচ্চতা যাতে আপনি ব্যবহার করতে পারেন height: 100px;যে এটা ঠিক হিসাবে একই:min-height: 100px;

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    height: 100px; /* == min-height: 100px*/
}

সুতরাং আপনি যদি min-heightউল্লম্ব স্ক্রোলটিতে একটি চান তবে সেরা সমাধান :

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 100px;
}

নিবন্ধটি দেখার মতো পর্যাপ্ত জায়গা না থাকলে আপনি যদি কেবল পুরো উল্লম্ব স্ক্রোলটি চান:

#container article {
    flex: 1 1 auto;
    overflow-y: auto;
    min-height: 0px;
}

চূড়ান্ত কোড: http://jsfiddle.net/ch7n6/867/


4
min-heightক্রোমে ব্যবহার করা কাজ করে না, এটি কোনওভাবেই ফুটারের আকারকে প্রভাবিত করে। heightতবে ব্যবহার করা , পছন্দসই ফলাফল দেয়।
ফ্যান্ট 0 মি

4
"অটো" যেখানে উঁচুতে রাখার চেষ্টা করুন। আমি এটি অধ্যয়ন করেছি এবং আমি মনে করি সঠিক জায়গাটি এই সম্পত্তি। সুতরাং পরিবর্তে ন্যূনতম উচ্চতা এবং উচ্চতা ব্যবহার করুন।
জোসে ক্যাবো

height: 0যখন সামগ্রীটি ওভারফ্লো হয় না তখন কিছু 2 পিএক্স জাম্পিং স্থির করে। খুব অদ্ভুত. ধন্যবাদ
সমস্যাগুলি

@ সুমিত, আপনি কী সমস্যার মুখোমুখি হচ্ছেন তার একটি চিত্র সরবরাহ করতে পারেন?
হোসে ক্যাবো

আমি ফিডল লিঙ্কটি খুললাম এবং মনে হয় না যে ক্রোমে আর কাজ করা হবে (ফায়ারফক্সে কাজ করে)। স্ক্রোল বার অদৃশ্য হয়ে গেল। কীভাবে এই কাজটি আবার করা যায় তার কারও ধারণা আছে?
বেট করুন

62

ফ্লেক্সবক্স স্পেক সম্পাদক এখানে।

এটি ফ্লেক্সবক্সের উত্সাহিত ব্যবহার, তবে সর্বোত্তম আচরণের জন্য কয়েকটি জিনিস আপনি টুইট করতে হবে।

  • উপসর্গ ব্যবহার করবেন না। অব্যবস্থাপিত ফ্লেক্সবক্স বেশিরভাগ ব্রাউজারগুলিতে সু-সমর্থিত। সর্বদা অপ্রস্তুত দিয়ে শুরু করুন এবং এটি সমর্থন করার জন্য প্রয়োজন হলে কেবল উপসর্গ যুক্ত করুন।

  • যেহেতু আপনার শিরোনাম এবং পাদচরণগুলি বোঝানো নয়, তাদের উভয়ই flex: none;সেগুলি স্থাপন করা উচিত । কিছু ওভারল্যাপিং এফেক্টের কারণে এই মুহূর্তে আপনার অনুরূপ আচরণ রয়েছে, তবে আপনি যদি পরে দুর্ঘটনাক্রমে নিজেকে বিভ্রান্ত না করতে চান তবে আপনার উপর নির্ভর করা উচিত নয়। (ডিফল্ট হ'ল flex:0 1 auto, সুতরাং তারা তাদের অটো উচ্চতায় শুরু হয় এবং সঙ্কুচিত হতে পারে তবে বাড়তে পারে না, তবে এটি overflow:visibleডিফল্টরূপেও হয় যা min-height:autoএগুলি তাদের সঙ্কুচিত হওয়া থেকে রোধ করতে তাদের ডিফল্টটিকে ট্রিগার করে you আপনি যদি কখনও overflowসেগুলি সেট করেন তবে min-height:autoপরিবর্তনের আচরণ (ন্যূনতম সামগ্রীর চেয়ে শূন্যে স্যুইচ করা) এবং হঠাৎ অতিরিক্ত লম্বা <article>উপাদান দ্বারা তারা স্কুইশ হয়ে যাবে )

  • আপনি খুব সহজ করতে পারেন <article> flex- ঠিক সেট করুন flex: 1;এবং আপনি যেতে ভাল হবে। আপনার আরও জটিল কিছু করার উপযুক্ত কারণ না থাকলে https://drafts.csswg.org/css-flexbox/#flex-common এ সাধারণ মানগুলির সাথে তাল মিলিয়ে চলার চেষ্টা করুন - বেশিরভাগ আচরণগুলি পড়তে এবং আচ্ছাদন করা তাদের পক্ষে সহজ're আপনি প্রার্থনা করতে চাইবেন।


নমনীয়: কিছুই না; আমাকে বাঁচাতে এটিই আমাকে সাহায্য করেছিল যা একটি ফ্লেক্স উপাদান তার বাচ্চাদের পুরো উচ্চতা নিতে এবং তার পিতামাতার 100% উচ্চতা উপেক্ষা করতে সহায়তা করে (ওভারফ্লো ব্যবহারের জন্য কোনও পিতা-মাতার উপরে 100% ছিল)
ক্যাটালিনবার্টা

21

বর্তমান অনুমানটি এ সম্পর্কে বলে flex: 1 1 auto:

আইটেমটিকে width/ heightবৈশিষ্ট্যের ভিত্তিতে আকার দেয় তবে এগুলিকে সম্পূর্ণ নমনীয় করে তোলে, যাতে তারা মূল অক্ষ বরাবর যে কোনও মুক্ত স্থান শোষণ করে। যদি সমস্ত আইটেম হয় হয় flex: auto, flex: initialবা flex: none, আইটেম আকারের পরে কোনও ধনাত্মক মুক্ত স্থান আইটেমগুলিতে সমানভাবে বিতরণ করা হবে flex: auto

http://www.w3.org/TR/2012/CR-css3-flexbox-20120918/#flex-common

এটি আমার কাছে মনে হচ্ছে আপনি যদি বলেন যে কোনও উপাদান 100px লম্বা, এটি একটি "প্রস্তাবিত" আকারের মতো আচরণ করা হবে, পরম নয়। যেহেতু এটি সঙ্কুচিত হওয়ার এবং বাড়ার অনুমতি দেওয়া হয়েছে, এটি যতটা অনুমতি দেয় তত জায়গা নেয়। এই কারণেই আপনার "মূল" উপাদানটিতে এই লাইনটি যুক্ত করা কাজ করে: height: 0(বা অন্য কোনও ছোট সংখ্যা)।

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