2010-01-28 7 views
5

मैं एक ऐसा एप्लीकेशन विकसित कर रहा हूं जो सर्वव्यापी-एक्सफॉर्म का उपयोग करता हो। पहले मैं एक्सएचटीएमएल 1.0 डॉक्ट टाइप के साथ टेक्स्ट/एचटीएमएल के रूप में पृष्ठों की सेवा कर रहा था।क्या आप आईडी और क्लास नाम सीएसएस चयनकर्ताओं का उपयोग कर किसी अन्य नेमस्पेस में एक्सएचटीएमएल तत्वों को स्टाइल कर सकते हैं?

अगर मैंने माइम-टाइप को एप्लिकेशन/एक्सएचटीएमएल + एक्सएमएल में स्विच किया है, तो मुझे एक बहुत बड़ा प्रदर्शन सुधार दिखाई देगा, क्योंकि जावास्क्रिप्ट अब यह कर रहा है कि इसके बजाय ____ एनएस() फ़ंक्शंस का उपयोग कर सकता है (धीरे-धीरे पूरे के माध्यम से फिर से चल रहा है प्रत्येक बार जब इसे तत्व चुनने की आवश्यकता होती है तो डोम पेड़)।

लेकिन जब मैंने कोशिश की, तो मेरे सीएसएस का एक गुच्छा काम करना बंद कर दिया। मैंने देखा कि जब मैंने फ़ायरबग में या वेबकिट नाइटली वेब इंस्पेक्टर में तत्वों का निरीक्षण किया, तो विफलता का बिंदु '.classname' और '#id' css चयनकर्ता XFORMS नामस्थान में तत्वों पर थे। मैंने यह भी देखा कि उन तत्वों के लिए सूचीबद्ध डीओएम गुणों में उनमें 'आईडी' और 'क्लासनाम' दोनों गुणों की कमी थी।

मेरा सवाल यह है कि क्या कोई तरीका है कि मैं उन्हें UA और कक्षाओं के रूप में पहचानने के लिए प्राप्त कर सकता हूं?

थिंग्स आई, की कोशिश की है कोई लाभ नहीं हुआ:

  1. "आईडी" को निर्दिष्ट एक इनलाइन doctype की ATTLIST
  2. में आईडी के रूप में विशेषताओं का सब
  3. पर हर doctype मैं कर सकता है, या कोई doctype की कोशिश कर रहा xhtml नेमस्पेस (यानी xhtml: id) में आईडी और क्लास नाम विशेषताओं को अर्हता प्राप्त करना

यहां कुछ नमूना xhtml है। या तो Firefox 3.5 या सफारी में काम नहीं करता है 4/वेबकिट रात

<html xmlns="http://www.w3.org/1999/xhtml" 
    xmlns:xhtml="http://www.w3.org/1999/xhtml" 
    xmlns:xf="http://www.w3.org/2002/xforms"> 
<head> 
    <style type="text/css"> 
    /* <![CDATA[ */ 
    #test { 
     background-color: red; 
    } 
    .testing { 
     color: blue; 
    } 
    /* ]]> */ 
    </style> 
</head> 
<body> 
    <xf:group id="test" class="testing">Test</xf:group> 
</body> 

उत्तर

4

फ्रेंकी,

porneL के जवाब सही है - एक्सएचटीएमएल मोड में आप अलग अलग सीएसएस नियमों का उपयोग करने के लिए है, वहाँ क्योंकि @id@class के बारे में कुछ भी 'विशेष' नहीं है।

यहां तक ​​कि इस ज्ञान के साथ सशस्त्र भी, आपकी समस्याएं खत्म नहीं हुई हैं।:)

प्रलोभन बस एक साथ HTML और XHTML CSS चयनकर्ताओं रखा, और उन्हें एक ही नियम को लागू करने के हो सकता है:

@namespace xf url(http://www.w3.org/2002/xforms); 

xf\:input.surname, xf|input[class~="surname"] { 
    color: green; 
} 

हालांकि, एक और समस्या यह है कि आईई पूरे नियम की अनदेखी करेंगे, क्योंकि यह एक्सएचटीएमएल वाक्यविन्यास पसंद नहीं है। तो सर्वव्यापकता XForms के माध्यम से अटे पड़े तो आप इस तरह बातें देखेंगे:

@namespace xf url(http://www.w3.org/2002/xforms); 

xforms\:hint.active, xf\:hint.active { 
    display: inline; 
} 

xf|hint[class~="active"] { 
    display: inline; 
} 

आप देख सकते हैं हम अलग अलग चयनकर्ताओं के साथ स्टाइल को दोहराने के लिए किया है। (। यह कुछ हम एक समारोह बाहर सार शैली स्थापित कार्य तो फिर तुम सिर्फ एक ही नियम लिखने के लिए होगा करेंगी कि पता करने के लिए उम्मीद कर रहे हैं है।)

नोट अतिरिक्त चीजों की एक जोड़ी:

  • कि HTML नियम ':' को शाब्दिक चरित्र (इसलिए 'बचने के लिए' 'के रूप में उपयोग कर रहे हैं, और नामस्थानों के कुछ भी नहीं जानते हैं;
  • एक्सएचटीएमएल सीएसएस नियम '~ =' ऑपरेटर का उपयोग करते हैं, जिसका अर्थ है कि विशेषता में आवश्यक मान के बजाय निर्दिष्ट मान होना चाहिए।
+0

चूंकि मैं एक आंतरिक अनुप्रयोग विकसित कर रहा हूं, इसलिए मुझे ब्राउज़र आवश्यकताओं को सेट करने की अनुमति दी गई थी, इसलिए आईई कोई समस्या नहीं है (बेसलाइन फ़ायरफ़ॉक्स 3.6 और सफारी 4 है)। मैं उम्मीद कर रहा था कि मैं सभी शैलियों को संशोधित करने से बच सकता हूं, लेकिन ऐसा लगता है कि मेरे पास अधिक पसंद नहीं है। – Frankie

0

आप, कोई doctype, वर्ण एन्कोडिंग है आदि ये रहा:

इस को बदलें बिल्कुल:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 

<head> 
    <!--Always include character encoding and content-type--> 
    <meta http-equiv="Content-Type" content="application/xhtml+xml; charset=utf-8" /> 
</head> 
+0

मुझे लगता है कि मैं और अधिक स्पष्ट हो सकता था, लेकिन मैंने उनको शामिल नहीं किया क्योंकि वे मेरी समस्या के संबंध में कोई फर्क नहीं पड़ता। यहां तक ​​कि उस डॉक्टरेट या किसी अन्य एक्सएचटीएमएल या एचटीएमएल 5 डॉक्ट टाइप के साथ, समस्या बनी रहती है कि मैं #id और .classname css चयनकर्ताओं के साथ xhtml नेमस्पेस में नहीं तत्वों को स्टाइल तत्व नहीं कर सकता – Frankie

+0

मैंने यह भी पढ़ा है कि आपको एक डॉक्टरेट शामिल नहीं करना चाहिए यदि आप एप्लिकेशन/xhtml + xml के रूप में सामग्री की सेवा कर रहे हैं, लेकिन ऐसा लगता है कि उचित लोग इस विषय पर भिन्न हैं। मुझे वास्तव में किसी भी तरह से परवाह नहीं है, जब तक मुझे अपने सभी #idname को * | * [* | id = 'idname'] को सीएसएस में स्विच करने की आवश्यकता नहीं है या जो भी बकवास है उसे – Frankie

+0

की आवश्यकता होगी, t समझ। मैंने बस अपना सटीक कोड ड्रीमवेवर में कॉपी किया और शीर्ष को मेरे संस्करण के साथ बदल दिया और यह सफारी में पूरी तरह से ठीक काम किया, और फ़ायरफ़ॉक्स 3.5 (क्रोम, आईई 6, एट अल का परीक्षण नहीं किया)। – orokusaki

1

आपको #id/.class चयनकर्ताओं का उपयोग करने की आवश्यकता नहीं है। इसके बजाय आप इसका उपयोग कर सकते हैं:

[id=test] {} 
[class|=testing] {} 

जो समकक्ष हैं।

AFAIK क्लास HTML-विशिष्ट चीज़ है, और क्योंकि एक्सएमएल नेमस्पेस पूरी तरह से पागल हैं, एक्सएचटीएमएल विशेषताएँ एक्सएचटीएमएल नेमस्पेस में नहीं हैं! आप शायद इस के साथ भाग्य से बाहर हो।

आईडी के लिए आप xml:id आज़मा सकते हैं, लेकिन अगर मैंने वास्तव में इसका समर्थन किया है तो मैंने जांच नहीं की है।

मामले में आप namespaced तत्वों का मिलान करना चाहता था, कि CSS Namespaces साथ संभव है:

@namespace xf "http://www.w3.org/2002/xforms"; 
xf|group {} 
संबंधित मुद्दे

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