कुछ कम जादू के साथ फैंसी मीडिया क्वेरी


82

कम उपयोग करने वाले कुछ सीएसएस-वर्गों के भीतर विभिन्न प्रस्तावों के लिए सीएसएस-शैलियों को लपेटना अच्छा होगा।

मैं कुछ करना चाहता हूँ जैसे:

footer {
  width: 100%;
}

.tablet {
  footer {
    width: 768px;
  }
}

.desktop {
  footer {
    width: 940px;
  }
}

अंत में कुछ इस तरह होना चाहिए परिणाम:

footer {
  width: 100%;
}

@media screen and (min-width: 768px) {
  footer {
    width: 768px;
  }
}

@media screen and (min-width: 992px) {
  footer {
    width: 940px;
  }
}

.tablet कुछ इस तरह दिख सकता है:

@media screen and (min-width: 768px) {
  .tablet {

  }
}

आशा है कि किसी को एक अच्छा विचार है!



@ZzzzBov को टिप्पणियों में बातचीत के आधार पर, शायद हमें आपके प्रश्न में थोड़ा और स्पष्टता की आवश्यकता है कि आप क्या हासिल करने की कोशिश कर रहे हैं और आप इसे कैसे प्राप्त करना चाहते हैं।
स्कॉट्स

जवाबों:


237

मैंने अपनी परियोजनाओं में यही किया है:

@desktop:   ~"only screen and (min-width: 960px) and (max-width: 1199px)";
@tablet:    ~"only screen and (min-width: 720px) and (max-width: 959px)";

@media @desktop {
  footer {
    width: 940px;
  }
}

@media @tablet {
  footer {
    width: 768px;
  }
}

यह आपको केवल एक बार अपने मीडिया प्रश्नों को परिभाषित करने की अनुमति देता है और आप इसे अपनी कम फ़ाइलों में उपयोग कर सकते हैं। पढ़ने में भी थोड़ा आसान। :)


2
यह बहुत बढ़िया है, धन्यवाद @ जय! Visual Studio में एक छोटी सी समस्या यह है कि यह चेतावनी संदेश @mediaएक .less फ़ाइल के उपयोग पर उत्पन्न होता है : " शैली नियम में अनपेक्षित '@' ब्लॉक "। हालांकि यह एक समस्या नहीं लगती है।
इयान कैंपबेल

मैं @mediaलाइन 1 + 2 में परिभाषित चर में क्यों नहीं खींच सकता ? ➪ पछतावा एक शुद्ध @tablet { ...तब हल नहीं करता है, जबकि एक @media @tablet {...(परिणामस्वरूप @mediaकोर्स के दोगुने , यदि स्ट्रिंग में लिया जाता है।
फ्रैंक Nocke

116

मैं हाई गुयेन के उत्तर (जो स्वीकार कर लिया गया है) से पूरी तरह सहमत हूं लेकिन आप इसे कुछ और करके साफ कर सकते हैं:

@desktop:   ~"only screen and (min-width: 960px) and (max-width: 1199px)";
@tablet:    ~"only screen and (min-width: 720px) and (max-width: 959px)";

footer{
  width: 100%;
  @media @tablet {
    width: 768px;
  }
  @media @desktop {
    width: 940px;
  }
}

यह मूल रूप से एक ही बात है, लेकिन आप मूल चयनकर्ता के अंदर अपने मीडिया प्रश्नों को घोंसला बनाते हैं। यह एक विशिष्ट तत्व के लिए सभी सीएसएस को एक साथ रखता है और आपकी शैलियों को बहुत अधिक मॉड्यूलर बनाता है (बनाम विभाजित ब्रेकपॉइंट दृष्टिकोण)।


इसे पढ़ने के बाद, मुझे यह ग्रंट कार्य MQ को समूहित करने के लिए मिला जब नेस्टेड MQ को संकलित किया गया है: github.com/buildingblocks/grunt-combine-media-queries ब्लोट को हटा देता है।
जेजी

यह अच्छा और साफ है। मैं पूछ सकता हूँ, क्यों ~ के सामने "केवल ...?
Anthony_Z

LESS में, स्ट्रिंग से पहले ~ एक टिल्ड "" शाब्दिक रूप से स्ट्रिंग को आउटपुट करता है, क्योंकि यह शुद्ध LESS में एक वाक्यविन्यास त्रुटि हो सकती है।
जोसेफ यैंसी

1
क्या होगा अगर आप उस "शाब्दिक स्ट्रिंग" के अंदर एक ऑपरेशन करने की कोशिश करते हैं? मान लीजिए कि मैं स्क्रीन रिज़ॉल्यूशन को शामिल करने के लिए एक चर का उपयोग करना चाहता हूं, उदाहरण के लिए: क्या मैं कुछ ऐसा कर सकता हूं: ~ "केवल स्क्रीन और (न्यूनतम-चौड़ाई: @mySize - 20px)"। मुझे पता है कि यह काम नहीं करता है, लेकिन ऐसा करने का सही तरीका क्या है?
fablexis

44

गुयेन और Yancey के लिए +1 - और एक अतिरिक्त।

यदि आप चौड़ाई की स्पष्ट परिभाषा चाहते हैं , तो आप string interpolationअपने ब्रेकप्वाइंट के लिए उसे और चर को पूरा कर सकते हैं । यहाँ बूटस्ट्रैप वालों के साथ उदाहरण के लिए - सख्त अतिव्यापी परिभाषा को रोकने के लिए सख्त नियम हैं।

@screen-xs-min:     480px;
@screen-sm-min:     768px;
@screen-md-min:     992px;
@screen-lg-min:     1200px;

@screen-xs-max:     (@screen-sm-min - 1);
@screen-sm-max:     (@screen-md-min - 1);
@screen-md-max:     (@screen-lg-min - 1);

@phone:             ~"only screen and (max-width: @{screen-xs-min})";
@phone-strict:      ~"only screen and (min-width: @{screen-xs-min}) and (max-width: @{screen-xs-max})";
@tablet:            ~"only screen and (min-width: @{screen-sm-min})";
@tablet-strict:     ~"only screen and (min-width: @{screen-sm-min}) and (max-width: @{screen-sm-max})";
@desktop:           ~"only screen and (min-width: @{screen-md-min})";
@desktop-strict:    ~"only screen and (min-width: @{screen-md-min}) and (max-width: @{screen-md-max})";
@large:             ~"only screen and (min-width: @{screen-lg-min})";

footer{
    width: 100%;
    @media @tablet {
        width: 768px;
    }
    @media @desktop {
        width: 940px;
    }
}

इस "-स्ट्रिक्ट" के बारे में विशेष रूप से, जो आपने लिखा है, उससे मैं इस निर्माण को समझने में सक्षम नहीं हूं। क्या कोई ऐसा स्रोत है जो आप मुझे इस विषय पर आगे पढ़ने के लिए इंगित कर सकते हैं?
केवकोंग

1
दरअसल, "सख्त-क्वेरीज़" सुविधा के लिए हैं और इसका उपयोग केवल तभी किया जाना चाहिए, यदि आप चाहते हैं कि आपका सीएसएस विशेष रूप से सिंगल स्क्रीन रेंज पर लागू हो। पहले मोबाइल का उपयोग करते समय (उदाहरण देखें: zellwk.com/blog/how-to-write-mobile-first-css ), मैं कहूंगा, कि उनका उपयोग संभवतः डिज़ाइन गंध का एक सा है और मैं आमतौर पर उनसे बचने की कोशिश करूंगा । लेकिन परिस्थितियों के आधार पर आप कुछ (भारी) सीएसएस को लक्षित @tabletकरना चाहते हैं, विशेष रूप से कह सकते हैं , और आप इसे, कहना @desktopऔर / या में ओवरराइड नहीं करना चाहते हैं @large। इन मामलों में, आप एक सख्त क्वेरी (यहां @tablet-strict) का उपयोग कर सकते हैं ।
सनीरेड

9

और आप इस तरह से मीडिया के प्रश्नों को भी जोड़ सकते हैं

@media @desktop, @tablet, @ipad{ 

//common styles... 

}

7

हम इस तरह से एक सेटअप का उपयोग करते हैं:

@vp_desktop:    801px;
@vp_tablet:     800px;
@vp_mobile:     400px;

.OnDesktop(@rules) { @media screen and (min-width:@vp_desktop){ @rules(); } };
.OnTablet(@rules) { @media screen and (max-width:@vp_tablet){ @rules(); } };
.OnMobile(@rules) { @media screen and (max-width:@vp_mobile){ @rules(); } };

आपको केवल चर सेट करने की आवश्यकता है, मिश्रण बाकी को संभालता है इसलिए इसे अभी भी लचीला बनाए रखना बहुत आसान है:

div {
  display: inline-block;
  .OnTablet({
    display: block;
  });
}

यह ध्यान देने योग्य है कि जबकि यह तकनीक बहुत आसान है, अगर आपके सीएसएस आउटपुट का बुरी तरह से उपयोग किया जाता है, तो यह मीडिया प्रश्नों से भरा होगा। मैं अपने मीडिया प्रश्नों को प्रति-ब्रेकपॉइंट, प्रति-फ़ाइल तक सीमित करने का प्रयास करता हूं। जहां एक फाइल हैडर होगी।

NB यह विधि शायद तब तक संकलित नहीं होगी जब तक आप जावास्क्रिप्ट कंपाइलर का उपयोग नहीं करते हैं।


4

मैं इन मिश्रणों और चर का उपयोग कर रहा हूं

.max(@max; @rules){@media only screen and (max-width: (@max - 1)){@rules();}}
.min(@min; @rules){@media only screen and (min-width: @min){@rules();}}
.bw(@min; @max; @rules){@media only screen and (min-width: @min) and (max-width: (@max - 1)){@rules();}}

@pad: 480px;
@tab: 800px;
@desktop: 992px;
@hd: 1200px;

तो यह

footer{
    width: 100%;
    .bw(@tab,@desktop,{
        width: 768px;
    });
    .min(@desktop,{
        width: 940px;
    });
}

हो जाता है

footer {
  width: 100%;
}
@media only screen and (min-width: 800px) and (max-width: 991px) {
  footer {
    width: 768px;
  }
}
@media only screen and (min-width: 992px) {
  footer {
    width: 940px;
  }
}

0
@highdensity:  ~"only screen and (-webkit-min-device-pixel-ratio: 1.5)",
               ~"only screen and (min--moz-device-pixel-ratio: 1.5)",
               ~"only screen and (-o-min-device-pixel-ratio: 3/2)",
               ~"only screen and (min-device-pixel-ratio: 1.5)";

@mobile:        ~"only screen and (max-width: 750px)";
@tab:       ~"only screen and (min-width: 751px) and (max-width: 900px)";
@regular:        ~"only screen and (min-width: 901px) and (max-width: 1280px)";
@extra-large:  ~"only screen and (min-width: 1281px)";

0

और यही मैंने अपनी परियोजना के लिए उपयोग किया है:

    @mobile:   ~"only screen and (min-width: 320px) and (max-width: 767px)";
    @tablet:    ~"only screen and (min-width: 768px) and (max-width: 991px)";
    @ipad:    ~"only screen and (min-width: 992px) and (max-width: 1024px)";

    @media @mobile {
      .banner{
        width: auto;
      }
    }

    @media @tablet {
      .banner{
        width: 720px;
      }
    }

  @media @ipad {
      .banner{
        width: 920px;
      }
    }
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.