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


88

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

उदाहरण के लिए, यदि हम कोड पर विचार करते हैं:

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

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

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

क्या सभी सहायक ब्राउज़रों में, बिल्कुल 20em और 45em पर होगा?

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


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


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

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

1
@Baumr: अच्छा सवाल - मैं वास्तव में पूरी तरह से समझ नहीं पाया कि आपका मतलब क्या है। शेष प्रश्न मैं समझता हूं और मैं एक उत्तर लिख रहा हूं।
बोल्टलॉक

1
मैं मानूंगा कि यदि आपके पास बिल्कुल 20em की चौड़ाई थी, तो यह पहले max-width: 20emपरिभाषाओं को लागू करेगा , फिर परिभाषाओं को भी लागू करेगा min-width: 20em
उपयोगकर्ता

1
@Baumr, मेरा मानना ​​है कि यह सामान्य सीएसएस घोषणाओं के समान ही है। चूंकि 20em की चौड़ाई दोनों प्रश्नों को संतुष्ट करती है, दोनों क्वेरी परिभाषाएँ लागू होने जा रही हैं।
उपयोगकर्ता

जवाबों:


108

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

कास्केड।

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

क्या सभी सहायक ब्राउज़रों में, बिल्कुल 20em और 45em पर होगा?

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

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

@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; }

जब एक ब्राउज़र दो या अधिक मीडिया प्रश्नों से मेल खाता है तो कैस्केड कैसे होता है, इसका एक और उदाहरण इस अन्य उत्तर में पाया जा सकता है ।

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

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

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

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

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

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

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

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


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


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

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

बोल्टकॉक, क्या मुझे उस अपडेट को निकालना चाहिए और इसे अपने प्रश्न में बनाना चाहिए? मुझे लगता है कि मैं इस
दृढ़

@Baumr: हाँ, यह उस तरह से बेहतर है।
बोल्टकॉक

बोल्टकॉक: मैंने इसे बाहर निकाल लिया और इसे एक, उम्मीद से, अधिक संक्षिप्त प्रश्न में डाल दिया: मीडिया क्वेरी ओवरलैप से कैसे बचें? - यदि आपके पास अन्य लोगों के लिए इसे लागू करने के लिए कोई सुझाव हैं, तो कृपया साझा करें। PS यह आपको टिप्पणियों में मुझे @ आपको बताने नहीं दे रहा है।
बुम्र

6

मैंने यहाँ सुझाए अनुसार कोशिश की है:

@media screen and (max-width: calc(48em - 1px)) {
    /*mobile styles*/
}
@media screen and (min-width: 48em) {
    /*desktop styles*/
}

लेकिन पाया कि यह एक अच्छा विचार नहीं था क्योंकि यह अभी क्रोम पर या तो मेरे उबंटू डेस्कटॉप पर या मेरे एंड्रॉइड फोन पर काम नहीं करता है। (जैसा कि यहाँ बताया गया है: कैल्क () मीडिया क्वेरीज़ के भीतर काम नहीं कर रहा है) लेकिन, मुझे एक बेहतर तरीका मिला ...

@media screen and (max-width: 47.9999em) {
    /*mobile styles*/
}
@media screen and (min-width: 48em) {
    /*desktop styles*/
}

और बाम!


यह स्वीकृत उत्तर होना चाहिए। बोल्टलॉक ने पांडित्य उत्तर की आपूर्ति की, लेकिन यह उत्तर सबसे उपयोगी है!
जॉन हेनकेल

2

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

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

जानकारी:

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


4
calc()मीडिया क्वेरी युक्ति का हिस्सा नहीं है और यह काम नहीं करेगा।
जेसन टी फेदरसिंघम
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.