2013-03-05 7 views
9

के साथ पूर्ण ऊंचाई सामग्री मुझे कभी नहीं लगता कि यह संभव है, लेकिन यहां बहुत सारे चालाक लोग हैं इसलिए मैंने सोचा कि मैं पूछूंगा। मैं एक पूर्ण-ऊंचाई कंटेनर रखने का एक तरीका ढूंढ रहा हूं जिसकी चौड़ाई इस बात पर निर्भर करती है कि कितनी सामग्री है। मैं सबसे छोटी संभव चौड़ाई का उपयोग करते हुए पाठ को पूर्ण ऊंचाई तक ले जाने के क्षेत्र को भरना चाहता हूं। ऊंचाई ज्ञात और हार्ड कोडित है, सामग्री की मात्रा नहीं है।सबसे छोटी संभव चौड़ाई

मैं something like this साथ काम कर रहा हूँ:

<div> 
    <p>Lorem Ipsum is simply dummy text of the printing and typesetting industry. 
    Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, 
    when an unknown printer took a galley of type and scrambled....</p> 
</div> 
div { 
    background:red url(http://lorempixel.com/600/400/); 
    float:left; 
    width:600px; 
    height:400px; 
} 
p { 
    background:#fff; 
    padding:20px; 
    margin:20px; 
} 

आम तौर पर सामग्री ऊपर से नीचे तक पेज भरता है:

enter image description here

मैं क्या देख रहा हूँ प्रकार है विपरीत, बाएं से दाएं भरना:

enter image description here

कम सामग्री के साथ

, यह इस तरह दिखना चाहिए:

enter image description here

वहाँ किसी भी है:

enter image description here

width:auto के साथ पूर्ण हार्ड-कोडेड ऊंचाई का उपयोग करते हुए इस आशय का उत्पादन टेक्स्ट को चौड़ाई को चौड़ाई या कोड रखने के बिना, छोटी संभव चौड़ाई के साथ ऊंचाई को भरने का तरीका टी अतिप्रवाह? यह असंभव प्रतीत होता है और मुझे नहीं पता कि इसे कैसे पहुंचाया जाए। जावास्क्रिप्ट/jQuery समाधान स्वागत है।

+0

तो अधिक वहाँ है सामग्री, अधिक अपने पाठ कंटेनर विस्तृत हो जाएगा? – Stphane

+1

दाएं। पाठ को कंटेनर भरना चाहिए और जितनी छोटी चौड़ाई संभव हो उतनी ऊंचाई होनी चाहिए। –

+0

संबंधित: http://stackoverflow.com/questions/9864123/force-paragraph-to-use-the-maximum-height- उपलब्ध –

उत्तर

3

क्या मैं मन में है एक सरल jQuery समाधान है: थोड़ी देर के पाश में, शर्त सेट ऐसा है कि पाश जब भी ऊंचाई कंटेनर ऊंचाई से अधिक चलाया जाता है।

div { 
    background:red url(http://lorempixel.com/600/400/); 
    float:left; 
    overflow: hidden; 
    width:600px; 
    height:400px; 
    padding: 20px; 
    box-sizing: border-box; 
} 
p { 
    background:#fff; 
    padding: 20px; 
    width: 1px; 
} 
: पाश में, आप जब तक ऊंचाई नहीं रह गया है कंटेनर ऊंचाई :)

$(document).ready(function() { 
    // The 400-80 is because you have to subtract the container padding and the element's own padding 
    while($("div > p").height() > 400 - 80) { 
     currentWidth = $("div > p").width(); 
     $("div > p").width(currentWidth + 1);  
    } 
}); 

http://jsfiddle.net/teddyrised/RwczR/4/

मैं अपने सीएसएस करने के लिए कुछ परिवर्तन किए हैं, भी अधिक है पिक्सेल द्वारा <p> पिक्सेल की चौड़ाई बढ़ाने के

+0

एक अच्छा समाधान की तरह दिखता है, मैं बस इसे अपने प्रोजेक्ट में प्लग करने की कोशिश कर रहा हूं अब और असफल रहा। संपादित करें: आह, मैं 'चौड़ाई: 1px;' पहले सेट करना भूल गया था। मैं 10px अंतराल के साथ जा रहा (पर्याप्त अच्छा)। बहुत अच्छा, छोटा, आसान समाधान। –

+1

पूर्ण ऊंचाई (पैडिंग और मार्जिन के साथ) प्राप्त करने के लिए '.outerHeight (true) 'का उपयोग करें। – Pavlo

+0

@PavloMykhalov यह सच है, लेकिन मैं आम तौर पर मार्जिन पतन के परिवर्तनों के कारण मार्जिन का उपयोग करने से बचता हूं, जो गणना को जटिल बनाता है। – Terry

1

यह भी जावास्क्रिप्ट के साथ करना मुश्किल नहीं है। मुझे नहीं पता कि जेएस के बिना इसे कैसे करना है (यदि यह भी संभव है)।

आप 320px ऊंचाई तक पहुंचने तक आयामों को मापने के लिए एक और "अदृश्य" div का उपयोग कर सकते हैं, जबकि एक सेट राशि के साथ इसे कम कर सकते हैं (एक समय में 1 पिक्सेल भी, यदि आप यथासंभव सटीक होना चाहते हैं)।

var $measurer = $("<div>").css({'position': 'fixed', 'top': '100%'}) 
    .text($("p").text()).appendTo('body'); 

var escape = 0; 
while ($measurer.height() < 320) { 
    console.log($measurer.height()); 
    $measurer.width(function (_, width) { return width - 1; }); 
    console.log($measurer.width()); 
    escape++; 
    if (escape > 2000) { 
     break; 
    } 
} 
$("p").width($measurer.width()); 
$measurer.remove(); 

http://jsfiddle.net/RwczR/2/

1

इस प्रयास करें:

var p = $('p'); 
var height = parseInt(p.height())-40; 
p.height('auto'); 
p.width('auto'); 
for(var i=p.width(); i--;) { 
    p.width(i); 
    if (p.height() > height) { 
     p.height(height+20); 
     p.width(i-1); 
     break; 
    } 
} 
p.height(height); 

http://jsfiddle.net/RwczR/6/

+0

यह कुछ भी करने के लिए नहीं देखता है। शायद डेमो से कुछ याद आ रही है। –

+0

@WesleyMurch आपको पाठ को यादृच्छिक लंबाई स्ट्रिंग में बदलने के लिए क्लिक करने की आवश्यकता है – jcubic

+0

आह मेरी गलती, बहुत अच्छा लग रहा है! एक मामूली चिमटा: 'self.height (ऊंचाई +60) ' –

0

हम अनुच्छेद overflow:auto; दे सकते हैं।

यदि अनुच्छेद को लंबवत स्क्रॉल बार की आवश्यकता है, तो यह एक बना देगा।

चाल स्क्रॉल बार बनने तक चौड़ाई को कसने के लिए है।

var hasScrollBar = false; 
var p = document.getElementById('myParagraph'); 
while(!hasScrollBar) 
{ 
    if(p.scrollHeight>p.clientHeight) 
    { 
     //Has Scroll Bar 
     //Re-Increase Width by 1 Pixel 
     hasScrollBar=true; 
     p.style.width=(p.clientWidth+1)+"px"; 
    } 
    else 
    { 
     //Still no Scroll Bar 
     //Decrease Width 
     p.style.width=(p.clientWidth-1)+"px"; 
    } 
} 
+0

यह ब्राउज़र को दुर्घटनाग्रस्त लग रहा था, शायद मैंने कुछ गलत किया। –

1

आप jQuery/जावास्क्रिप्ट का उपयोग करें और ग्राहक की जाँच बनाम स्क्रॉल ऊंचाइयों चौड़ाई बढ़ती है जब तक यह पाठ, नीचे के समान हो गया रख सकते हैं।

आपको पर टैग पर 10 पर सीएसएस में overflow: hidden; पर सेट करने की आवश्यकता है ताकि आपको अतिप्रवाह सहित वास्तविक ऊंचाई प्रदान की जा सके।

नीचे कोड दोनों के लिए मार्जिन और पैडिंग भी लेता है; ऊंचाई और चौड़ाई और तदनुसार समायोजित करता है।

तदनुसार बाहरी div ajdust की ऊंचाई बदलना।

$(document).ready(function(){ 
    var $container = $("div"); 
    var containerHeight = $container.height(); 
    var containerWidth = $container.width(); 

    var $textWrapper = $(">p", $container); 

    var paddingMarginHeight = $textWrapper.outerHeight(true) - $textWrapper.innerHeight(); 
    var paddingMarginWidth = $textWrapper.outerWidth(true) - $textWrapper.innerWidth(); 

    $textWrapper.innerHeight(containerHeight - paddingMarginHeight); 

    //SetMinWidth(); 
    var maxWidth = containerWidth - paddingMarginWidth; 
    var visibleHeight = 0; 
    var actualHeight = 0; 

    for(i = 50; i <= maxWidth; i++){ 
     $textWrapper.innerWidth(i); 

     visibleHeight = $textWrapper[0].clientHeight; 
     actualHeight = $textWrapper[0].scrollHeight; 

     if(visibleHeight >= actualHeight){ 
      break; 
      console.log("ouyt"); 
     } 
    } 
}); 

DEMO - चौड़ाई आगे बढ़ें जब तक पाठ पूरी तरह से दिखाई दे रहा है


+0

@WesleyMurch: आपको jQuery बंद करने की आवश्यकता नहीं है, लेकिन यह गतिशील रूप से पैडिंग/मार्जिन प्राप्त करना आसान बनाता है। अन्यथा यह एक गतिशील समाधान है। '50' मिनट की चौड़ाई बस डेमो के लिए थी। मिनीविड्थ भी कवर होने के लिए आप 'क्लाइंटविड्थ' \ 'स्क्रॉलविड्थ' चेक भी शामिल करने के लिए उस पर विस्तार कर सकते हैं। अभी भी बहुत गतिशील। – Nope

+0

अच्छा समाधान भी। मैं छोटे से के साथ चला गया। मेरी प्रतिक्रिया में देरी के लिए खेद है, मुझे इन सभी उत्तरों का परीक्षण करना पड़ा (इतने सारे की उम्मीद नहीं थी)। हालांकि वे सभी एक ही दृष्टिकोण हैं। –

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