2012-06-26 10 views
8

मैंने एक पृष्ठ लिया जिसका डीटीडी एचटीएमएल 4 संक्रमण था और ड्यूट टाइप को <!DOCTYPE html> में बदल दिया और इसके नीचे एच 1 और div के बीच अतिरिक्त स्थान दिखाई दिया। मैंने मार्कअप या सीएसएस में कोई अन्य बदलाव नहीं किया।एचटीएमएल 5 बनाम एचटीएमएल 4 - एच 1 टैग अतिरिक्त जगह के साथ प्रस्तुत किया गया - कैसे निकालें?

JSFiddle उदाहरण: http://jsfiddle.net/ngordon/vSqkg/3/

यदि आप एचटीएमएल 5 से एचटीएमएल 4 संक्रमण में डक्टटाइप बदलते हैं, तो आप अतिरिक्त स्थान दिखाई दे सकते हैं और गायब हो सकते हैं भले ही मार्कअप और सीएसएस बिल्कुल वही है।

कोई विचार है कि उस स्थान से कैसे छुटकारा पाएं?

उत्तर

11

एचटीएमएल 4.01 संक्रमणकालीन doctype ब्राउज़रों में लगभग मानक मोड का कारण बनता है:

यहाँ वैकल्पिक हल का एक उदाहरण है। एचटीएमएल 5 डॉक्टरेट मानक मोड का कारण बनता है।

यह माइक्रोसॉफ्ट आलेख अंतर बताता है: http://msdn.microsoft.com/en-us/library/ff405794%28v=vs.85%29

इसमें कहा गया है कि लगभग मानक मोड के लिए:

इनलाइन तत्वों ऊंचाई लाइन यदि और केवल यदि निम्न से कोई एक सही योगदान करते हैं।

तत्व हैं:

  • पाठ वर्ण शामिल हैं

  • एक अशून्य सीमा चौड़ाई

  • एक अशून्य मार्जिन

  • एक अशून्य गद्दी

  • गया है है

    एक पृष्ठभूमि छवि

  • एक मूल्य की तुलना में आधारभूत

नोट अन्य कि एक लाइन ब्रेक इस परिभाषा के लिए एक पाठ चरित्र जब तक यह की केवल सामग्री है नहीं माना जाता है करने के लिए सेट ऊर्ध्वाधर- align गया है एक लाइन बॉक्स उस स्थिति में, निर्दिष्ट बॉक्स लाइन ऊंचाई के बावजूद लाइन बॉक्स की ऊंचाई ऊपर की ओर इनलाइन बॉक्स टॉप और लाइन पर निम्नतम इनलाइन बॉक्स नीचे बनी हुई है।

यदि कोई आईएमजी तत्व तालिका कक्ष की एकमात्र सामग्री है, तो लाइन बॉक्स सेल लाइन बॉक्स ऊंचाई की ऊंचाई शून्य पर समायोजित की जाती है।

अधिकांश अपने मामले में गंभीर रूप से, इसका मतलब है कि चित्र वाली लाइन की ऊंचाई की गणना strut, एक काल्पनिक इनलाइन तत्व यह है कि के line-height मूल्य के लिए लाइन ऊंचाई वृद्धि करनी चाहिए शामिल नहीं है h1 तत्व।

यह jsfiddle अकड़ के लिए में खड़े असली पाठ सामग्री के रूप में एक &nbsp; के साथ एक वास्तविक span तत्व से पता चलता है, और आप देख सकते हैं कि लेआउट दोनों एक एचटीएमएल 4.01 संक्रमणकालीन doctype और एक HTML5 doctype के साथ एक ही है।

यह jsfiddle केवल इस बार अकड़ सीएसएस का उपयोग कर निर्मित है, इस तरह एक ही विचार पता चलता है,:

h1:before { 
    content: '\A0'; 
} 

खुर्रम के जवाब के मामले में, वह क्या कर रहा है की line-height को कम करने है h1 और इसलिए, मानक मोड में, स्ट्रैट की ऊंचाई छवि की ऊंचाई से कम होने के लिए। इसका मतलब है कि पूरी तरह से रेखा की ऊंचाई छवि की ऊंचाई से निर्धारित होती है, न कि स्ट्रैट की ऊंचाई। छवि की ऊंचाई दोनों मानकों और लगभग मानकों मोड में समान है, फिर भी, आप मोड के बीच प्रतिपादन में कोई अंतर नहीं देखते हैं।

छवि की ऊंचाई (25px) से मेल खाने के लिए h1 की लाइन-ऊंचाई को सेट करने के लिए क्यों काम नहीं करता है, लेकिन इसे 12px पर सेट करता है, ऐसा इसलिए है क्योंकि स्ट्रैट न केवल शीर्ष और नीचे स्थापित करता है, लेकिन लाइन के लिए एक आधार रेखा भी। सामान्य आकार टेक्स्ट के लिए आमतौर पर लगभग 3px के लिए, पाठ अवरोधकों को अनुमति देने के लिए बेसलाइन नीचे से थोड़ा ऊपर है। डिफ़ॉल्ट रूप से छवि बेसलाइन पर बैठती है ताकि लाइन की ऊंचाई स्थापित करने के लिए बेसलाइन और नीचे के बीच का अंतर छवि की ऊंचाई में जोड़ा जा सके।

का उपयोग करके छवि को बेसलाइन से स्थानांतरित करके हल किया जा सकता है, जो इस jsfiddle में दिखाया गया है।यदि आप यहां एच 1 लाइन-ऊंचाई के साथ टिंकर करते हैं, तो आप देखेंगे कि 25px से अधिक मान लाइनों के बीच की दूरी को बढ़ाते हैं, लेकिन 25px या उससे कम के मान उस अंतर को नहीं बदलते हैं।

+2

महान उत्तर, अच्छी तरह से शोध किया गया, और समस्या की जड़ को संबोधित करता है। – ForOhFor

+0

मैंने छवि के सीएसएस को "डिस्प्ले: ब्लॉक;" पर सेट करके हल किया है ... हालांकि अन्य संदर्भों में यह व्यवहार्य नहीं हो सकता है। – KnF

3

क्या आपने किसी अन्य सीएसएस प्रभाव को लागू करने से पहले अपने सीएसएस में एक सीएसएस रीसेट http://meyerweb.com/eric/tools/css/reset/ लागू किया है?

+0

+1 आपके लिए दोस्त। –

+0

सीएसएस के साथ भी "समस्या" अभी भी होती है। – KnF

2

बस line-height:12px; या जो आप चाहते हैं उसे दें।
एक लुक लें:JSFIDDLE। आपके कोड का संशोधन

+0

धन्यवाद! यह काम करता है .. लेकिन यह वास्तव में सिर्फ ब्राउज़र को धोखा दे रहा है। वह तत्व निश्चित रूप से 12px से अधिक है। मुझे आश्चर्य है कि वह स्थान पहली जगह क्यों दिखाई देता है, और यदि निकालने का एक बेहतर तरीका है। – ForOhFor

3

आपकी बग डिफ़ॉल्ट रेखा ऊंचाई के साथ सौदा करती है।

एचटीएमएल 4 संक्रमण आपके एच 1 wrt लाइन ऊंचाई की सामग्री को अनदेखा कर रहा है, जो 25px लंबा तत्व प्रदान करता है। एचटीएमएल एच 1 टैग की लाइन-ऊंचाई का सम्मान कर रहा है, जो 2 9 पीएक्स के बराबर है।

+0

लेकिन 25px की लाइन-ऊंचाई स्पष्ट रूप से निर्दिष्ट नहीं करता है। (यह काम करता है जब आप इसे 12px में बदलते हैं, लेकिन यह एक हैक की तरह लगता है)। क्यूं कर? – ForOhFor

0

यही कारण है कि HTML5 बॉयलरप्लेट में एक सीएसएस रीसेट है।

आप div को margin: 0; padding: 0; पर भी सेट कर सकते हैं लेकिन आपको हर तत्व के लिए तब तक करना होगा जब तक आप उन्हें सभी हिट नहीं करते। इस धागे में मेयर द्वारा सीएसएस रीसेट के बारे में उत्तर सही है। http://jsfiddle.net/mikelegacy/vSqkg/5/

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