2009-03-02 30 views

उत्तर

1

जावास्क्रिप्ट के साथ इसका पता लगाने का कोई तरीका नहीं है क्योंकि यह एक शुद्ध सीएसएस विशेषता है जो जावास्क्रिप्ट में किसी ऑब्जेक्ट या फ़ंक्शन से संबंधित नहीं है। सबसे अच्छी बात यह है कि मैं आपको एक अच्छी अच्छी संगतता सूची के लिए here जांचना और वर्कअराउंड बनाने के लिए सीएसएस का उपयोग करना चाहता हूं।

+0

@ एलन एच .: हाय! मैं तुम्हें नहीं जानता, लेकिन मैं अपने उत्तर पर आपकी रचनात्मक आलोचना की सराहना करता हूं! मैं इस प्रश्न के आपके उत्तर की भी प्रतीक्षा करता हूं जिसमें आप हमें दिखाते हैं कि यह कैसे करें। आप हमें रास्ता दिखाने जा रहे हैं, है ना? :) –

+1

http://peter.michaux.ca/articles/feature-detection-state-of-the-art-browser-scripting वास्तव में, क्रिस्टोफर स्वसी नीचे दिए गए उत्तर में जेएस के साथ इसका पता लगाने का एक तरीका प्रदान करता है। और कम से कम एलन एच ने लिखा था कि उसने क्या सोचा था कि आपके जवाब में समस्या है। मैं उस लक्जरी के बिना पुराने उत्तरों के लिए downvotes मिलता है। – Boldewyn

+0

@ बोल्डविन: मैं मानता हूं कि जिस लेख से आप लिंक करते हैं और क्रिस्टोफर स्वासी का जवाब दोनों के नीचे काम करता है (* अच्छा * कामकाज, लेकिन फिर भी कामकाज)। मुझे अभी भी विश्वास है कि एक विशेष सीएसएस सुविधा के लिए ब्राउज़र समर्थन का पता लगाने के लिए कोई "साफ" तरीका नहीं है। इसके अलावा मैं शायद एलन की टिप्पणी को एक लक्जरी कहूंगा। :) –

7

QuirksMode charts के अनुसार, केवल मुख्य धारा inline-block का समर्थन नहीं ब्राउज़रों IE6 और 7 (खैर, वे इसे समर्थन है, लेकिन केवल तत्व है जो inline के एक देशी display प्रकार है के लिए।) मैं सिर्फ मान चाहते हैं इसका समर्थन किया है और उसके बाद आईई 6/7 के लिए conditional comments के माध्यम से एक वर्कअराउंड लागू करें।

(नोट:। मैं inline-block के लिए समर्थन की फ़ायरफ़ॉक्स 2 की कमी की अनदेखी कर रहा हूँ और उन के विशाल बहुमत संभालने FF3 में अपग्रेड किया है, लेकिन संक्षिप्त Googling किसी भी संख्या का पता लगाने नहीं था कि बैक अप करने के लिए YMMV।)

यदि जावास्क्रिप्ट से समर्थन निर्धारित करना आपका एकमात्र विकल्प है, तो आपको उपयोगकर्ता-एजेंट स्नीफिंग पर वापस आना होगा। YAHOO.env.uaYUI library से कक्षा कोड का एक आसान हिस्सा है जिसे आप कॉपी और उपयोग कर सकते हैं। (यह बीएसडी लाइसेंस प्राप्त है, यह यूयूआई लाइब्रेरी के अन्य हिस्सों पर निर्भर नहीं है, और टिप्पणियों के बिना केवल 25-30 लाइनें हैं)

+0

बस मेरी वेबसाइट पर आंकड़ों की जांच की और वे आपकी धारणा का समर्थन करते हैं कि अधिकांश एफएफ उपयोगकर्ताओं ने एफएफ 3 में अपग्रेड किया है और आईएमओ भविष्य के लिए डिजाइन करना एक अच्छा विचार है। –

12

ठीक है, अगर आप इसे पूरी तरह से बैवियर की जांच करके करना चाहते हैं तो आप यहां जा सकते हैं उपयोगकर्ता एजेंट स्नीफिंग के बजाय ब्राउज़र w/जावास्क्रिप्ट का:

एक परीक्षण परिदृश्य और नियंत्रण परिदृश्य सेट करें। के साथ, कहते हैं, निम्नलिखित संरचना:

  • div
    • डब्ल्यू div/सामग्री "परीक्षण"
    • डब्ल्यू div/सामग्री "test2" में

सम्मिलित एक प्रतिलिपि दो आंतरिक divs के साथ दस्तावेज़ इनलाइन-ब्लॉक पर सेट है, और ब्लॉक में सेट दो आंतरिक divs के साथ दस्तावेज़ में एक और प्रतिलिपि डालें। यदि ब्राउज़र इनलाइन-ब्लॉक का समर्थन करता है, तो युक्त divs की अलग-अलग ऊंचाई होगी।

वैकल्पिक जवाब:

तुम भी देखना चाहते हैं कि ब्राउज़र एक दिया तत्व के सीएसएस इलाज है getComputedStyle उपयोग कर सकते हैं। तो, सिद्धांत रूप में, आप "डिस्प्ले: इनलाइन-ब्लॉक" के साथ एक तत्व जोड़ सकते हैं और फिर यह देखने के लिए गणना की गई स्टाइल की जांच करें कि यह बचे हुए हैं या नहीं। केवल समस्या: IE getComputedStyle का समर्थन नहीं करता है। इसके बजाए, इसमें वर्तमान स्टाइल है। मुझे नहीं पता कि वर्तमान स्टाइल समान रूप से कार्य करता है (संभवतः यह हमारे इच्छित व्यवहार के समान कार्य करता है: "अमान्य" मानों को अनदेखा करना)।

+1

मैंने अभी इसका परीक्षण किया है ([Alan H's] के माध्यम से (http://stackoverflow.com/a/5049711/2688) [jsFiddle] (http://jsfiddle.net/JvTBZ/)) और 'currentStyle'' इनलाइन दिखाता है उन तत्वों के लिए -ब्लॉक करें जहां यह समर्थित नहीं है (यानी आईई 6 और 7 में 'div') – bdukes

+0

आपका अन्य परीक्षण काम करता है (कम से कम, जेएसएफडल के साफ कमरे में): http://jsfiddle.net/bdukes/cHUps/5/ – bdukes

3

वैसे: अकेले सीएसएस के साथ IE6 +, FF2 +, ओपेरा में पार ब्राउज़र इनलाइन-ब्लॉक और वेबकिट लागू करने के लिए a neat way नहीं है। (मान्य सीएसएस नहीं, लेकिन अभी भी केवल सीएसएस।)

2

Christopher Swasey काफी सही है।

मैंने अपनी तकनीक का एक jsFiddle डेमो http://ajh.us/test-inline-block पर स्थापित किया है।

कोड अनिवार्य है:

var div = document.createElement('div'); 
div.style.cssText = 'display:inline-block'; 

// need to do this or else document.defaultView doesn't know about it 
$('body').append(div); 
// that was jQuery. It’s possible to do without, naturally 

var results = false; 

if (div.currentStyle) { 
    results = (div.currentStyle['display'] === 'inline-block'); 
} else if (window.getComputedStyle) { 
    results = document.defaultView.getComputedStyle(div,null).getPropertyValue('display')=== 'inline-block'; 
} 

//clean up 
$(div).remove(); 

alert('display: inline-block support: '+results); 

कृपया ध्यान दें यह ठीक उसी तकनीक भी display: run-in समर्थन पता लगाने के लिए काम करता है।

+0

इस तकनीक का उपयोग करके, मेरी आईई 6 और 7 मशीनें दोनों कहते हैं कि वे 'div' पर 'इनलाइन-ब्लॉक' का समर्थन करते हैं, वास्तव में, वे दोनों इसे 'ब्लॉक' तत्व के रूप में प्रदर्शित करते हैं। – bdukes

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