मैं कुछ उत्कृष्ट ऐतिहासिक संदर्भ प्रदान करने के लिए josh3736 के उत्तर की प्रशंसा करना चाहूंगा । हालांकि यह अच्छी तरह से स्पष्ट है, सीएसएस परिदृश्य लगभग पांच वर्षों में बदल गया है क्योंकि यह सवाल पूछा गया था। जब यह प्रश्न पूछा गया था, px था सही जवाब है, लेकिन यह नहीं रह गया है आज सच है।
tl; डॉ: उपयोगrem
इकाई अवलोकन
ऐतिहासिक रूप से pxइकाइयाँ आमतौर पर एक डिवाइस पिक्सेल का प्रतिनिधित्व करती हैं। उच्च और उच्च पिक्सेल घनत्व वाले उपकरणों के साथ यह अब कई उपकरणों के लिए नहीं है, जैसे कि Apple के रेटिना डिस्प्ले के साथ।
remइकाइयां r oot em आकार का प्रतिनिधित्व करती हैं । यह font-sizeजो भी मैच है :root। HTML के मामले में, यह <html>तत्व है; एसवीजी के लिए, यह <svg>तत्व है। font-sizeहर ब्राउज़र में डिफ़ॉल्ट * है 16px।
लेखन के समय, remलगभग 98% उपयोगकर्ताओं द्वारा समर्थित है । आप के बारे में है कि अन्य 2% चिंतित हैं, मैं आपको याद दिलाना होगा कि मीडिया क्वेरी कर रहे हैं भी उपयोगकर्ताओं के लगभग 98% द्वारा समर्थित ।
उपयोग करने पर px
सीएसएस के अधिकांश उदाहरण इंटरनेट उपयोग pxमूल्यों पर हैं क्योंकि वे वास्तविक मानक थे। pt, inऔर कई अन्य इकाइयों को सिद्धांत में इस्तेमाल किया जा सकता था, लेकिन वे छोटे मूल्यों को अच्छी तरह से संभाल नहीं पाए, क्योंकि आपको जल्दी से अंशों का सहारा लेना होगा, जो टाइप करने के लिए लंबे समय तक थे, और इसके बारे में तर्क करना मुश्किल था।
यदि आप एक पतली सीमा चाहते थे, pxतो आप उपयोग कर सकते हैं 1px, जिसके साथ ptआपको 0.75ptसुसंगत परिणामों के लिए उपयोग करने की आवश्यकता होगी , और यह सिर्फ बहुत सुविधाजनक नहीं है।
उपयोग करने पर rem
remडिफ़ॉल्ट मान 16pxइसके उपयोग के लिए बहुत मजबूत तर्क नहीं है। लिखना लिखने 0.0625remसे भी बुरा है 0.75pt, तो कोई क्यों इस्तेमाल करेगा rem?
remअन्य इकाइयों पर लाभ के दो भाग हैं ।
- उपयोगकर्ता की प्राथमिकताएँ सम्मानित की जाती हैं
- आप जो चाहें, उसका स्पष्ट
pxमान बदल सकते हैंrem
उपयोगकर्ता वरीयताएँ का सम्मान करना
ब्राउज़र ज़ूम पिछले वर्षों में बहुत बदल गया है। ऐतिहासिक रूप से बहुत सारे ब्राउज़र केवल बड़े पैमाने पर होंगे font-size, लेकिन यह तब तेजी से बदल गया जब वेबसाइटों ने महसूस किया कि उनके सुंदर पिक्सेल-परिपूर्ण डिज़ाइन किसी भी समय किसी व्यक्ति को ज़ूम इन या आउट करने पर टूट रहे थे। इस बिंदु पर, ब्राउज़र पूरे पृष्ठ को स्केल करते हैं, इसलिए फ़ॉन्ट-आधारित ज़ूमिंग तस्वीर से बाहर है।
उपयोगकर्ता की इच्छाओं का सम्मान करना तस्वीर से बाहर नहीं है। सिर्फ इसलिए कि एक ब्राउज़र के लिए सेट है 16pxडिफ़ॉल्ट रूप से, इसका मतलब यह नहीं किसी भी उपयोगकर्ता के अपनी वरीयताओं में परिवर्तन नहीं कर सकते हैं 24pxया 32pxकम दृष्टि या गरीब दृश्यता (पूर्व स्क्रीन चमक) के लिए सही करने के लिए। यदि आप अपनी इकाइयों को बंद कर देते हैं rem, तो उच्च फ़ॉन्ट आकार वाले किसी भी उपयोगकर्ता को आनुपातिक रूप से बड़ी साइट दिखाई देगी। सीमाएं बड़ी होंगी, पैडिंग बड़ी होगी, मार्जिन बड़ा होगा, सब कुछ तरल रूप से बढ़ेगा।
यदि आप अपने मीडिया प्रश्नों को आधार remबनाते हैं, तो आप यह भी सुनिश्चित कर सकते हैं कि आपके उपयोगकर्ता जो साइट देखते हैं, वह उनकी स्क्रीन पर फिट हो। एक विस्तृत ब्राउज़र पर font-sizeसेट के साथ एक उपयोगकर्ता , प्रभावी रूप से आपकी साइट को देख रहा होगा जैसा कि एक विस्तृत ब्राउज़र पर किसी उपयोगकर्ता को दिखाया गया है। उपयोग करने में RWD के लिए बिल्कुल कोई नुकसान नहीं है ।32px640px16px320pxrem
बदलते pxमूल्य
क्योंकि remपर आधारित है font-sizeके :rootनोड, आप क्या बदलना चाहते हैं 1remका प्रतिनिधित्व करता है, तुम सब करने के लिए है बदल रहा है font-size:
:root {
font-size: 100px;
}
body {
font-size: 1rem;
}
<p>Don't ever actually do this, please</p>
आप जो कुछ भी करते हैं, वह :rootतत्व font-sizeको एक pxमूल्य पर सेट नहीं करता है ।
आप सेट करते हैं font-sizeपर htmlएक करने के लिए pxमूल्य, आप एक तरह से उन्हें वापस पाने के लिए बिना उपयोगकर्ताओं की प्राथमिकताओं को उड़ा दिया है।
यदि आप के स्पष्ट मूल्य को बदलना चाहते हैं rem, तो %इकाइयों का उपयोग करें ।
इसके लिए गणित उचित रूप से सीधे-आगे है।
का स्पष्ट फ़ॉन्ट-आकार :rootहै 16px, लेकिन हम कहते हैं कि हम इसे बदलना चाहते हैं 20px। हमें बस इतना करना चाहिए कि इसे 16पाने के लिए कुछ मूल्य से गुणा करना होगा 20।
अपना समीकरण सेट करें:
16 * X = 20
और इसके लिए हल करें X:
X = 20 / 16
X = 1.25
X = 125%
:root {
font-size: 125%;
}
<p>If you're using the default font-size, I'm 20px tall.</p>
सब कुछ के गुणकों में सब कुछ 20महान नहीं है, लेकिन एक आम सुझाव के remबराबर करने के लिए स्पष्ट आकार बनाने के लिए है 10px। उसके लिए मैजिक नंबर 10/16जो है 0.625, या है 62.5%।
:root {
font-size: 62.5%;
}
<p>If you're using the default font-size, I'm 10px tall.</p>
समस्या अब है कि आपके डिफ़ॉल्ट है font-sizeपेज के आराम के लिए सेट रास्ता बहुत छोटा है, लेकिन वहाँ उस के लिए उन्हें आसानी से ठीक है: सेट एक font-sizeपर bodyका उपयोग कर rem:
:root {
font-size: 62.5%;
}
body {
font-size: 1.6rem;
}
<p>I'm the default font-size</p>
यह ध्यान रखना महत्वपूर्ण है कि इस समायोजन के साथ, का स्पष्ट मान है rem, 10pxजिसका अर्थ है कि आपके द्वारा लिखा गया कोई भी मूल्य pxसीधे remदशमलव स्थान से टकराकर परिवर्तित किया जा सकता है।
padding: 20px;
में बदल जाता है
padding: 2rem;
आपके द्वारा चुना गया स्पष्ट फ़ॉन्ट-आकार आपके ऊपर है, इसलिए यदि आप चाहते हैं कि कोई कारण नहीं है जिसका आप उपयोग नहीं कर सकते हैं:
:root {
font-size: 6.25%;
}
body {
font-size: 16rem;
}
और 1remबराबर है 1px।
तो आपके पास यह है, उपयोगकर्ता की इच्छाओं का सम्मान करने के लिए एक सरल समाधान, जबकि आपके सीएसएस को अधिक जटिल बनाने से भी बचा जाता है।
रुको, तो क्या पकड़ है?
मुझे डर था कि आप यह पूछ सकते हैं। जितना मैं दिखावा करना चाहता हूं कि remजादू है और सभी चीजों को हल करता है, नोट के कुछ मुद्दे अभी भी हैं। मेरी राय में कुछ भी नहीं टूट रहा है, लेकिन मैं उन्हें फोन करने जा रहा हूं ताकि आप यह न कह सकें कि मैंने आपको चेतावनी नहीं दी।
मीडिया क्वेरी (उपयोग em)
आपके द्वारा चलाए जा रहे पहले मुद्दों में से remएक मीडिया क्वेरी शामिल है। निम्नलिखित कोड पर विचार करें:
:root {
font-size: 1000px;
}
@media (min-width: 1rem) {
:root {
font-size: 1px;
}
}
यहां remमीडिया-क्वेरी लागू होने के आधार पर परिवर्तनों का मूल्य और मीडिया क्वेरी के मूल्य पर निर्भर करता है rem, इसलिए पृथ्वी पर क्या हो रहा है?
remमीडिया में प्रश्नों के प्रारंभिक मूल्य का उपयोग करता है font-sizeऔर (सफारी अनुभाग देखें) किसी भी परिवर्तन को ध्यान में नहीं रखना चाहिएfont-size जो :rootतत्व का हुआ हो । दूसरे शब्दों में, यह स्पष्ट मूल्य हमेशा होता है 16px ।
यह थोड़ा कष्टप्रद है, क्योंकि इसका मतलब है कि आपको कुछ अंशों की गणना करनी है, लेकिन मैंने पाया है कि अधिकांश सामान्य मीडिया क्वेरीज़ पहले से ही उन मानों का उपयोग करती हैं जो 16 के गुणक हैं।
| px | rem |
+------+-----+
| 320 | 20 |
| 480 | 30 |
| 768 | 48 |
| 1024 | 64 |
| 1200 | 75 |
| 1600 | 100 |
इसके अतिरिक्त अगर आप सीएसएस प्रीप्रोसेसर का उपयोग कर रहे हैं, तो आप अपने मीडिया प्रश्नों का प्रबंधन करने के लिए मिक्सिन्स या चर का उपयोग कर सकते हैं, जो पूरी तरह से इस मुद्दे को खत्म कर देगा।
सफारी
दुर्भाग्य से सफारी के साथ एक ज्ञात बग है जहां :rootफ़ॉन्ट-आकार में परिवर्तन वास्तव में remमीडिया क्वेरी श्रेणियों के लिए परिकलित मानों को बदलते हैं। यह कुछ बहुत ही अजीब व्यवहार का कारण बन सकता है अगर :rootतत्व का आकार-प्रकार मीडिया क्वेरी के भीतर बदल दिया जाए। सौभाग्य से फिक्स सरल है: मीडिया प्रश्नों के लिए इकाइयों का उपयोग करेंem ।
प्रसंग स्विचिंग
यदि आप विभिन्न विभिन्न परियोजनाओं के बीच स्विच करते हैं, तो यह बहुत संभव है कि स्पष्ट फ़ॉन्ट-आकार में remभिन्न मूल्य होंगे। एक परियोजना में, आप एक स्पष्ट आकार का उपयोग कर सकते हैं 10pxजहां एक अन्य परियोजना में स्पष्ट आकार हो सकता है 1px। यह भ्रामक हो सकता है और मुद्दों का कारण बन सकता है।
यहाँ मेरी एकमात्र सिफारिश एक स्पष्ट आकार में 62.5%बदलने के remलिए साथ रहना है 10px, क्योंकि यह मेरे अनुभव में अधिक सामान्य रहा है।
सीएसएस पुस्तकालयों को साझा किया
यदि आप सीएसएस लिख रहे हैं, तो आप ऐसी साइट पर उपयोग करने जा रहे हैं जिसे आप नियंत्रित नहीं करते हैं, जैसे कि एक एम्बेडेड विजेट के लिए, वास्तव में यह जानने का कोई अच्छा तरीका नहीं है कि स्पष्ट आकार क्या remहोगा। अगर ऐसा है, तो बेझिझक इस्तेमाल करते रहें px।
यदि आप अभी भी उपयोग करना चाहते हैं rem, तो स्पष्ट आकार के लिए स्केलिंग को ओवरराइड करने के लिए एक चर के साथ स्टाइलशीट के सैस या लेस संस्करण को जारी करने पर विचार करें rem।
* मैं किसी को भी उपयोग करने से दूर नहीं करना चाहता rem, लेकिन मैं आधिकारिक तौर पर पुष्टि नहीं कर पाया कि हर ब्राउज़र 16pxडिफ़ॉल्ट रूप से उपयोग करता है। आप देखते हैं, बहुत सारे ब्राउज़र हैं और यह सब एक ब्राउज़र के लिए इतना कठिन नहीं है कि कभी भी, थोड़ा सा कहे 15pxया कहे 18px। परीक्षण में, हालांकि मैंने एक भी उदाहरण नहीं देखा है, जहां डिफ़ॉल्ट सेटिंग्स का उपयोग करके सिस्टम में डिफ़ॉल्ट सेटिंग्स का उपयोग करने वाले ब्राउज़र के अलावा कोई मूल्य नहीं था 16px। यदि आपको ऐसा कोई उदाहरण मिलता है, तो कृपया इसे मेरे साथ साझा करें।