2015-12-17 6 views
20

मैं सीएसएस में em के लिए नया हो सकता है क्यों बर्ताव कर रही है नहीं है, लेकिन निम्न उदाहरण अजीब लगता है ...उन्हें के रूप में परिभाषित

डॉक्स का कहना है कि 1em font-size के बराबर है। मेरे उदाहरण में सबकुछ डिफ़ॉल्ट है। तो 8em टेक्स्ट की 8 लाइनों का आकार होना चाहिए, सही?

div { 
 
    background-color: red; 
 
    height: 8em; 
 
}
<div> 
 
    One<br/> 
 
    Two<br/> 
 
    Three<br/> 
 
    Four<br/> 
 
    Five<br/> 
 
    Six<br/> 
 
    Seven<br/> 
 
    Eight 
 
</div>

https://jsfiddle.net/q8vs7r4u/1/

8 लाइनें हैं, लेकिन 8 em उनमें से केवल 7 को शामिल किया गया। ऐसा लगता है कि 1em केवल एक पंक्ति के 7/8 को कवर कर रहा है, या कुछ ...

क्यों? मैं क्या गलत कर रहा हूं?

+2

डिफ़ॉल्ट रूप से आपकी लाइन ऊंचाई 1 से अधिक है, लाइन-ऊंचाई सेट करने का प्रयास करें: 1em –

+2

एकमात्र चीज जो मैं नीचे दिए गए उत्तरों में जोड़ूंगा वह 'लाइन-ऊंचाई' के लिए इकाई रहित मान का उपयोग करना है। दूसरे शब्दों में, 'लाइन-ऊंचाई: 1em' के बजाय, बस' पंक्ति-ऊंचाई: 1' का उपयोग करें। तर्क के लिए, देखें [** यहाँ **] (https://developer.mozilla.org/en-US/docs/Web/CSS/line-height#Prefer_unitless_numbers_for_line-height_values)। –

उत्तर

33

डिफ़ॉल्ट line-height1 नहीं है इसलिए प्रत्येक पंक्ति इसके अंदर के पाठ के फ़ॉन्ट आकार से लम्बा है।

18

यह काम नहीं कर रहा है क्योंकि line-height। मोज़िला डेवलपर नेटवर्क पर आप line-height के डिफ़ॉल्ट मान के बारे में निम्नलिखित जानकारी पा सकते हैं:

उपयोगकर्ता एजेंट पर निर्भर करता है। डेस्कटॉप ब्राउज़र (फ़ायरफ़ॉक्स समेत) तत्व के फ़ॉन्ट-परिवार के आधार पर लगभग 1.2 का डिफ़ॉल्ट मान उपयोग करते हैं।
https://developer.mozilla.org/en/docs/Web/CSS/line-height

निम्नलिखित कोड पर, line-height1em पर रीसेट किया जाएगा और पूरे पाठ div फिट बैठता है:

div { 
 
    background-color:red; 
 
    height:8em; 
 
    line-height:1em; 
 
}
<div> 
 
    One<br/>Two<br/>Three<br/>Four<br/>Five<br/>Six<br/>Seven<br/>Eight 
 
</div>

आधिकारिक W3C विनिर्देश से:

उपयोगकर्ता एजेंटों को उपयोग किए गए मान को तत्व के फ़ॉन्ट के आधार पर "उचित" मान पर सेट करने के लिए कहता है। मूल्य के समान अर्थ है। हम 1.0 से 1.2 के बीच 'सामान्य' के लिए उपयोग किए गए मान की अनुशंसा करते हैं। गणना मूल्य 'सामान्य' है।
https://www.w3.org/TR/CSS2/visudet.html#propdef-line-height

लेकिन हर उपयोगकर्ता एजेंट (ब्राउज़र) line-height ही की ऊंचाई को परिभाषित करता है 1.0 और 1.2 के बीच की सिफारिश की मूल्य पर!

+0

जबकि @ क्वांटिन का जवाब सीधे बिंदु पर था, मैंने दस्तावेज़ संदर्भ की सराहना की कि यह इस तरह से क्यों व्यवहार करता है, और इसका समाधान कैसे करें। इसने मेरे दोनों सवालों का जवाब दिया। धन्यवाद! – Partik

+0

@Partik बस रिकॉर्ड के लिए, एमडीएन आधिकारिक विनिर्देश नहीं है। यह भीड़-सोर्स प्रलेखन नेटवर्क है, लेकिन प्रत्येक पृष्ठ * को ** ** ** नीचे आधिकारिक विनिर्देश के लिए लिंक करना चाहिए। – TylerH

+0

@TylerH - मूल्य –

6

अपेक्षित परिणाम देखने के लिए 1em के line-height निर्दिष्ट करें:

div { 
    background-color: red; 
    height: 8em; 
    line-height: 1em; 
} 
10

एक line box की ऊंचाई font-size द्वारा निर्धारित नहीं है। या कम से कम, सीधे नहीं।

आप स्पेस में detailed rules देख सकते हैं।एक लाइन बॉक्स केवल शामिल जब एक ही line-height और vertical-align के साथ गैर प्रतिस्थापित इनलाइन बक्से, उन नियमों का कहना है कि लाइन बॉक्स की ऊंचाई इनलाइन बक्से के line-height द्वारा दी जाएगी।

यह आपके मामले के लिए लागू होता है, क्योंकि पाठ सीधे निहित अंदर एक ब्लॉक कंटेनर तत्व एक anonymous inline box में लपेटा जाता है।

आप किसी भी स्पष्ट मूल्य के लिए line-height निर्धारित नहीं करते हैं, लाइन बॉक्स की ऊंचाई line-height का प्रारंभिक मूल्य, normal है, जो इस तरह बर्ताव करता है के द्वारा दिया जाएगा:

उपयोगकर्ता एजेंट स्थापित करने के लिए कहता है तत्व के फ़ॉन्ट पर "उचित" मान पर उपयोग किया गया मान। मान का अर्थ <number> जैसा ही है। हम 1.0 से 1.2 के बीच 'सामान्य' के लिए उपयोग किए गए मान की अनुशंसा करते हैं। computed value 'सामान्य' है।

उदाहरण के लिए, ब्राउज़र चुनता है 1.15, 1em लाइन की ऊंचाई का 1/1.15 = 0.8696 कवर किया जाएगा। यह आपके द्वारा मनाए गए 7/8 = 0.8750 के बहुत करीब है।

नोट गुमनाम इनलाइन बक्से line-height ब्लॉक माता-पिता की तरह बॉक्स के दाय गुण प्राप्त करती हैं। फिर, आप ब्लॉक की line-height को स्पष्ट लंबाई तक सेट कर सकते हैं, और उस लंबाई की ऊंचाई लाइनों की संख्या से गुणा हो सकती है।

div { 
 
    line-height: 1.2em; 
 
    height: calc(1.2em * 8); 
 
    background: red; 
 
}
<div>One<br/>Two<br/>Three<br/>Four<br/>Five<br/>Six<br/>Seven<br/>Eight</div>

3

1em font-size

क्षैतिज के बराबर है। लंबवत नहीं है। एम 'एम' की चौड़ाई है। वर्टिकल स्पेसिंग के लिए इसका उपयोग करने के लिए यह टाइपोग्राफ़िक रूप से मान्य नहीं है।

+1

सी [रिश्तेदार इकाइयों] (http://www.w3.org/TR/CSS21/syndata.html#x34) की आधिकारिक विवरण गयी। 'em' को प्रासंगिक फ़ॉन्ट के" ['font-size'] (http://www.w3.org/TR/CSS21/fonts.html#propdef-font-size) के रूप में परिभाषित किया गया है"। आपको लगता है कि यूनिट हर जगह एक [] (http://www.w3.org/TR/CSS21/syndata.html#value-def-length) की उम्मीद है उपयोग कर सकते हैं। लंबवत, विकर्ण या जो कुछ भी शामिल है। – Oriol

+1

@ ओरियल मैं टाइपोग्राफी कैसे करें, और एम 3 की एक परिभाषा जो w3c.org की तुलना में कई सौ साल पुरानी है। कोई टाइपोग्राफर नहीं है क्योंकि गुटेनबर्ग वर्टिकल स्पेसिंग के लिए एम का उपयोग करेगा। वह फ़ॉन्ट ऊंचाई का उपयोग करेगा। – EJP

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