मैं अपने फ्लेक्सबॉक्स लेआउट को 100% ऊर्ध्वाधर स्थान कैसे ले सकता हूं?


102

मैं कैसे बता सकता हूं कि एक फ्लेक्सबॉक्स लेआउट पंक्ति ब्राउज़र विंडो में शेष ऊर्ध्वाधर स्थान का उपभोग करती है?

मेरे पास एक 3-पंक्ति फ्लेक्सबॉक्स लेआउट है। पहली दो पंक्तियाँ निश्चित ऊँचाई वाली हैं, लेकिन तीसरी गतिशील है और मैं चाहूँगा कि यह ब्राउज़र की पूरी ऊँचाई तक बढ़े।

यहां छवि विवरण दर्ज करें

मेरे पास पंक्ति -3 में एक और फ्लेक्सबॉक्स है जो कॉलम का एक सेट बनाता है। इन स्तंभों के भीतर तत्वों को ठीक से समायोजित करने के लिए मुझे उन्हें ब्राउज़र की पूरी ऊंचाई को समझने की आवश्यकता है - आधार पर पृष्ठभूमि के रंग और आइटम संरेखण जैसी चीजों के लिए। प्रमुख लेआउट अंततः इससे मिलता जुलता होगा:

यहां छवि विवरण दर्ज करें

.vwrapper {
    display: flex;
    flex-direction: column;
    flex-wrap: nowrap;
    justify-content: flex-start;
    align-items: stretch;
    align-content: stretch;
    //height: 1000px;
}
.vwrapper #row1 {
    background-color: red;
}
.vwrapper #row2 {
    background-color: blue;
}
.vwrapper #row3 {
    background-color: green;
    flex 1 1 auto;
    display: flex;
}
.vwrapper #row3 #col1 {
    background-color: yellow;
    flex 0 0 240px;
}
.vwrapper #row3 #col2 {
    background-color: orange;
    flex 1 1;
}
.vwrapper #row3 #col3 {
    background-color: purple;
    flex 0 0 240px;
}
<body>
    <div class="vwrapper">
        <div id="row1">
            this is the header
        </div>
        <div id="row2">
            this is the second line
        </div>
        <div id="row3">
            <div id="col1">
                col1
            </div>
            <div id="col2">
                col2
            </div>
            <div id="col3">
                col3
            </div>
        </div>
    </div>
</body>

मैंने एक heightविशेषता जोड़ने की कोशिश की है , जो तब काम करता है जब मैं इसे एक हार्ड नंबर पर सेट करता हूं, लेकिन जब मैं इसे सेट नहीं करता हूं 100%। मैं समझता हूं कि height: 100%यह काम नहीं कर रहा है, क्योंकि सामग्री ब्राउज़र विंडो नहीं भर रही है, लेकिन क्या मैं फ्लेक्सबॉक्स लेआउट का उपयोग करके विचार को दोहरा सकता हूं?


2
विज़ुअल्स के लिए अपवोट, आपने उन्हें कैसे बनाया?
जोनाथन

2
ओमनीग्राफल, और टचअप के लिए पिक्सेलमेटर।
ईविल कोठरी बंदर

जवाबों:


115

आप स्थापित करना चाहिए heightके html, body, .wrapperलिए 100%(इनहेरिट पूरी ऊंचाई के लिए) और फिर सिर्फ एक सेट flexकी तुलना में अधिक से अधिक मूल्य 1के लिए .row3और दूसरों पर नहीं।

.wrapper, html, body {
    height: 100%;
    margin: 0;
}
.wrapper {
    display: flex;
    flex-direction: column;
}
#row1 {
    background-color: red;
}
#row2 {
    background-color: blue;
}
#row3 {
    background-color: green;
    flex:2;
    display: flex;
}
#col1 {
    background-color: yellow;
    flex: 0 0 240px;
    min-height: 100%;/* chrome needed it a question time , not anymore */
}
#col2 {
    background-color: orange;
    flex: 1 1;
    min-height: 100%;/* chrome needed it a question time , not anymore */
}
#col3 {
    background-color: purple;
    flex: 0 0 240px;
    min-height: 100%;/* chrome needed it a question time , not anymore */
}
<div class="wrapper">
    <div id="row1">this is the header</div>
    <div id="row2">this is the second line</div>
    <div id="row3">
        <div id="col1">col1</div>
        <div id="col2">col2</div>
        <div id="col3">col3</div>
    </div>
</div>

डेमो


अपनी सामग्री को भरने के लिए सामग्री divs का विस्तार करते हुए ऐसा करने का कोई तरीका? यहां अपना उदाहरण दिया
इमली

@iameli, क्रोम के लिए मिनट-ऊँचाई का उपयोग करें बजाय ऊँचाई fiddle.jshell.net/Lhh3wde/1
जी-

2
JSFiddle टूट गई है
जोएल

यहाँ काम कर रहा है कोडन डेमो: codepen.io/mprinc/pen/JjGQvae और इसी तरह के प्रश्न में स्पष्टीकरण: stackoverflow.com/a/63174085/257561
mPrinC

फिडेल एक कोडपैन द्वारा प्रतिस्थापित किया जाता है जो गायब नहीं होना चाहिए, यह स्निपेट की एक प्रति है। ध्यान दें कि आजकल के क्रोम संस्करण में न्यूनतम ऊंचाई की आवश्यकता नहीं है।
जी-साइरिलस

18

रैपर को 100% ऊंचाई पर सेट करें

.vwrapper {
  display: flex;
  flex-direction: column;

  flex-wrap: nowrap;
  justify-content: flex-start;
  align-items: stretch;
  align-content: stretch;

  height: 100%;
}

और फ्लेक्स-बढ़ने के लिए तीसरी पंक्ति सेट करें

#row3 {
   background-color: green;
   flex: 1 1 auto;
   display: flex;
}

डेमो


3
मेरे मामले में html, बॉडी, .wrapper {ऊंचाई: 100%; } काम कर रहा है। न केवल काम करने वाले रैपर।
ग्नगनपथ

1

मैं आपको दूसरा तरीका दिखाता हूं जो 100% काम करता है। मैं उदाहरण के लिए कुछ पैडिंग भी जोड़ूंगा।

<div class = "container">
  <div class = "flex-pad-x">
    <div class = "flex-pad-y">
      <div class = "flex-pad-y">
        <div class = "flex-grow-y">
         Content Centered
        </div>
      </div>
    </div>
  </div>
</div>

.container {
  position: fixed;
  top: 0px;
  left: 0px;
  bottom: 0px;
  right: 0px;
  width: 100%;
  height: 100%;
}

  .flex-pad-x {
    padding: 0px 20px;
    height: 100%;
    display: flex;
  }

  .flex-pad-y {
    padding: 20px 0px;
    width: 100%;
    display: flex;
    flex-direction: column;
  }

  .flex-grow-y {
    flex-grow: 1;
    display: flex;
    justify-content: center;
    align-items: center;
    flex-direction: column;
   }

जैसा कि आप देख सकते हैं कि हम फ्लेक्स-ग्रो और फ्लेक्स-दिशा विशेषता का उपयोग करते हुए नियंत्रण के लिए कुछ आवरणों के साथ इसे प्राप्त कर सकते हैं।

1: जब माता-पिता "फ्लेक्स-दिशा" एक "पंक्ति" होते हैं, तो इसका बच्चा "फ्लेक्स-ग्रो" क्षैतिज रूप से काम करता है। 2: जब माता-पिता "फ्लेक्स-दिशा" "कॉलम" होते हैं, तो इसका बच्चा "फ्लेक्स-ग्रो" लंबवत रूप से काम करता है।

उम्मीद है की यह मदद करेगा

डैनियल


1
divoverkill।
जॉन

आप अपने में से एक को हटा सकते हैं flex-pad-y:)
इयोन

1
अच्छा ..! यह एकमात्र उदाहरण है जो मेरी "सामग्री" <div> बनाने में कामयाब रहा (मेरे हेडर और फुटर के बीच) पूरी स्क्रीन ऊंचाई को भरता है। अन्य सभी उदाहरण "ऊँचाई: 100%" विशेषता की उपेक्षा करते हैं।
माइक गल्डहिल

यह एक शांत समाधान है। मुझे पता है कि जॉन डीआईवी ओवरकिल के ऊपर कहता है, लेकिन मैं सहमत नहीं हूं। आपको क्षैतिज और लंबवत दोनों तरह से फ्लेक्स बढ़ने के लिए चार विभाजनों की आवश्यकता है (ऊर्ध्वाधर रूप से महत्वपूर्ण एक है!)। मैं खुशी से मदद कर सकता है ! चार DIV होने से आपको बहुत लचीलापन मिलता है। एक बार जब आप DIV को हटाने की कोशिश करना शुरू कर देते हैं, तो यह लचीलापन कम होना शुरू हो जाता है!
गद्दास्टर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.