2012-03-12 10 views
7

मान लें कि मैं पॉपअप संदेश के रूप में उपयोग के लिए अपने व्यूपोर्ट के केंद्र में एक तत्व रखना चाहता हूं। यह पूरा करना चाहिए निम्नलिखित:व्यूपोर्ट के भीतर एचटीएमएल तत्व को लंबवत और क्षैतिज रूप से केन्द्रित करने का सबसे अच्छा तरीका क्या है?

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

वहाँ नीचे दी गई तालिका के आधार पर समाधान का सहारा के बिना इस को प्राप्त करने का एक अच्छा तरीका है?

<table style="position:absolute;width:100%;height:100%"> 
    <tr> 
     <td align="center"> 
      <span id="centeredContent">I always remain centered</span> 
     </td> 
    </tr> 
</table> 
+0

क्या इससे मदद मिलती है? http://stackoverflow.com/questions/9656362/div-horizontally-center-and-vertically-middle –

+0

http://stackoverflow.com/questions/49350/practical-solution-to-center-vertically-and का संभावित डुप्लिकेट -horizontally-in-html-that-works-in-f, हालांकि यहां कोई जवाब नहीं है। –

+0

यदि आप उस तत्व की ऊंचाई को जानते हैं जिसे आप केंद्र में रखने की कोशिश कर रहे हैं तो ऊर्ध्वाधर केंद्र (जावास्क्रिप्ट के बिना) केवल तभी संभव है। यदि आपके पास केवल टेक्स्ट की एक पंक्ति है, तो आप उसे भी केंद्र में रख सकते हैं, फिर भी, आपको 'लाइन-ऊंचाई' का उपयोग करके ज्ञात ऊंचाई होगी। – Sparky

उत्तर

8

सबसे अच्छा समाधान (मेरी राय में) पूर्ण स्थिति का उपयोग करने के 50 में तत्व के ऊपर बाईं जगह है %/50%, फिर नकारात्मक मार्जिन का उपयोग कर तत्व को केंद्र में वापस लाएं। एकमात्र कमी यह है कि आपको तत्व की चौड़ाई और ऊंचाई निर्दिष्ट करना है।यहाँ एक उदाहरण है:

HTML:

​<div id="centerme"> 
    Hello, world! 
</div>​ 

सीएसएस: http://jsfiddle.net/UGm2V/


तुम सच में केंद्रित सामग्री की आवश्यकता होती है एक के लिए:

​#centerme 
{ 
    position: absolute; 
    left: 50%; 
    top: 50%; 

    /* You must set a size manually */ 
    width: 100px; 
    height: 50px; 

    /* Set negative margins equal to half the size */ 
    margin-left​: -50px; 
    margin-top: -25px; 

    background-color: cornflowerblue; 
} 

यहाँ jsfiddle पर एक प्रदर्शन है गतिशील ऊंचाई, एक और अधिक उन्नत समाधान है। सावधान रहें कि यह पुराने आईई ब्राउज़र में काम नहीं करेगा। एचटीएमएल निम्नानुसार है:

<div id="outter-container"> 
    <div id="inner-container"> 
     <div id="centred"> 
      <p>I have a dynamic height!</p> 
      <p>Sup!</p> 
     </div>   
    </div> 
</div> 

बाहरी कंटेनर को पृष्ठ की चौड़ाई और ऊंचाई को कवर करने की आवश्यकता है। यह पूर्ण स्थिति के साथ एक ब्लॉक तत्व है।
आंतरिक कंटेनर वास्तव में एक टेबल है! यह display: table सीएसएस संपत्ति द्वारा तय किया गया है। यहां जीत यह है कि आपको वास्तव में किसी भी तालिका HTML की आवश्यकता नहीं है।
# केंद्रित div अंतिम आवश्यक तत्व है। इसमें अभी भी पृष्ठ की चौड़ाई और ऊंचाई का 100% शामिल है, लेकिन इसके अंदर रखी गई कुछ भी लंबवत और क्षैतिज रूप से केंद्रित होगी। यह सीएसएस की जरूरत है, स्पष्टीकरण के साथ है:

/* 
An outter container is needed because the table 
won't cover the page width and height on it's own 
*/ 
#outter-container 
{ 
    position: absolute; 
    top: 0px; 
    right: 0px; 
    bottom: 0px; 
    left: 0px; 
} 

/* 
The inner container is a table which is set to 
cover the width and height of the page. 
*/ 
#inner-container 
{ 
    display: table; 
    width: 100%; 
    height: 100%; 
} 

/* 
This table cell will cover 100% of the page width 
and height, but everything placed inside it will 
be placed in the absolute centre. 
*/ 
#centred 
{ 
    display: table-cell; 
    vertical-align: middle; 
    text-align: center; 
} 

और बेशक, यहां इसके साथ जाने के लिए एक jsfiddle प्रदर्शन है: http://jsfiddle.net/N7ZAr/3/

+0

+1।हालांकि गतिशील आकार के तत्व के केंद्र में काफी अंतर नहीं है। – JohnW

+0

दरअसल, लेकिन मेरे अनुभव में मुझे शायद ही कभी गतिशील ऊंचाई के साथ कुछ केंद्रित करने की आवश्यकता है। यदि आपको गतिशील रूप से केंद्रित तत्व पर वर्टिकल सेंटरिंग की ज़रूरत है तो आपको टेबल का उपयोग करना होगा। वैकल्पिक रूप से आप 'प्रदर्शन: तालिका' सीएसएस संपत्ति का उपयोग कर सकते हैं जो आपको HTML में divs का उपयोग करने की अनुमति देता है। मैं इसे संपादित करूंगा – Hubro

+0

में मुझे लगता है कि इस परिदृश्य के लिए सामान्य उपयोग हैं। अगर मैं इसे पॉपअप संदेश के लिए उपयोग कर रहा था तो मैं चाहता हूं कि संदेश पाठ के साथ चौड़ाई बढ़े। यदि वह चौड़ाई निर्दिष्ट 'अधिकतम-चौड़ाई' से अधिक हो तो मैं चाहता हूं कि ऊंचाई बढ़ने लगें। मुझे लगता है कि एक और सामान्य उपयोग एक छवि दर्शक होगा, जहां आप चाहते हैं कि छवियां जो भी आकार हों, केंद्रित हों। किसी भी तरह से मुझे लगता है कि आपका अद्यतन समाधान निकटतम है जिसे हम प्राप्त करने जा रहे हैं। यह काम करता है और यह 'टेबल' का उपयोग नहीं करता है। आपके प्रयासों के लिए बहुत धन्यवाद। – JohnW

1

http://milov.nl/code/css/verticalcenter.html जांच स्रोत कोड

+0

अच्छा उदाहरण! आईई 6 में घटना काम करता है। –

+0

यह केवल तभी काम करता है, यदि आप कोड समय – HerrSerker

+0

पर केन्द्रित div के आयामों को जानते हैं, तो निश्चित रूप से एक निश्चित तत्व आकार (यंजन उल्लेख के रूप में) से निपटने पर यह समाधान उपयोग किया जा सकता है - लेकिन मेरा मूल प्रश्न एक केंद्रित समाधान की तलाश में था गतिशील आकार के तत्व। तो अगर मेरा तत्व संदेश बॉक्स के रूप में उपयोग किया गया था, तो मैं बॉक्स को संदेश टेक्स्ट के साथ आकार देना चाहता हूं। यह समाधान उस अनुमति नहीं देगा ... लेकिन वैसे भी धन्यवाद। – JohnW

0
सही केंद्रित/बाईं के लिए

, आप तत्व के लिए एक चौड़ाई निर्दिष्ट और "ऑटो" करने के लिए छोड़ दिया और सही मार्जिन सेट कर सकते हैं।

ऊर्ध्वाधर केंद्र के लिए, यह थोड़ा सा ट्रिकियर है। आप प्रतिशत ऊंचाई का उपयोग कर सकते हैं, लेकिन शरीर की ऊंचाई 100% निर्धारित करने के लिए याद रखें या यह काम नहीं करेगा।

पता नहीं है कि यह आईई 7 में काम करता है, क्षमा करें।

+0

मुझे समझ में नहीं आता कि प्रतिशत ऊंचाई को कैसे सेट करना लंबवत रूप से तत्व को केंद्रित कर सकता है? जब तक कि आप केंद्रित होने के लिए तत्व के ऊपर "स्पेसर" तत्व रखने के बारे में बात नहीं कर रहे हों। अगर मुझे कुछ याद आ रहा है तो मुझे बताएं। – JohnW

+0

क्षमा करें, मेरा मतलब है "शीर्ष" के लिए प्रतिशत निर्दिष्ट करना। मुझे लगता है कि यद्यपि ऊर्ध्वाधर केंद्र प्राप्त करने के बेहतर तरीके हैं। उदाहरण के लिए – eeeeaaii

3

यदि यह एक निश्चित आकार तत्व है, तो आप कुछ इस तरह कर सकते हैं:

#centered { 
    position:absolute; 
    width:200px; 
    height:400px; 
    top:50%; 
    left:50%; 
    margin-left:-100px; // negative-half of element's width 
    margin-top:-200px; // negative-half of element's height 
}​ 

चाल यहाँ top:50%; left:50%; है। एक margin-left और एक margin-top के बराबर के साथ संयोजित नकारात्मक साढ़े अपने width और height, और अपने तत्व के अपने पृष्ठ में केंद्रित किया जाएगा।

यदि आप एरिक मेयर के सीएसएस रीसेट या normalize.css जैसे रीसेट स्टाइलशीट का उपयोग नहीं करते हैं, तो यह महत्वपूर्ण है कि आप इस चाल के लिए अपना bodymargin:0; पर सेट करें।

यहाँ एक jsfiddle है: http://jsfiddle.net/remibreton/fZywe/1/

एक साइट मैंने किया था की लाइव उदाहरण: http://althotels.ca/

+0

धन्यवाद। मैं सराहना करता हूं कि यह समस्या को हल करने का शायद सबसे आम तरीका है, लेकिन जब आपके केंद्रित तत्व में गतिशील आकार होता है तो यह गिर जाता है। पॉपअप संदेश बॉक्स के मेरे उदाहरण में, मैं वास्तव में चाहता हूं कि मेरा बॉक्स अपनी सामग्री का आकार बदल रहा हो। तो जहां तक ​​मैं देख सकता हूं, मुझे अभी भी टेबल-आधारित समाधान का उपयोग करने की आवश्यकता होगी। या क्या मैं कुछ न कुछ भूल रहा हूं? अच्छा साफ उदाहरण के लिए – JohnW

1

आप केंद्रित सामग्री का आकार नहीं जानते हैं, तो आप http://jsfiddle.net/G6fUE/

<div class="popup-center"> 
    <div class="content"> 
     sadalshd<br /> 
     sadalshd<br /> 
     <img src="http://www.lorempixel.com/200/200" /> 
     sadalshd<br> 
    </div> 
</div>​ 

.popup-center { 
    position: absolute; 
    top: 50%; 
    left: 50%; 
} 
.popup-center div { 
    margin-left: -50%; 
    margin-top: -50%; 
} 
: एक दो चरणों केंद्रित उदाहरण यहाँ की जरूरत है

+0

+1 है लगभग काम करने के लिए। मैं इस समाधान की और जांच करूँगा, लेकिन अधिकांश ब्राउज़रों पर सरल उदाहरण काम करना प्रतीत होता है - और मुझे स्पष्ट ऊंचाई या चौड़ाई निर्दिष्ट करने की आवश्यकता नहीं थी। हालांकि आईई 7 में मेरा केंद्रित तत्व दिखाई नहीं दे रहा था। – JohnW

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

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