2012-06-13 5 views
10

मैं निम्नलिखित कोड एक नया पॉपअप विंडो खुलती है, जबकि पृष्ठभूमि को अक्षम, समस्या मैं इस स्थिति इतना है कि यह ऊपर से 100px है है है (पहले से ही मिल गया है कि सीएसएस #dialog के माध्यम से) और यह भी के केंद्र में स्क्रीन, कोई फर्क नहीं पड़ता कि उपयोगकर्ता का संकल्प क्या है?मैं जावास्क्रिप्ट सीएसएस पॉपअप div कैसे केंद्रित करूं, कोई फर्क नहीं पड़ता कि स्क्रीन रिज़ॉल्यूशन क्या है?

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<html> 
<head> 
    <script type="text/javascript"> 
     function showPopUp(el) { 
      var cvr = document.getElementById("cover") 
      var dlg = document.getElementById(el) 
      cvr.style.display = "block" 
      dlg.style.display = "block" 
      if (document.body.style.overflow = "hidden") { 
       cvr.style.width = "1024" 
       cvr.style.height = "100%" 
      } 
     } 
     function closePopUp(el) { 
      var cvr = document.getElementById("cover") 
      var dlg = document.getElementById(el) 
      cvr.style.display = "none" 
      dlg.style.display = "none" 
      document.body.style.overflowY = "scroll" 
     } 
    </script> 
    <style type="text/css"> 
     #cover { 
      display:  none; 
      position:  absolute; 
      left:   0px; 
      top:   0px; 
      width:   100%; 
      height:   100%; 
      background:  gray; 
      filter:   alpha(Opacity = 50); 
      opacity:  0.5; 
      -moz-opacity: 0.5; 
      -khtml-opacity: 0.5 
     } 

     #dialog { 
      display: none; 
      left:  100px; 
      top:  100px; 
      width:  300px; 
      height:  300px; 
      position: absolute; 
      z-index: 100; 
      background: white; 
      padding: 2px; 
      font:  10pt tahoma; 
      border:  1px solid gray 
     } 
    </style> 
</head> 
<body> 
<div id="cover"></div> 
<div id="dialog"> 
    My Dialog Content 
    <br><input type="text"> 
    <br><input type="button" value="Submit"> 
    <br><a href="#" onclick="closePopUp('dialog');">[Close]</a> 
</div> 
<a href="#" onclick="showPopUp('dialog');">Show</a> 

</body> 
</html> 
+2

कृपया अपना कोड ठीक से प्रारूपित करें ताकि यह पठनीय हो। मैंने इस बार आपके लिए यह किया था। साथ ही, मैंने देखा है कि आपके जावास्क्रिप्ट कोड में कोई अर्धविराम नहीं है (';'), यह बहुत बुरा अभ्यास है! प्रत्येक कथन अर्धविराम से समाप्त किया जाना चाहिए। –

उत्तर

34

सीएसएस आधारित केंद्र के लिए समाधान:

आप इसे दिखाई मृत-सेंटर बनाने के लिए इन शैलियों का उपयोग करने की आवश्यकता है:

position:absolute; 
top:50%; 
left:50%; 
width:400px; /* adjust as per your needs */ 
height:400px; /* adjust as per your needs */ 
margin-left:-200px; /* negative half of width above */ 
margin-top:-200px; /* negative half of height above */ 

तो position निर्दिष्ट किया जाना चाहिए। top और left50% होना चाहिए। margin-left और margin-top क्रमशः बॉक्स की चौड़ाई और ऊंचाई का नकारात्मक आधा होना चाहिए।

ध्यान दें कि यदि आप पृष्ठ पर स्क्रॉल होने पर भी अपने पॉपअप को केंद्र में दिखाना चाहते हैं तो आपको ड्रॉ बैक के साथ position:fixed का उपयोग करना होगा क्योंकि यह आईई 6 में काम नहीं करता है।

+0

अच्छा समाधान! पहले एक नहीं देखा था। – marlar

+0

बहुत अच्छे कोड ने मुझे मुझसे बहुत समय +1 बचाया! :-) – www139

2

एक त्वरित गूगल खोज पाया this;

function PopupCenter(pageURL, title,w,h) { 
    var left = (screen.width/2)-(w/2); 
    var top = (screen.height/2)-(h/2); 
    var targetWin = window.open (pageURL, title, 'toolbar=no, location=no, directories=no, status=no, menubar=no, scrollbars=no, resizable=no, copyhistory=no, width='+w+', height='+h+', top='+top+', left='+left); 

} 
1

सरल, margin: 100px auto;। जावास्क्रिप्ट में गणना करने की कोई आवश्यकता नहीं है।

Live Example

+1

वह केंद्र प्रकार लाइटबॉक्स में दिखाई देने के लिए पॉपअप बॉक्स के बारे में बात कर रहा है, एक कंटेनर या कुछ रैपर तत्व नहीं – Sarfraz

+1

@ सर्फ्राज़: यह मेरे उत्तर के मूल्य को कैसे कम करता है? 'मार्जिन' केवल एक कंटेनर के लिए रखी गई संपत्ति है? 'मार्जिन: ऑटो 'एक ** तकनीक ** है जो अपने माता-पिता में एक तत्व केंद्रित करने के लिए है। –

4

आप क्या जरूरत है एक प्रकाश बॉक्स कहा जाता है।

इसे बनाने के लिए आपको HTML, CSS और JS कोड को संशोधित करना चाहिए।

मान लें कि आपके लाइटबॉक्स में केवल "लॉगिन फ़ॉर्म" स्ट्रिंग शामिल है। (आप सब कुछ तुम वहाँ चाहते डाल सकते हैं) एचटीएमएल कोड इस तरह दिखना चाहिए:

<div id = "loginBox">login form</div> 

अब, हम सीएसएस के साथ इसे छिपाने के लिए की जरूरत है:

div#loginBox { 
    display: none; 
} 

अब हमारी बॉक्स दिखाई न दे।

div#loginBox { 
    display: none; 
    top: 100px; 
} 

हम बाद में पृष्ठभूमि अक्षम करने के बारे में चिंता होगी: हमारे बॉक्स को संशोधित रूप में आप यह ऊपर से 100px होना चाहते हैं देता है।

हमारा अगला काम एक बटन है कि बॉक्स प्रदर्शित करेगा जब हम इसकी जरूरत बनाने के लिए है। आसान peasy:

<div id = "loginBox" >login form</div> 
<a id = "displayButton">login</a> 

ध्यान दें कि हम "href" विशेषता की जरूरत नहीं है, क्योंकि वह क्लिक करके और अन्य अवांछित व्यवहार पर स्क्रीन पर आ जाएगा।

के जे एस के माध्यम से बटन पर ईवेंट हैंडलर देते हैं:

var IE = document.all ? true : false; // obligatory "browser sniffing" 

function display_box() { 
    document.getElementsById("loginBox").style.display = "inline-block"; // or "inline" 
} 

window.onload = function() { 
    var login_box = document.getElementsById("loginBox"); 
    if (!IE) { 
     login_box.addEventListener("click", display_box , false); 
    } 
    else { 
     login_box.attachEvent("onclick", display_box); 
    } 
} 

लेकिन आप इसे स्क्रीन के केंद्र में बनना चाहते हो?तब समारोह इस प्रकार है:

function display_box() { 
    var theBox = document.getElementsById("loginBox").style, 
     left = document.width/2 - 50; // 150 because it is 300/2 

    theBox.display = "inline-block"; 
    theBox.left = left.toString() + "px"; 
} 

मुझे लगता है कि आप कुछ बिंदु पर विंडो बंद करें और "निष्क्रिय पृष्ठभूमि" प्रभाव बनाने के लिए चाहते हैं। ऐसा करने के लिए आप पूरी स्क्रीन पर एक div class बना सकते हैं, उस पर "डिस्प्ले" ईवेंट संलग्न करें, सीएसएस में कुछ जेड-इंडेक्स डालें ताकि यह सुनिश्चित किया जा सके कि लॉगिनबॉक्स "अक्षम पृष्ठभूमि" से अधिक है, और " लॉगिन "बॉक्स" घटना को "पृष्ठभूमि" div पर बंद करें। और अब अंतिम कोड इस तरह दिखता है:

ध्यान दें कि हम प्रवेश बटन के स्थान के बारे में परवाह ही है, क्योंकि अन्य दृश्य से छिपे हुए हैं, और उसके बाद संशोधित जे एस द्वारा:

HTML:

<div id = "loginBox" >login</div> 
<a id = "displayButton">login</a> 
<div id = "backgroundDarkener"> </div> 

सीएसएस:

div#loginBox { 
    display: none; 
    top: 100px; 
    width: 300px; #it is important to know the width of the box, to center it correctly 
    z-index: 2; 
} 
div#backgroundDarkener { 
    background: #000; 
    display: none; 
    position: fixed; 
    top: 0px; 
    left: 0px; 
    width: 100%; 
    height: 100%; 
    z-index: 1; 
    opacity: 0.8; 
    # needless to say, you should play with opacity or if you want your 
    # css to validate - background image (because I suspect it won't 
    # validate for old versions of IE, Safari, etc.) This is just a suggestion 
} 

जे एस:

var IE = document.all ? true : false; // obligatory "browser sniffing" 

function display_box() { 
    var theBox = document.getElementsById("loginBox").style, 
     background = document.getElementsById("loginBox").style, 
     left = document.width/2 - 150; // 150 is 300/2 

    theBox.display = "inline-block"; 
    theBox.left = left.toString() + "px"; 
    background.display = "inline-block"; 
} 
function hide_box() { 
    document.getElementsById("loginBox").style.display = "none"; 
    document.getElementsById("backgroundDarkener").style.display = "none"; 
} 

window.onload = function() { 
    var login_box = document.getElementsById("loginBox"), 
     background = document.getElementsById("backgroundDarkener"); 

    if (!IE) { 
     login_box.addEventListener("click", display_box , false); 
     background.addEventListener("click", hide_box , false); 
    } 
    else { 
     login_box.attachEvent("onclick", display_box); 
     background.attachEvent("onclick", hide_box); 
    } 
} 
+0

धन्यवाद, मैं विस्तार से इसका अध्ययन करूंगा :) – user1227914

+0

आपका बहुत स्वागत है। स्पष्टीकरण मांगने में संकोच न करें, मुझे मदद करने में खुशी होगी। – tsikov

0

आप div केंद्र बनाने के लिए इन शैलियों का उपयोग करने की आवश्यकता है:

width:500px; 
left:0; 
right:0; 
margin:0 auto; 
2

यह जहां flexbox अब बचाव आता है!

.parent { 
    display: flex; 
    height: 300px; /* Or whatever */ 
} 

.child { 
    width: 100px; /* Or whatever */ 
    height: 100px; /* Or whatever */ 
    margin: auto; /* Magic! */ 
} 
1

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

.body { 
    position: relative; 
} 
.popup { 
    position: absolute; 
    max-width: 800px; 
    top: 50%; 
    left: 50%; 
    transform: translate(-50%, -50%); 
} 

कोई स्क्रीन या पॉपअप आकार मायने रखती है। यह <div class="popup"></div> पर केंद्रित होगा।

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

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