मैं एक इनपुट तत्व के सापेक्ष एक स्पैन तत्व (इसे टूलटिप अवधि "कहता हूं) को स्थान देने की कोशिश कर रहा हूं। ऐसा करने के लिए, मैं टूलटिप अवधि और इनपुट क्षेत्र को दूसरे स्पैन तत्व में लपेट रहा हूं (चलिए इसे "रैपर अवधि" कहते हैं) जिसमें position: relative
है। फिर मैंने टूलटिप अवधि पर position: absolute
सेट किया। यह टूलटिप स्पैन स्थिति को स्वयं रैपर अवधि से संबंधित बनाता है लेकिन पृष्ठ प्रवाह का हिस्सा नहीं है - कोई भी स्थान नहीं ले रहा है। यह वही है जो मैं चाहता हूं।फ़ायरफ़ॉक्स और क्रोम ऑफसेट के लिए अलग-अलग मान देते हैं
फिर, जावास्क्रिप्ट का उपयोग करके, मैंने इनपुट तत्व की स्थिति के सापेक्ष टूलटिप की स्थिति निर्धारित की। चूंकि विभिन्न तत्वों पर इनपुट तत्व को अलग-अलग आकार दिया जा सकता है (स्क्रिप्ट को ग्लोबब्लैली लागू होना चाहिए), मैं रैपर अवधि से संबंधित अपनी स्थिति की गणना करने के लिए offsetTop
और offsetLeft
गुणों का उपयोग कर रहा हूं।
हालांकि, मैं यहां ब्राउज़र के बीच असंगतता को देख रहा हूं। फ़ायरफ़ॉक्स में, आईई 6, 7, 8, यह अपेक्षित के रूप में काम करता है। लेकिन क्रोम और सफारी में offsetTop
रिपोर्ट की गई, ठीक है, गलत है।
यह साबित करने के लिए, मैं नीचे परीक्षण पृष्ठ बनाया:
<html>
<head>
<style type="text/css">
span { font-size: 8px; position: relative; top: 0; left: 0; border: 1px solid red }
</style>
</head>
<body>
<span id="wrapper">
<input id="foo" name="foo" type="text">
</span>
<script type="text/javascript">
document.write("<br>Offset parent: " + document.getElementById("foo").offsetParent.id);
document.write("<br>Offset top: " + document.getElementById("foo").offsetTop);
</script>
</body>
</html>
और फ़ायरफ़ॉक्स और क्रोम में यह भरी हुई। दोनों ब्राउजर रैपर अवधि को offsetParent
के रूप में रिपोर्ट करते हैं, लेकिन फ़ायरफ़ॉक्स के लिए offsetTop
is -8 है और क्रोम के लिए यह 2 है। दृश्यमान रूप से पृष्ठ दोनों ब्राउज़रों में समान होता है।
यह मुझे सिरदर्द देता है, क्योंकि मैं किसी अलग ऑफ़सेट में हैक नहीं कर सकता हूं, जब मैं क्रोम का उपयोग कर रहा हूं, तो मैं हमेशा लागू होता हूं, क्योंकि अगर मैं फ़ॉन्ट आकार बदलता हूं, तो offsetTop
नहीं बदलेगा, और मेरी स्क्रिप्ट टूट जाएगी।
क्या यह एक बग है? क्या मैं इसे अलग-अलग हल कर सकता हूं?
दस्तावेज़ तैयार होने तक प्रतीक्षा करने का प्रयास करें – Greg
मैंने इसे "असली" कोड में किया: इससे कोई फर्क नहीं पड़ता। मैंने फ़ायरबग में ऑफसेट टॉप का निरीक्षण किया है और क्रोम डेवलपर विंडो में और मान समान हैं। – waxwing
मैंने लेबल टैग को इस तरह (सत्यापन त्रुटि संदेश: http://d.pr/i/yvGS) को इनलाइन-ब्लॉक (पोस्टियन के साथ: पूर्ण;) बनाकर ले जाया है, फिर मार्जिन का उपयोग करके उसे प्लेसमेंट के सापेक्ष स्थिति में रखकर एचटीएमएल में, शीर्ष/दाएं/नीचे/बाएं गुणों के बजाय। कसरत हो सकता है, अगर ऐसा होता है तो आप अतिरिक्त जावास्क्रिप्ट से बच सकते हैं। – KruegerDesigns