2013-08-08 8 views
8

मैं विंडो चौड़ाई निर्धारित करने के तरीके को समझने की कोशिश कर रहा हूं और मैं सोच रहा था कि यह सीएसएस और jQuery के लिए अलग है या नहीं।jQuery और सीएसएस मीडिया प्रश्न सिंक में नहीं

उदाहरण के लिए मैं सीएसएस मीडिया क्वेरी है:

@media (max-width: 979px) { 
    /*my css here*/ 
} 

और भी कुछ jQuery:

if ($(window).width() < 979) { 
    //my jQuery here 
} 

मैं उम्मीद होती है निम्नलिखित: - जब ब्राउज़र & आकार दिया 980px में ताज़ा किया जाता है , उपर्युक्त दोनों को अनदेखा कर दिया जाएगा - जब ब्राउज़र का आकार & 978 पीएक्स पर रीफ्रेश किया गया है, तो उपरोक्त दोनों सक्रिय होंगे।

हालांकि मुझे जो मिल रहा है वह यह है कि - jQuery और CSS 964px और नीचे तक नहीं लाते हैं। - कभी-कभी (अगर मेरे पास window.resize सक्षम है) jQuery और सीएसएस किक अलग चौड़ाई (कुछ पिक्सल अलग) पर लातें।

क्या कोई यहां क्या हो रहा है इस पर कोई प्रकाश डाल सकता है?

जिस तरह से मैं फायरबग के लेआउट व्यूअर पर विंडो चौड़ाई का आधार बना रहा हूं।

+0

मैंने एक ही समस्या देखी, कोई भी समाधान रिपोर्ट नहीं कर रहा है, दोनों एक ही मूल्य लौटाते हैं जो मीडिया क्वेरी द्वारा पढ़ा जाने वाला मान नहीं है, इसके अलावा यह दस्तावेज़/बॉडी ऑब्जेक्ट के बाद से jquery से संबंधित समस्या नहीं है शैली के लिए एक ही मूल्य है, क्या कोई समाधान है? – guari

+0

ठीक है, बस कारण मिला, मैंने नीचे दिए गए उत्तर में एक समाधान जोड़ा। – guari

+0

क्या आपने खिड़की के बजाय शरीर का उपयोग करने की कोशिश की है? – CyberJunkie

उत्तर

0

लगता है कि तुम का उपयोग करने के $(document).width() बजाय

$(window).width(); // returns width of browser viewport 
$(document).width(); // returns width of HTML document 

http://api.jquery.com/width/

+0

ये मैंने कोशिश की और यह मेरे लिए खिड़की चौड़ाई के समान मूल्य लौट रहा था।इसके अलावा यह स्पष्ट नहीं करता है कि क्यों सीएसएस मीडिया प्रश्न देर से लात मार रहे हैं (फायरबग द्वारा दी गई चौड़ाई के अनुसार) – Coop

0

मीडिया प्रश्नों व्यूपोर्ट चौड़ाई का उपयोग कर सकते हैं। मुझे लगता है कि सीएसएस मीडिया प्रश्नों के साथ मिलान करने का प्रयास करते समय एचटीएमएल चौड़ाई प्राप्त करना अधिक सटीक है। आकार बदलने का उपयोग करना:

$(window).resize(function() { 
    if ($('html').width() <= 979) { 
    // Do something 
    } 
}); 
+0

ठीक है कि यह अच्छा है। लेकिन मुझे आश्चर्य है कि अगर फायरबग एक गलत शरीर की चौड़ाई दे रहा है या यदि सीएसएस एक अलग चौड़ाई पढ़ रहा है क्योंकि यह देर से चलता है। शायद स्क्रॉलबार के साथ कुछ करने के लिए? – Coop

8

समस्या स्क्रॉलबार चौड़ाई से संबंधित है: window.innerWidth सही मूल्य कि CSS मीडिया क्वेरी द्वारा पढ़ा जाता है वापस आ जाएगी। ध्यान दें कि $(window).innerWidth() गलत मान वापस करेगा।

एक क्रॉस-ब्राउज़र समाधान के लिए इस तरह एक समारोह के लिए इस्तेमाल किया जा सकता है:

function viewport() { 
    var e = window, a = 'inner'; 
    if (!('innerWidth' in window)) { 
     a = 'client'; 
     e = document.documentElement || document.body; 
    } 
    return { width : e[ a+'Width' ] , height : e[ a+'Height' ] }; 
} 

var value = viewport().width; 
+0

मैं कसम खाता हूं कि मैंने इस मुद्दे को सौ बार Google'd किया है और मैं हमेशा इस समाधान को भूल जाता हूं। –

1

विषय बंद थोड़ा, लेकिन मैं आपको नकल करने के लिए जब जावास्क्रिप्ट आग क्योंकि आप पर कुछ करना चाहता हूँ की कोशिश कर रहे मान सीएसएस ब्रेकपॉइंट स्विच के साथ ही एक ही समय। यदि आप मीडिया क्वेरी को आग लगने पर जावास्क्रिप्ट कुछ करना चाहते हैं, तो मुझे पता चला है कि सीएसएस द्वारा बनाए गए बदलाव के लिए चुनाव करना सबसे आसान है, मीडिया पूछताछ के तरीके की नकल करने की कोशिश करने की बजाय, जो रिपोर्टिंग के कारण ब्राउज़र में असंगत है स्क्रॉलबार चौड़ाई के)। उदाहरण यदि आपका ब्रेकप्वाइंट पर, तत्व-x position: fixed करने के लिए position: relative से चला जाता है के लिए, आप सुनिश्चित कर सकते हैं अपने जावास्क्रिप्ट मतदान से

if(elementX.css('position')== 'fixed'){ 
//code 
} 

परीक्षण बल्कि दस्तावेज़ चौड़ाई के आधार पर आपके सीएसएस के साथ कतार में है।

+0

मैं पृष्ठ पर एक अदृश्य शासक तत्व का उपयोग अधिकतम चौड़ाई मान और मतदान के साथ करता हूं। – Sam

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