2013-02-14 94 views
8

इसलिए मैंने इस प्रश्न से पूछा: google chrome issue with fixed position and margin-top जो मुझे अंततः यह महसूस करने के लिए मिला कि top और margin-top समान नहीं हैं। मुझे नहीं पता कि मैंने इन सभी वर्षों को कैसे याद किया है।डीओएम प्रवाह में नहीं तत्वों पर मार्जिन नियम कैसे लागू होते हैं?

वैसे भी जो मुझे सोच रहा है कि margin-top और top के बीच वास्तव में क्या अंतर है, इस तरह मुझे यह प्रश्न मिला: CSS: Top vs Margin-top

मुझे पहले से ही पता था कि margin-top क्या किया था। लेकिन मैंने कभी यह सोचने के लिए बाहर नहीं निकाला था कि "हम्म, यह तत्व डोम प्रवाह में नहीं है, इसलिए margin-top वास्तव में क्या है?"

प्रश्न से मैंने पूछा कि मुझे पता है कि margin-topfixed स्थिति वाले तत्व पर लागू होने पर बहुत अप्रत्याशित तरीकों से व्यवहार करता है। और कम से कम क्रोम में यह कुछ पागल नियमों (जैसे margin-top: -273%;) का कारण बन सकता है।

तो मेरा प्रश्न है:। कैसे ब्राउज़रों डोम प्रवाह में नहीं तत्वों (यानी तत्वों को margin नियम लागू होते हैं करते हैं जिस तरह से वे लागू होते हैं और नियमों के सुराग प्रदान के बारे में fixed या absolute के position मूल्य और क्या साथ, ऊपर वर्णित है, वास्तव में अंदर का दृश्य बंदरगाह तत्व प्रतिपादन एक की तरह?

उत्तर

3

top संपत्ति बस निर्धारित करता है कितनी दूर युक्त तत्व के ऊपर से उस बॉक्स मॉडल गाया जा रहा है। के मामले में शुरू कर देना चाहिए position: fixed, वह खिड़की ही है।के मामले में, यह गैर-स्थैतिक स्थिति वाला अगला मूल तत्व है।

दूसरी तरफ मार्जिन बॉक्स-मॉडल का हिस्सा है। बॉक्स के शीर्ष पर मार्जिन जोड़ने से बॉक्स के ऊपर मौजूद खाली स्थान बढ़ जाता है।


एक position: fixed बॉक्स के लिए निम्नलिखित परतों पर विचार करें:

   top:10px 
      margin-top:10px 
------------border-top:1px------------ 
      padding-top:10px 
    content 

सभी मार्जिन, सीमा, और गद्दी के बॉक्स मॉडल का हिस्सा हैं। उस पूरे तत्व, या "टुकड़ा", स्थिति के दौरान सिर्फ एक बड़ा वर्ग है। इसलिए, यदि आपके पास बॉक्स के शीर्ष पर 10px का मार्जिन है, और शीर्ष से तत्व 10px को स्थिति में रखें, तो इसमें विंडो के शीर्ष के बीच 20px मार्जिन होने और दृश्यमान बॉक्स शुरू होने की उपस्थिति होगी।

मैंने very simple example in jsFiddle भी बनाया है।

Visual Example

आप पहले अनुभाग में देख सकते हैं, केवल तत्व पर position: fixed की स्थापना:


आप ग्राफिक्स पसंद है, इस उदाहरण है, जहां लाल बॉक्स है एक position: fixed ले वास्तव में इसे कहीं भी स्थानांतरित नहीं करता है। यह सिर्फ दस्तावेज़ के प्रवाह से हटा देता है।

अनुभाग अनुभाग में, margin-top: 10px जोड़कर तत्व 10px नीचे ले जाता है क्योंकि बॉक्स के शीर्ष पर 10px मार्जिन है।हालांकि, यह वास्तव में कहीं भी स्थानांतरित नहीं हुआ है। बॉक्स अभी लंबा हो गया है क्योंकि बॉक्स मॉडल बदल गया है।

तीसरे खंड में, top: 10pxका उपयोग करके वास्तव में बॉक्स कंटेनर के शीर्ष से 10px होने के लिए बॉक्स को स्थानांतरित करता है। इसके पहले खंड में सटीक वही बॉक्स मॉडल है।

धारा चार इसके ऊपर दूसरे खंड की तरह है, नकारात्मक मार्जिन को छोड़कर यह दस पिक्सल तक बढ़ने का कारण बनता है। बॉक्स मॉडल अभी भी लंबा है और बॉक्स अभी भी स्थानांतरित नहीं हुआ है।


आप एक तत्व पर एक पूर्ण स्थिति सेट करते हैं, तत्व बिल्कुल आप किसी भी अन्य स्थिति गुण निर्धारित नहीं करते हैं, तो नहीं जाते हैं। तो, बिना top, right, bottom, या left संपत्ति सेट के बिना, तत्व उस स्थिति में रहता है जब यह प्रवाह के हिस्से के रूप में प्रस्तुत किया गया होता, तो यह अभी प्रवाह से हटा दिया गया है। तो एक मार्जिन जोड़ना, या तो सकारात्मक या नकारात्मक, यह उस स्थिति से ऊपर या नीचे बढ़ने लगता है। हकीकत में, आप तत्व के बॉक्स मॉडल को बदल रहे हैं।

आपको यह भी महसूस करना होगा कि ऊपर और नीचे मार्जिन (और यहां तक ​​कि पैडिंग) पर प्रतिशत का उपयोग करके की ऊंचाई से कोई लेना देना नहीं है। यह वास्तव में कितना मार्जिन है यह जानने के लिए चौड़ाई का उपयोग करता है। margin-top: 10% कह रहा है कि उपलब्ध चौड़ाई का 10% मूल्य, उपलब्ध ऊंचाई नहीं, और इसे नकारात्मक बनाने से केवल उस मान को अस्वीकार कर दिया जाएगा। मैंने इसका उल्लेख किया क्योंकि यह उस पहले प्रश्न से प्रासंगिक है जहां आपने लिंक किया था जहां आप margin-top के प्रतिशत का उपयोग कर रहे थे।

मुझे आशा है कि यह उस कवर को कवर करेगा जिसे आप ढूंढ रहे थे। मैं यह नहीं बता सका कि बिल्कुल आप उलझन में थे इसलिए मैंने जितना संभव किया उतना समझाया।

+0

हां, मुझे अपने प्रश्न के लिए बॉक्स मॉडल के बारे में पता है। मैं जो पूछ रहा हूं वह है कि डीओएम के प्रवाह के अंदर नहीं होने वाली किसी चीज़ पर 'मार्जिन' कैसे लागू किया जा रहा है, क्योंकि पहले प्रयोग के साथ मेरे प्रयोग से यह खिड़की के संबंध में नियम लागू नहीं कर रहा है, जो मुझे उम्मीद थी व्यवहार होना – Ryan

+0

क्या वह विज़ुअल उदाहरण आपको किसी की मदद करता है? – animuson