2010-03-29 15 views
7

मैं एक साधारण सरल वेबपृष्ठ लेआउट करने की कोशिश कर रहा हूं, लेकिन मैं एक दीवार मार रहा हूं।सीएसएस लेआउट जो उपलब्ध स्थान भरता है

मैं तरह चाहते विशुद्ध सीएसएस (कोई टेबल बातें गोबर के लिये, और कोई जावास्क्रिप्ट गतिशील आकार बदलने बातें)

मैं करना चाहते हैं के साथ सब कुछ करना है:

एक निश्चित ऊंचाई के साथ
  • एक पाद लेख एक निश्चित ऊंचाई के साथ
    • एक शीर्षक
    • एक निश्चित चौड़ाई एक निश्चित चौड़ाई
    • पूरे लेआउट हमेशा पूरे व्यूपोर्ट भर जाता है के साथ
    • सही साइडबार के साथ वाम साइडबार (अर्थात उपयोगकर्ता विंडो का आकार बदलता है, लेआउट नए आकार को बढ़ता है)

    दूसरे शब्दों में:

     
    
    |<    Total width is 100% of viewport    >| 
    
    +--------------------------------------------------------------+ --- 
    |     Header with a fixed height     | ^
    |--------+-------------------------------------------+---------+  
    |  |           |   |  
    |  |           |   |  
    | Left |           | Right | Total 
    | with |  Center grows in height/width  | with | height 
    | fixed |  and has scrollbars if necessary  | fixed | is 
    | width |           | width | 100% 
    |  |           |   | of 
    |  |           |   | viewport 
    |  |           |   | 
    |--------+-------------------------------------------+---------| 
    |     Footer with a fixed height     | v 
    +--------------------------------------------------------------+ --- 
    
    

    भागों है कि मुझे सबसे ज्यादा परेशानी दे रहे हैं

    • होने साइडबार और केंद्र में हेडर और पाद लेख की ऊंचाई के दृश्यमान शून्य की ऊंचाई के बराबर ऊंचाई होती है
    • केंद्र के पास व्यूपोर्ट की चौड़ाई के बराबर चौड़ाई है चौड़ाई दो साइडबार

    मुझे उपयोगकर्ताओं को आधुनिक ब्राउज़र रखने की आवश्यकता नहीं है।

    मुझे पता है कि यह करने के लिए इसी तरह के सवाल से पहले कहा गया है हूँ,

    • (http://stackoverflow.com/questions/1717564)
    • तीन पंक्ति tableless सीएसएस मध्य पंक्ति है कि शेष भरता के साथ लेआउट एक div भरने शेष स्थान बनाएं जैसे अंतरिक्ष (http://stackoverflow.com/questions/1703455)
    • 2 divs बनाएँ, एक शेष स्थान में समा जाता (http://stackoverflow.com/questions/1717564)

    ... और निष्कर्ष यह प्रतीत होता है कि कोई अच्छा समाधान नहीं है। वे जवाब कुछ हद तक पुराने हैं, इसलिए मुझे उम्मीद है कि कोई अब चाल जानता है।


    हाँ, मुझे पता है कि यह एक <table> का उपयोग कर पूरा करने के लिए तुच्छ प्रतीत होता हूँ, और के बाद "दीवार के खिलाफ मेरे सिर पीटने" मैं वास्तव में एक तालिका का उपयोग कर लेआउट प्राप्त करने का प्रयास किया था। दुर्भाग्य से, इस दृष्टिकोण के साथ, मैं (overflow: auto उपयोग करते हुए) जब सामग्री बहुत बड़ी होती है।) स्क्रॉल बार दिखाने के लिए केंद्र अनुभाग प्राप्त करने में असमर्थ रहे हैं

  • +0

    आप टेबल का उपयोग किये बिना क्रॉस-ब्राउज़र तरीके से ऐसा नहीं कर सकते हैं। टेबल्स यह मामूली रूप से कर सकते हैं। आप दीवार के खिलाफ अपने सिर को झुकाव में काफी समय बिताएंगे। टेबल्स एक उपकरण हैं और यदि "शुद्ध" सीएसएस जो भी आप चाहते हैं वह नहीं कर सकता (जो इस मामले में नहीं हो सकता है) तो आपको इसे प्राप्त करने और उपकरण का उपयोग करने की आवश्यकता है। – cletus

    +0

    @cletus: "टेबल्स यह मामूली रूप से कर सकते हैं" के संबंध में ... क्या यह केंद्र क्षेत्र के लिए स्क्रॉलबार भाग को भी अनुमति दे सकता है? मैंने वास्तव में टेबल के साथ पूरी चीज करने का प्रयास किया था, और यह लगभग काम करता था, स्क्रॉलिंग भाग को छोड़कर (केवल क्रोम 'ओवरफ्लो: ऑटो' का सम्मान करता था जब 'td' के अंदर उपयोग किया जाता था) –

    +0

    ऐसा करना सीएसएस के साथ अपेक्षाकृत सरल है, क्रॉस ब्राउज़र, और आपको टेबल की आवश्यकता नहीं है। मैं मार्कअप के नमूने के साथ एक लिंक को कोशिश करूँगा लेकिन एक सप्ताह के लिए सोमवार की रात शहर से बाहर जा रहा हूं, इसलिए मुझे नहीं पता कि मैं तब तक ऐसा करने में सक्षम हूं या नहीं। – Rob

    उत्तर

    8

    कैसे THIS के बारे में?
    यह कॉनकरर (केएचटीएम), क्रोम (वेबकिट) और फ़ायरफ़ॉक्स (गीको) के साथ काम करता है। हाल ही में कुछ भी पसंद है, यह शायद आईई 6 के तहत बार्फ़ होगा।

    <html><body style="margin: 0; padding: 0;"> 
        <div style="position: absolute; background: #faa; 
           height: 100px; top: 0px; width: 100%;">header</div> 
        <div style="position: absolute; background: #afa; 
           top: 100px; bottom: 100px; left: 0; width: 100px;">left</div> 
        <div style="position: absolute; background: #afa; 
           top: 100px; bottom: 100px; right: 0; width: 100px;">right</div> 
        <div style="position: absolute; background: #faa; 
           height: 100px; bottom: 0px; width: 100%;">footer</div> 
        <div style="position: absolute; background: #aaf; 
           bottom:100px; left: 100px;top: 100px;right: 100px; overflow: auto;"> 
        <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Aliquam tincidunt tempor 
    velit quis volutpat. Nulla pharetra pulvinar arcu sed lacinia. Nulla ultrices aliquet sem, 
    vitae commodo elit condimentum ut. Nulla consectetur facilisis nibh, et tempus purus 
    pellentesque nec. Ut eu nibh ut arcu mattis luctus. Cras at interdum quam. Pellentesque 
    imperdiet mi vitae felis sollicitudin iaculis. Maecenas accumsan tortor neque, at posuere 
    felis. Quisque ultricies mi quis dolor pellentesque elementum. Maecenas quis nunc tortor. 
    Cras eu velit faucibus nulla volutpat mollis. Aliquam fermentum lobortis diam ut pharetra. 
    Duis mattis posuere fringilla. Morbi consectetur mauris vel libero pellentesque varius. 
    Aenean leo enim, placerat a feugiat nec, ultrices et nulla. Etiam tincidunt urna id justo 
    molestie faucibus. Cras neque enim, semper et sodales eu, volutpat nec urna. Vestibulum 
    interdum arcu et ante egestas ut lacinia dui semper. Cras ligula lacus, aliquet nec dapibus 
    ac, commodo vitae libero. In gravida venenatis sapien a convallis.</p> 
    
    
        <p>Nulla ac risus eu velit pulvinar pretium. Etiam porttitor viverra sollicitudin. 
    Donec lectus mi, posuere quis luctus facilisis, lacinia non ante. Sed sed mi neque. Etiam 
    neque risus, bibendum et tincidunt vel, pharetra nec risus. In hac habitasse platea 
    dictumst. Nam sollicitudin condimentum lorem, quis dignissim turpis sagittis nec. 
    Pellentesque diam nunc, rhoncus quis lobortis id, lacinia quis lorem. Maecenas tempor metus 
    nec velit facilisis in rhoncus lectus varius. Integer mollis, odio ut pharetra varius, elit 
    nulla pellentesque neque, a egestas est justo dapibus neque. Vivamus a mauris massa, sit 
    amet commodo orci. Aliquam nec iaculis sapien. Suspendisse ornare, tortor eget mattis 
    tempus, nulla ligula fermentum elit, vitae euismod odio metus ac risus. Etiam iaculis 
    dignissim consectetur. Nunc molestie lorem ac neque pulvinar vitae eleifend justo 
    facilisis.</p> 
    
        <p>Duis a sem turpis, et cursus arcu. Suspendisse potenti. Sed eu risus orci, eget 
    bibendum justo. Praesent dapibus porttitor mauris, ac sollicitudin eros pretium quis. 
    Curabitur mi eros, aliquam et ultrices et, adipiscing ut mauris. Nunc pretium malesuada nisi 
    laoreet consectetur. Phasellus mi arcu, rutrum in blandit in, consectetur non risus. 
    Vestibulum enim lacus, aliquam eu ultrices a, tempor ut turpis. Lorem ipsum dolor sit amet, 
    consectetur adipiscing elit. Curabitur rhoncus faucibus sapien, quis vulputate eros tempus 
    consequat. Vivamus id metus massa. Vivamus aliquet enim quis sem viverra eu molestie elit 
    cursus.</p> 
    
        <p>Mauris at lorem massa. Aliquam risus ligula, vestibulum et placerat condimentum, 
    pellentesque sit amet justo. Cras tempor sollicitudin ultrices. Aliquam sed elit sapien. 
    Praesent consectetur molestie vehicula. Pellentesque quis lectus et nunc accumsan feugiat. 
    Ut rhoncus aliquet libero sed rhoncus. Fusce egestas nunc eu elit vestibulum placerat. Class 
    aptent taciti sociosqu ad litora torquent per conubia nostra, per inceptos himenaeos. 
    Phasellus vitae nisi ante, id fermentum justo.</p> 
    
        <p>Donec iaculis magna nec elit fringilla imperdiet. Proin mauris sem, pellentesque sed 
    ultrices ac, luctus ac elit. Donec blandit, orci ac volutpat luctus, turpis sem malesuada 
    tellus, eget porta magna nisi vitae quam. In vitae scelerisque urna. Proin ante odio, 
    ultrices lobortis scelerisque at, dictum non justo. Pellentesque tincidunt congue leo 
    malesuada ullamcorper. Quisque dapibus, massa dignissim gravida blandit, augue felis 
    vehicula urna, et ullamcorper turpis orci sit amet nibh. Ut vitae consequat nibh. 
    Pellentesque turpis justo, ultrices ac porta in, pretium quis quam. Donec purus nisi, 
    dignissim vitae hendrerit vel, hendrerit ac sapien. Fusce facilisis purus a libero elementum 
    ultrices. Nunc in libero congue ipsum tempor suscipit. Pellentesque pharetra pretium 
    volutpat. Nam sapien arcu, viverra vitae euismod sit amet, mollis nec arcu. Phasellus at 
    elit metus, sit amet tempus turpis. Phasellus mattis justo ut est varius facilisis ut et 
    leo. Phasellus congue cursus est eget luctus. In eleifend diam at enim ultricies a lacinia 
    mauris molestie. Nunc porttitor bibendum vulputate. Pellentesque quis risus vel mi 
    pellentesque imperdiet vitae ac nunc.</p> 
    
        </div> 
        </body></html> 
    
    +0

    ओह, अच्छा एक! जब मैं अपना लिख ​​रहा था, तो एक तत्व के आकार को स्थापित करने के लिए पूर्ण स्थिति का विचार, लेकिन मैंने इसे समस्या के समाधान के रूप में नहीं सोचा - बहुत अच्छा! –

    +0

    बिल्कुल सही! मुझे पता था कि ऐसा करने का एक उचित तरीका होना चाहिए ... –

    2

    मुझे लगता है कि यह एक अजीब बात का एक सा करने की कोशिश करने के लिए है। फिर भी, मैंने उस पर एक शॉट लिया, और शायद ही आपको मिल गया हो, लेकिन शायद मैंने एक अलग विधि का उपयोग किया जो उपयोगी हो सकता है। मुझे यह देखने में बहुत दिलचस्पी है कि रॉब का बेहतर तरीका है या नहीं।मेरी विधि एक समस्या के साथ काम करती है: सामग्री स्क्रॉल करने योग्य है, लेकिन आप स्क्रॉल बार नहीं देख सकते हैं। मैं इसे ठीक करने के तरीके के बारे में सोचने के लिए प्रतीत नहीं कर सकता। वैसे भी, मैं यहां आया हूं: http://www.happyspork.com/layout_test.html

    0

    अगर कोई रुचि है मैं एक लेआउट css का उपयोग करता है गतिशील table व्यवहार का अनुकरण करने के लिए विकसित [div s का उपयोग करके]। यह क्रोम, फ़ायरफ़ॉक्स और आईई> 7 में काम करता है।

    DEMO, खिड़की

    आकार बदलने यह खड़ा है के रूप में सभी पांच घटक बढ़ने के रूप में उनके संबंधित सामग्री करते हैं, तथापि, तुम सच में अपने बाएँ और दाएँ पक्ष सिर्फ तय करना चाहते हैं .east और करने के लिए एक width नियम लागू में एक जाना है .west

    इसके साथ fiddle है।

    कोड:

    <div class="view" style="height:100%; width:100%"> 
        <div class="north"> 
         n 
        </div> 
    
        <div class="middle"> 
         <div class="west"> 
          w 
         </div> 
    
         <div class="centre"> 
          c 
         </div> 
    
         <div class="east"> 
          e 
         </div> 
        </div> 
    
        <div class="south"> 
         s 
        </div> 
    </div> 
    
    html, body { 
        height : 100%; 
        margin : 0; 
    } 
    
    .view, 
    .view > .middle { 
        display : table; 
    } 
    
    .view > .north, 
    .view > .south { 
        height : 1px; 
        display : table-row; 
    } 
    .view > .north { vertical-align : top; } 
    .view > .south { vertical-align : bottom; } 
    
    .view > .middle > div { 
        display : table-cell; 
    } 
    .view > .west, 
    .view > .east { 
        width : 1px; 
    } 
    
    /*div { border : 1px solid black; }*/ 
    

    सरल मार्कअप, कोई जे एस, और गतिशील लेआउट। क्या चल रहा है यह देखने के लिए border सीएसएस लाइन को असम्बद्ध करें।
    आपके प्रश्न के निचले हिस्से में मुझे लगता है कि आपने तालिकाओं का उपयोग करने की कोशिश की लेकिन मुद्दों के साथ। पर centre या middle पर जो भी आप चाहते हैं (स्क्रॉलबार चीज़ के लिए) हो सकता है। शायद यह आपकी मदद कर सकता है।

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