2014-09-08 3 views
6

क्या कोई इस व्यवहार को समझा सकता है? मैंने दो क्षैतिज-स्टैक्ड फ्लेक्सबॉक्स बनाए हैं जिन्हें मैं एक पूर्ण-स्क्रीन वेब ऐप के लिए एक सरल रूपरेखा बनाना चाहता हूं। हालांकि, मेरे शीर्ष फ्लेक्सबॉक्स के अंदर सामग्री जोड़ने से यह विस्तार होता है, अंततः स्क्रीन के नीचे एक को दबाकर।अतिप्रवाह के बावजूद मेरा फ्लेक्सबॉक्स क्यों विस्तारित होता है: छुपा/ऑटो?

var buttonEl = document.getElementById('addButton'); 
 

 
buttonEl.addEventListener('click', function() { 
 
    var newEl, 
 
     ulEl; 
 
    
 
    // Create a list item element 
 
    newEl = document.createElement('li'); 
 
    newEl.innerHTML = "Test List Item"; 
 
    
 
    // Add the list item element to the list 
 
    ulEl = document.getElementById('list'); 
 
    ulEl.appendChild(newEl); 
 
}, false);
* { 
 
    padding: 0px; 
 
    margin: 0px; 
 
    overflow: hidden; 
 
} 
 
html { 
 
    width: 100%; 
 
    height: 100%; 
 
} 
 
body { 
 
    display: flex; 
 
    flex-direction: column; 
 
    width: 100%; 
 
    height: 100%; 
 
    background: lightblue; 
 
} 
 
#top { 
 
    flex-grow: 1; 
 
    overflow-y: auto; 
 
} 
 
#bottom { 
 
    flex-basis: 1em; 
 
} 
 
li { 
 
    width: 100%; 
 
    height: 2em; 
 
    line-height: 2em; 
 
    background: white; 
 
}
<div id="top"> 
 
    <button id="addButton">add list item</button> 
 
    <ul id="list"> 
 
    </ul> 
 
</div> 
 
<div id="bottom"> 
 
    Bottom 
 
</div>

+0

किस तरह से - लंबवत? यदि आप लंबवत मतलब रखते हैं, तो समस्या सरल है: यदि आप तत्व पर * ऊंचाई * को परिभाषित नहीं करते हैं, तो यह सामग्री को शामिल करने के लिए लंबवत रूप से विस्तृत (विस्तारित) करने जा रहा है, भले ही आप ओवरफ़्लो कैसे सेट करते हैं। –

+0

@cale_b हाहा, ज़ाहिर है कि यह इतना आसान होगा। अब, गतिशील रूप से आकार के लिए कुछ ऐसा करने के लिए उचित ऊंचाई क्या होगी? ओह, सीएसएस ... – BDawg

+0

@cale_b अगर आपके पास उत्तर देने का समय है, तो मुझे इसके लिए अंक देना अच्छा लगेगा। इसके अलावा, यह एक उदारवादी सवाल नहीं था, क्या कोई ऊंचाई उचित है अगर इसे ओवरराइड किया जा रहा है? – BDawg

उत्तर

6

द्वारा ओवरराइट किया जाएगा, यह करने का एक तरीका यहां है: http://jsfiddle.net/1ejgybmv/

* { 
    padding: 0px; 
    margin: 0px; 
} 

html, body { 
    height: 100%; 
} 

body { 
    display: flex; 
    flex-direction: column; 
    background: lightblue; 
} 
#top { 
    flex: 1 1 auto; 
    overflow-y: auto; 
} 

#bottom { 
    flex: 0 0 1em; 
} 

li { 
    height: 2em; 
    line-height: 2em; 
    background: white; 
} 
-1

बहुत आसान। प्रभावी ढंग से है कि संपत्ति आप पहली बार में परिभाषित "की हत्या"

#top { 
    flex-grow: 1; 
    overflow-y: auto; 
} 

: आप overflow:hidden साथ सभी तत्वों को शीर्ष

* { 
    padding: 0px; 
    margin: 0px; 
    overflow: hidden; 
} 

में तो फिर तुम इस के साथ #top div के लिए संपत्ति के ऊपर लिख तय कर रहे हैं। बस उस overflow-y से छुटकारा पाएं या overflow-y:hidden को परिभाषित करें और यह काम करेगा। याद रखें कि सीएसएस में परिभाषाओं का क्रम बहुत महत्वपूर्ण है, इसलिए एक परिभाषा के बाद जो कुछ भी आप जोड़ते हैं, उसे नई परिभाषा

+0

दुर्भाग्य से, यह काम नहीं करता है। – BDawg

+0

बेशक यह करता है। Http://jsfiddle.net/vunn9e0b/ देखें, मैंने आपकी पहेली को फोर्क किया और इच्छाओं पर पंक्तियां जोड़ दीं और कभी भी स्क्रॉल नहीं मिली – Devin

+0

आपकी मदद के लिए धन्यवाद, लेकिन मैं स्क्रॉल बार से छुटकारा पाने की कोशिश नहीं कर रहा हूं। मैं स्क्रीन को धक्का देने से नीचे फ्लेक्सबॉक्स को रोकने की कोशिश कर रहा हूं। आइटम को तब तक जोड़ें जब तक कि वे नीचे से भरें और नीचे दिए गए बॉक्स को प्रत्येक अतिरिक्त तत्व के साथ आगे दबाए रखें। – BDawg

संबंधित मुद्दे