2012-01-30 12 views
29

मैं एक स्वचालित ऊंचाई को एक div सेट करने की कोशिश कर रहा हूं जिसमें 2 बच्चे तत्व होते हैं, जो निश्चित और बिल्कुल respecitvely स्थित हैं।पूर्ण/निश्चित बच्चों के साथ पैरेंट कंटेनर पर ऑटो ऊंचाई

मैं चाहता हूं कि मेरे माता-पिता के कंटेनर की ऑटो ऊंचाई हो लेकिन मुझे पता है कि यह मुश्किल है क्योंकि बाल तत्वों को उनके ढांचे के साथ पृष्ठ संरचना से बाहर निकाला जाता है।

मैंने अपने माता-पिता div को ऊंचाई निर्धारित करने का प्रयास किया है, लेकिन मेरे लेआउट उत्तरदायी होने पर, जब यह मोबाइल पर स्केल हो जाता है, तो ऊंचाई वही रहती है जहां सामग्री को ढेर किया जाता है और इसलिए ऊंचाई बढ़ने की आवश्यकता होती है अपने बच्चों के साथ।

सुनिश्चित नहीं हैं कि अगर यह समझ में आता है, मैं एटीएम मुझ पर मेरे वास्तविक कोड है न लेकिन Ive समझाने की कोशिश कर रहा एक बेला बनाया ...

http://jsfiddle.net/dPCky/

उत्तर

29

माता पिता div height:auto उपयोग नहीं कर सकते जब उसके बच्चों पूर्ण/निश्चित स्थान पर हैं।

आपको इसे प्राप्त करने के लिए जावास्क्रिप्ट का उपयोग करने की आवश्यकता होगी।

jQuery में एक उदाहरण:

var biggestHeight = 0; 
// Loop through elements children to find & set the biggest height 
$(".container *").each(function(){ 
// If this elements height is bigger than the biggestHeight 
if ($(this).height() > biggestHeight) { 
    // Set the biggestHeight to this Height 
    biggestHeight = $(this).height(); 
} 
}); 

// Set the container height 
$(".container").height(biggestHeight); 

कार्य उदाहरण http://jsfiddle.net/blowsie/dPCky/1/

+0

अहह शानदार @ ब्लॉइस, क्या मैं पूछ सकता हूं कि चयनकर्ता में * क्या करता है? और मैं पूछ सकता हूं कि यह वास्तव में कैसे काम करता है? – Liam

+1

* सभी बच्चों का चयन करता है, मैं $ ("कंटेनर") भी लिख सकता था। बच्चे()। प्रत्येक(), जो शायद अधिक कुशल होगा। यदि आप केवल प्रत्यक्ष बच्चों का चयन करना चाहते हैं, न कि बच्चों के बच्चों को आप $ ("कंटेनर> *") – Blowsie

+2

जैसे कुछ * चयनकर्ता और अन्य चयनकर्ताओं पर और पढ़ें। http://net.tutsplus.com/tutorials/html-css-techniques/the-30-css-selectors-you-must-memorize/ – Blowsie

6

http://jsfiddle.net/dPCky/32/ - एक समान प्रभाव float:left;

http://jsfiddle.net/dPCky/40/ का उपयोग कर - एक भी करीब अपने वांछित प्रभाव के लिए परिणाम।

यदि आप अपना एचटीएमएल बदलना चाहते हैं, तो आप ऊपर जो किया है वह कर सकते हैं।

मैं निम्नलिखित ट्यूटोरियल जो मैं अत्यधिक किसी को जो HTML/CSS में एक स्थिति समर्थक बनना चाहती है के लिए सिफारिश करेंगे से स्थिति सीखा:

http://www.barelyfitz.com/screencast/html-training/css/positioning/

मैं आम तौर पर जावास्क्रिप्ट का उपयोग कर जहां संभव हो जब किसी काम को करने से बच जाएंगे यदि आप अपने एचटीएमएल को समायोजित करने के इच्छुक हैं, तो संभावित रूप से एक सीएसएस या एचटीएमएल स्तर तय हो सकता है।

+3

"मैं आम तौर पर जावास्क्रिप्ट का उपयोग करने से बचता हूं" इस उदाहरण में बहुत सच है, खासकर यदि आपकी सामग्री गतिशील है या आपकी चौड़ाई द्रव है – Blowsie

+0

@ ब्लॉसी क्या मैं पूछ सकता हूं कि यदि आपकी चौड़ाई तरल है तो आप इससे क्यों बचेंगे? क्या आप .resize() के साथ फ़ंक्शन नहीं चला सकते? – Liam

+1

@Liam आप वास्तव में $ (विंडो) .resize() का उपयोग कर सकते हैं; अपने समारोह को फिर से चलाने के लिए घटना। तरल चौड़ाई में लिपि का उपयोग न करने का कारण यह है कि यदि तत्वों में तरल चौड़ाई होती है तो तत्वों की ऊंचाई आपकी स्क्रीन विंडो चौड़ाई के आधार पर बदल जाएगी, इसलिए आपको विंडो आकार में हर बार उन्हें आकार बदलना होगा। – Blowsie

-5

एक आसान तरीका है:

$(".container").height($(document).height()); 
1

कंटेनर के लिए इस ऑटो ऊंचाई कि किसी भी उपकरण और व्यूपोर्ट आकार बदलने या रोटेशन के लिए adapts का आनंद लें।

यह नाव, इनलाइन-ब्लॉक, निरपेक्ष, बच्चे के लिए मार्जिन और गद्दी सेट के साथ परीक्षण किया गया है।

<div class="autoheight" style="background: blue"> 
    <div style="position: absolute; width: 33.3%; background: red"> 
    Only 
     <div style="background: green"> 
     First level elements are measured as expected 
     </div> 
    </div> 
    <div style="float:left; width: 33.3%; background: red"> 
    One Two Three Four Five Six Seven Eight Night Ten 
    </div> 
    <div style="float:left; width: 33.3%; background: red"> 
    One Two Three Four Five Six 
    </div> 
</div> 

<script> 
function processAutoheight() 
{ 
    var maxHeight = 0; 

    // This will check first level children ONLY as intended. 
    $(".autoheight > *").each(function(){ 

     height = $(this).outerHeight(true); // outerHeight will add padding and margin to height total 
     if (height > maxHeight) { 
      maxHeight = height; 
     } 
    }); 

    $(".autoheight").height(maxHeight); 
} 

// Recalculate under any condition that the viewport dimension has changed 
$(document).ready(function() { 

    $(window).resize(function() { processAutoheight(); }); 

    // BOTH were required to work on any device "document" and "window". 
    // I don't know if newer jQuery versions fixed this issue for any device. 
    $(document).resize(function() { processAutoheight(); }); 

    // First processing when document is ready 
    processAutoheight(); 
}); 
</script> 
2

पार्टी के लिए देर से एक छोटी सी, लेकिन यह किसी की मदद कर सकते हैं के रूप में यह कैसे मैं इस मुद्दे का समाधान हाल ही में जे एस के बिना है - अगर बच्चों को उनके अनुपात बनाए रखने के वे मोबाइल उपकरणों के लिए हटना के रूप में। मेरा उदाहरण संदर्भ के लिए एक jQuery.cycle स्लाइड शो उत्तरदायी बनाने से संबंधित है। अगर आप ऊपर प्राप्त करने की कोशिश कर रहे हैं तो यह सुनिश्चित करें कि इसमें एक कंटेनर के भीतर पूरी तरह से स्थित बच्चों को शामिल किया गया है जिसमें मोबाइल पर 100% पृष्ठ चौड़ाई और बड़ी स्क्रीन पर स्पष्ट आयाम हैं।

आप व्यूपोर्ट चौड़ाई इकाइयों (vw) का उपयोग करने के लिए अभिभावक की ऊंचाई सेट कर सकते हैं, इसलिए ऊंचाई डिवाइस की चौड़ाई के सापेक्ष अनुकूल है। समर्थन इन दिनों काफी व्यापक है कि अधिकांश मोबाइल डिवाइस इन इकाइयों का सही ढंग से उपयोग करेंगे, बग और आंशिक समर्थन vw से संबंधित नहीं है (बल्कि, आईई में vmin और vmax के लिए)। केवल ओपेरा मिनी अंधेरे में है।

यह जानने के बिना कि बच्चे इस उदाहरण में उत्तरदायी बिंदुओं के बीच क्या कर रहे हैं (jsfiddle में स्पष्ट ऊंचाई सेट है), आइए मान लें कि बच्चों की ऊंचाई डिवाइस की चौड़ाई के सापेक्ष अनुमानित रूप से नीचे है, जो आपको सटीक रूप से सटीक रूप से मानने की अनुमति देती है पहलू अनुपात के आधार पर ऊंचाई।

.container{ height: 75vw; }

http://caniuse.com/#feat=viewport-units

caniuse पर क्या टिप्पणी ज्ञात मुद्दा # 7 यदि आप 100vw चौड़ाई उपाय के रूप में लिए जा रहे हैं, लेकिन यहाँ हम ऊंचाई के साथ खेल रहे हैं!

+0

यह वही है जो मुझे चाहिए ... आप मेरे पंखों के नीचे हवा हैं। – Dale

0

@ Blowsie के जवाब देने के लिए संबंधित:

/** 
* Sets the height of a container to its maximum height of its children. This 
* method is required in case 
* 
* @param selector jQuery selector 
*/ 
function setHeightByChildrenHeight(selector) 
{ 
    $(selector).each(function() 
    { 
     var height = 0; 

     $(this).children("*").each(function() 
     { 
      height = Math.max(height, $(this).height()); 
     }); 

     $(this).height(height); 
    }); 
}; 
1

आप JavaScript का उपयोग नहीं करना चाहते हैं, तो आप इस सवाल का जवाब https://stackoverflow.com/a/33788333/1272106 जानकारी दे सकती है।

संक्षिप्त विवरण: एक तत्व डुप्लिकेट करें और माता-पिता का विस्तार करने के लिए छिपाने के लिए दृश्यता सेट करें।

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