मैं कुछ उत्कृष्ट ऐतिहासिक संदर्भ प्रदान करने के लिए 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 के लिए बिल्कुल कोई नुकसान नहीं है ।32px
640px
16px
320px
rem
बदलते 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
। यदि आपको ऐसा कोई उदाहरण मिलता है, तो कृपया इसे मेरे साथ साझा करें।