2012-11-05 18 views
57

ओवरलैप से बचने के लिए हम मीडिया प्रश्नों को सटीक रूप से कैसे निकाल सकते हैं?सीएसएस मीडिया क्वेरी ओवरलैप के नियम क्या हैं?

उदाहरण के लिए, अगर हम कोड पर विचार करें: बिल्कुल 20em, और 45em पर

@media (max-width: 20em) { 
    /* for narrow viewport */ 
} 

@media (min-width: 20em) and (max-width: 45em) { 
    /* slightly wider viewport */ 
} 

@media (min-width: 45em) { 
    /* everything else */ 
} 

क्या सभी समर्थन ब्राउज़रों में, क्या होगा?

मैंने लोगों को उपयोग किया है: 79 9 पीएक्स और फिर 800 पीएक्स जैसी चीजें, लेकिन 7 9 5.5 पीएक्स की स्क्रीन चौड़ाई के बारे में क्या? (एक नियमित रूप से प्रदर्शन, लेकिन एक रेटिना एक पर जाहिर नहीं?)


मैं इस सवाल का जवाब यहाँ कल्पना पर विचार के बारे में सबसे उत्सुक हूँ।

+1

आपका वर्तमान प्रश्न शीर्षक जो आप पूछ रहे हैं उससे मेल नहीं खाता है। ऐसा लगता है कि आपकी प्रश्न सामग्री की पहली पंक्ति शीर्षक के रूप में बेहतर होगी :) – BoltClock

+0

@ बोल्टक्लॉक, हमेशा के रूप में धन्यवाद - मैंने उन्हें चारों ओर बदल दिया; लेकिन आपने "मीडिया प्रश्नों को दूर करने" की व्याख्या कैसे की? – Baumr

+0

अनुमान @media (...) कम या बराबर है, और अधिक या बराबर है। आप अधिकतम चौड़ाई –

उत्तर

75

सीएसएस मीडिया क्वेरी ओवरलैप के नियम क्या हैं?

कैस्केड।

@media नियम झरना लिए पारदर्शी होते हैं, इसलिए जब दो या अधिक @media नियम एक ही समय में मेल खाते हैं, ब्राउज़र सभी नियमों से मेल खाने वाले में शैलियों लागू करना चाहिए, और उसके अनुसार झरना हल।

क्या होगा, सभी का समर्थन ब्राउज़रों, वास्तव में 20em पर, और 45em भर में?

बिल्कुल 20em चौड़े पर, आपकी पहली और दूसरी मीडिया क्वेरी दोनों मेल खाएगी। ब्राउज़र @media दोनों नियमों और कैस्केड में शैलियों को लागू करेंगे, इसलिए यदि कोई विवादित नियम हैं जिन्हें ओवरराइड करने की आवश्यकता है, तो अंतिम घोषित एक जीतता है (विशिष्ट चयनकर्ताओं के लिए लेखांकन, !important, आदि)। इसी प्रकार दूसरी और तीसरी मीडिया क्वेरी के लिए जब व्यूपोर्ट बिल्कुल 45 मीटर चौड़ा होता है।

अपने उदाहरण कोड को देखते हुए, कुछ वास्तविक शैली के नियमों के साथ कहा:

@media (max-width: 20em) { 
    .sidebar { display: none; } 
} 

@media (min-width: 20em) and (max-width: 45em) { 
    .sidebar { display: block; float: left; } 
} 

जब ब्राउज़र व्यूपोर्ट बिल्कुल 20em व्यापक है, इन मीडिया के प्रश्नों के दोनों सच वापस आ जाएगी। कैस्केड द्वारा, display: block ओवरराइड display: none और float: left कक्षा .sidebar के साथ किसी भी तत्व पर लागू होगा।

आप नियमों को लागू करने के रूप में यह सोच सकते हैं के रूप में यदि मीडिया क्वेरी वहाँ के साथ शुरू नहीं थे:

.sidebar { display: none; } 
.sidebar { display: block; float: left; } 

जब एक ब्राउज़र दो या अधिक मीडिया क्वेरी से मेल खाता कैसे झरना जगह लेता है का एक और उदाहरण कर सकते हैं this other answer में पाया जाए।

चेतावनी दी जानी चाहिए कि अगर आपके पास @media नियमों में ओवरलैप नहीं है, तो उन सभी नियम लागू होंगे। @media नियमों में घोषणाओं की घोषणाओं में यूनियन का क्या होता है, न केवल बाद वाले व्यक्ति ने पूरी तरह से पूर्ववर्ती ...जो हमें अपने पहले प्रश्न के लिए लाता है:

हम कैसे मीडिया क्वेरी सही रूप में ओवरलैप से बचने के लिए बाहर अंतरिक्ष करते हैं?

आप ओवरलैप से बचना चाहते हैं, तो आप बस मीडिया क्वेरी कि परस्पर अनन्य हैं लिखने के लिए की जरूरत है।

याद रखें कि min- और max- उपसर्गों मतलब है "न्यूनतम समावेशी" और "अधिकतम समावेशी"; इसका मतलब है (min-width: 20em) और (max-width: 20em) दोनों एक व्यूपोर्ट से मेल खाते हैं जो बिल्कुल 20em चौड़ा है।

ऐसा लगता है कि आप पहले से ही एक उदाहरण है, जो हमें अपने पिछले प्रश्न के लाता है जैसे:

मैंने देखा है लोगों का उपयोग करें: 799px तरह बातें और फिर 800px, लेकिन क्या 799.5 पिक्सल के एक स्क्रीन की चौड़ाई के बारे में ? (स्पष्ट रूप से नियमित प्रदर्शन पर नहीं, बल्कि एक रेटिना एक?)

यह मुझे पूरी तरह से यकीन नहीं है; सीएसएस में सभी पिक्सेल मान तार्किक पिक्सल हैं, और मुझे एक ब्राउज़र खोजने के लिए कड़ी मेहनत की गई है जो व्यूपोर्ट चौड़ाई के लिए एक आंशिक पिक्सेल मान की रिपोर्ट करेगा। मैंने कुछ iframes के साथ प्रयोग करने की कोशिश की है लेकिन कुछ भी के साथ आने में सक्षम नहीं है।

अपने प्रयोगों से यह iOS पर सफारी प्रतीत होता है यह सुनिश्चित करें कि max-width: 799px दोनों में से किसी एक और min-width: 800px से मेल खाएगी सभी आंशिक पिक्सेल मान दौर है, भले ही व्यूपोर्ट वास्तव में 799.5px है (जो जाहिरा तौर पर पूर्व से मेल खाता है)।


हालांकि इस में से कोई भी स्पष्ट रूप में कहा गया है या तो Conditional Rules module या Cascade module (उत्तरार्द्ध जिनमें वर्तमान में एक फिर से लिखने के लिए उम्मीद है की), झरना सामान्य रूप से जगह लेने के लिए, कल्पना के बाद से निहित है बस ब्राउज़र या मीडिया से मेल खाने वाले नियमों में से किसी भी और सभी @media नियमों को लागू करने के लिए कहता है।

+0

हो गया और धूल, बोल्टक्लॉक धन्यवाद! – Baumr

+0

@ बाउमर: कोई समस्या नहीं, हालांकि मैं अभी तक पूरी तरह से नहीं किया गया था - मैं मीडिया प्रश्नों को ओवरलैप करने के बारे में आपके प्रश्न को याद करता हूं। मैंने अपना जवाब अपडेट कर लिया है, और उसके साथ मैं इसे एक रात बुला रहा हूं। ओह और सिर्फ किक्स के लिए: मीडिया प्रश्न सीएसएस में मेरे पसंदीदा विषयों में से एक हैं, लेकिन मैं आरडब्ल्यूडी शब्द नहीं खड़ा कर सकता हूं;) – BoltClock

+0

बोल्टक्लॉक, यह पहली बार हो सकता है कि मैंने "आरडब्ल्यूडी" वास्तव में इस्तेमाल किया हो - आपका ठंडा स्वागत रहा है ध्यान दिया, हाहा! शुभ रात्रि, लेकिन जब आप वापस आते हैं, तो मूल प्रश्न में किए गए अपडेट को देखें। अब अपने अपडेट को देखने के लिए ... – Baumr

2

calc() इस (min-width: 50em and max-width: calc(50em - 1px) के आसपास काम करने के लिए उपयोग किया जा सकता है सही ढंग से ढेर किया जाएगा), लेकिन खराब ब्राउज़र समर्थन और मैं इसकी सिफारिश नहीं करता।

@media (min-width: 20em) and (max-width: calc(45em - 1px)) { 
    /* slightly wider viewport */ 
} 

Infos:

कुछ दूसरों उल्लेख किया है, का उपयोग नहीं कर em इकाई आपके प्रश्नों स्टैकिंग में मदद मिलेगी।

+1

'calc()' मीडिया क्वेरी spec का हिस्सा नहीं है और काम नहीं करेगा। –

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