क्या मुझे छद्म तत्वों के लिए एकल या दोहरे बृहदान्त्र संकेतन का उपयोग करना चाहिए?


108

चूंकि IE7 और IE8 छद्म तत्वों (जैसे ::afterया ::first-letter) के लिए दोहरे-बृहदान्त्र संकेतन का समर्थन नहीं करते हैं , और चूंकि आधुनिक ब्राउज़र :afterपीछे की संगतता के लिए एकल-बृहदान्त्र संकेतन (जैसे ) का समर्थन करते हैं , तो क्या मुझे एकमात्र-बृहदान्त्र संकेतन का उपयोग करना चाहिए और कब IE8 की बाजार हिस्सेदारी एक नगण्य स्तर तक गिरती है और अपने कोड आधार को ढूंढ / बदल देती है? या क्या मुझे दोनों को शामिल करना चाहिए:

.foo:after,
.foo::after { /*styles*/ }

यदि मैं IE8 उपयोगकर्ताओं (खराब डियर्स) की परवाह करता हूं तो अकेले डबल का उपयोग करना मूर्खतापूर्ण लगता है।

जवाबों:


71

करो नहीं दोनों एक अल्पविराम के साथ संयुक्त का उपयोग करें। एक CSS 2.1 अनुरूप (CSS3 सक्षम नहीं) उपयोगकर्ता एजेंट पूरे नियम की अनदेखी करेगा:

जब एक उपयोगकर्ता एजेंट चयनकर्ता को पार्स नहीं कर सकता है (यानी, यह सीएसएस 2.1 वैध नहीं है), तो उसे चयनकर्ता और निम्नलिखित घोषणा ब्लॉक (यदि कोई हो) को भी अनदेखा करना चाहिए।

CSS 2.1 चयनकर्ताओं में अल्पविराम (,) का एक विशेष अर्थ देता है। हालांकि, चूंकि यह ज्ञात नहीं है कि सीएसएस के भविष्य के अपडेट में अल्पविराम अन्य अर्थों को प्राप्त कर सकता है, इसलिए चयनकर्ता में कहीं भी कोई त्रुटि होने पर पूरे विवरण को अनदेखा किया जाना चाहिए, भले ही बाकी चयनकर्ता सीएसएस 2.1 में उचित दिखें।

http://www.w3.org/TR/CSS2/syndata.html#rule-sets

हालाँकि आप उपयोग कर सकते हैं

.foo:after { /*styles*/ }
.foo::after { /*styles*/ }

दूसरी ओर यह आवश्यक से अधिक क्रिया है; अभी के लिए, आप एक-बृहदान्त्र संकेतन के साथ चिपक सकते हैं।


7
अल्पविराम और अनदेखी पर जानकारी शामिल करने के लिए धन्यवाद। कि शायद मुझे (और शायद दूसरों को) थोड़ी देर के लिए सिर खुजलाना पड़ा होगा। सबसे अच्छी चीज की तरह दिखता है जब उपयोग में 99% ब्राउज़र दोहरे बृहदान्त्र संकेतन का समर्थन करते हैं उस का उपयोग करने के लिए शिफ्ट करना और (क्योंकि कोई भी एकल उपनिवेश समर्थन को छोड़ देगा और वेब को नहीं तोड़ देगा, इसलिए वास्तव में बाद में ढूंढने में एक बिंदु भी नहीं है / उस बिंदु पर पुराने कोड को बदलें)।
22 अगस्त को jinglesthula

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

2
@Gershom Maes: यह आपके लिए दुर्भाग्य से कहने के लिए नहीं है। मुझे लगता है कि डेवलपर्स का एक बड़ा हिस्सा उसी के लिए आशा करता है, लेकिन यह सिर्फ होने वाला नहीं है।
BoltClock

@Gershom Maes हम सपने देख सकते हैं
James Cushing

1
मुझे लगता है कि यह ध्यान रखना महत्वपूर्ण है कि डुप्लिकेट शैलियों को बनाए रखना समस्याग्रस्त हो सकता है। नीचे के रूप में cHao नोट्स के रूप में, डुप्लिकेट कोड को अलग करना पसंद करता है। अधिकांश डेवलपर्स को शायद इसे कसम
खाने के

62

से CSS3 चयनकर्ता आरईसी :

यह :: नोटेशन वर्तमान दस्तावेज़ द्वारा छद्म वर्गों और छद्म तत्वों के बीच भेदभाव स्थापित करने के लिए पेश किया गया है।
मौजूदा स्टाइल शीट के साथ संगतता के लिए, उपयोगकर्ता एजेंटों को सीएसएस स्तरों 1 और 2 में पेश किए गए छद्म तत्वों के लिए पिछले एक-कोलन संकेतन को स्वीकार करना होगा (अर्थात्: पहली पंक्ति: पहला अक्षर: पहले और बाद में)। इस विनिर्देश में पेश किए गए नए छद्म तत्वों के लिए
इस संगतता की अनुमति नहीं है

ऐसा लगता है कि आप छद्म तत्वों के लिए (केवल) एक-कोलन संकेतन का उपयोग कर सुरक्षित हैं जो पहले से ही CSS2.1 में मौजूद है क्योंकि यूएएस पिछड़े संगत होना चाहिए।


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

आप उस निष्कर्ष पर किस तरह से पहुंचे? मैं विपरीत निष्कर्ष पर आया ... यदि नए कॉलोन्यूज़-तत्वों के लिए एकल कॉलोनों की अनुमति नहीं होगी , तो क्या आपको आदत में आने के लिए डबल कॉलोन का उपयोग शुरू नहीं करना चाहिए?
andrewtweber

मूल प्रश्न (IE8) के संदर्भ में @andrewtweber डबल का उपयोग करके सीएसएस को तोड़ देगा। उस ने कहा, इस लेखन के रूप में ज्यादातर साइटें शायद IE8 का उपयोग इतने निचले स्तर पर देखती हैं कि बिना किसी महत्वपूर्ण गिरावट के दोहरे की अनुमति देता है। ब्राउज़र विक्रेताओं को सदा के लिए एकल संकेतन का समर्थन करने के लिए भरोसा किया जा सकता है, लेकिन इस बिंदु पर कोडिंग की आदतों को बदलने के साथ कुछ भी गलत नहीं है।
jinglesthula

ओपी यीप के लिए @andrewtweber +1, IE8 को 2012 में ध्यान में रखा जाना था और YMMV - अभी भी 2015 में विशाल बी 2 बी परियोजनाओं और एक जैसे लेकिन अन्य वेब परियोजनाओं में नहीं है। दोनों सूचनाएं इन मौजूदा छद्मों के लिए पूरी तरह से मान्य हैं। सीएसएस मिनिफिकेशन एक-कोलन नोटेशन का उपयोग करके 1 बाइट प्राप्त करेगा। यदि आप हमेशा एक संकेतन का उपयोग करना चाहते हैं और दूसरे को मना करते हैं, तो यह अच्छी तरह से एक सम्मलेन है जिसे आप अपनी टीम के साथ करने के लिए पूरी तरह से स्वतंत्र हैं लेकिन यह एक RECOMendation नहीं है।
फेलिपएल्स

@jinglesthula और फेलिप, आप सही हैं, मैंने तारीख को नोटिस नहीं किया। हो सकता है कि उत्तर को अपडेट किया जाए, क्योंकि यह प्रश्न खोज परिणामों में उच्च आता है
andrewtweber

22

मैं एक कॉलन "सुरक्षित" के उपयोग पर विचार करने के संबंध में @mddw और @FelipeAls से बिल्कुल असहमत हूं।

यह "मैं इसका उपयोग करूंगा भले ही यह पदावनत हो" मानसिकता ठीक यही कारण है कि ब्राउज़र-आधारित प्रौद्योगिकियां आगे बढ़ने और आगे बढ़ने में इतनी धीमी हैं।

हाँ, हम पुराने मानकों के साथ संगतता बनाए रखना चाहते हैं। चलो इसका सामना करते हैं, यह वह हाथ है जिसे हम निपटा चुके हैं। लेकिन, इसका मतलब यह नहीं है कि आपके पास अपने विकास में आलसी होने का बहाना है, पदावनत के पक्ष में मौजूदा मानकों की अनदेखी करके।

जितना संभव हो उतना विरासत मानक का समर्थन करते हुए, वर्तमान मानकों के अनुपालन को बनाए रखना लक्ष्य होना चाहिए।

यदि :CSS2 और ::CSS3 में छद्म तत्व उपयोग करते हैं , तो हमें एक या दूसरे का उपयोग नहीं करना चाहिए; हमें दोनों का उपयोग करना चाहिए ।

पूछे गए मूल प्रश्न का पूरी तरह से उत्तर देने के लिए, सीएसएस (संस्करण 3) के सबसे वर्तमान कार्यान्वयन का समर्थन करने के लिए सबसे उपयुक्त तरीका है, जबकि संस्करण 2 के लिए विरासत का समर्थन बनाए रखना है।

.foo:after {
  /* styles */
}
.foo::after {
  /* same styles as above. */
}

3
मुझे लगता है कि यह मानना ​​बहुत ही सुरक्षित है कि ब्राउज़र विक्रेता पुराने नोटेशन का अनिश्चित काल तक समर्थन करते रहेंगे क्योंकि कोड की मात्रा वास्तविक रूप से कभी भी अपडेट नहीं होगी कि वे चाहते हैं कि उनका ब्राउज़र 'सही ढंग से' रेंडर करे। दूसरी ओर, शैलियों की अलग-अलग प्रतियों को बनाए रखने से DRY लाल झंडा उठता है, मुझे लगता है। मुझे लगता है कि यह IE7 बाजार में हिस्सेदारी बंद होने तक एकल-बृहदान्त्र संकेतन का उपयोग करने के लिए आलसी से अधिक व्यावहारिक है। उस ने कहा, मैं चाहता हूं कि वेब जितना भी आगे बढ़े!
22

9
आप "अगर पूरी तरह से सहमत नहीं हैं मेरे जवाब के साथ", तो आप पूरी तरह शब्द के साथ असहमति रहे हैं चाहिए एक W3C सिफारिश में। " आउट लक्ष्य को वर्तमान मानकों के अनुपालन को बनाए रखना चाहिए, जबकि संभव के रूप में विरासत मानक का अधिक से अधिक समर्थन करते हैं। " ऐसा क्या है जो आरईसी के इस हिस्से से संबोधित किया जा रहा है और यह स्पष्ट रूप से बताता है कि यूएएस को लेखकों को दोनों नोटेशन का उपयोग करने के लिए मजबूर नहीं करना चाहिए। और बताते हैं कि यह इन यूएएस द्वारा कैसे किया जाना चाहिए। सीएसएस डब्ल्यूजी मेलिंग-सूची से संपर्क करने के लिए स्वतंत्र महसूस करें यदि आप इसके साथ ठीक नहीं हैं (या ट्विटर @glazou इस वर्किंग ग्रुप के सह-अध्यक्ष हैं)
फेलिपएल्स

4
मैं आपके पूरे जवाब से असहमत नहीं हूं, केवल "सुरक्षित" के रूप में एक एकल बृहदान्त्र के उपयोग के बारे में। नए छद्म तत्वों के लिए संगतता की अनुमति नहीं है इसका मतलब है कि भविष्य के किसी भी छद्म तत्व को केवल उसी में लागू किया जाएगा ::। आपके दृष्टिकोण के अनुसार, लोग तब छद्म तत्वों के उपयोग :और मेल-मिलाप करना शुरू कर देंगे ::। स्पष्ट रूप से पुराने मानक का पालन करना (जो कि समय के लिए समर्थित हो सकता है), एक स्वाभाविक रूप से बुरा अभ्यास है और जब भी संभव हो, इससे बचना चाहिए। यदि आप उस कथन से असहमत हैं, तो हम बस अलग-अलग विचार रखते हैं।
यहोशू बर्न्स

4
यदि एक लक्ष्य है, तो स्पष्ट रूप से संगत मानक का पालन ​​करना स्वाभाविक रूप से एक बुरा अभ्यास नहीं है। दूसरी ओर, दोनों का उपयोग डुप्लिकेट शैलियों की ओर जाता है - और जैसा कि किसी को पता है कि थोड़ी देर के लिए कोडित किया गया है, डुप्लिकेट कोड केवल डायवर्ज करना पसंद करता है।
cHao

8
@JoshuaBurns यदि मेरे पूर्ववर्ती ने काल्पनिक भविष्य के खतरे से बचाने के लिए कोड के एक लोड को डुप्लिकेट किया था, तो मैं "अधिक खराब" महसूस करूंगा।
मार्क अमेरी

2

हालाँकि, यह नए जावास्क्रिप्ट और सीएसएस दोनों के लिए पॉलीफिल का उपयोग करने के लिए तेजी से लोकप्रिय हो रहा है , इसलिए आप नए डबल-कोलोन ( ::) सिंटैक्स का उपयोग करने के साथ चिपकना चाहते हैं, और पुराने ब्राउज़रों के लिए पॉलीफ़िल बनाए रख सकते हैं, इसलिए जब तक यह आवश्यक है।


यह अनिवार्य रूप से सिर्फ एक मेटा उत्तर है; यह कोई उपयोगी जानकारी प्रदान नहीं करता है। यदि कोई उत्तर पुराना है, तो इसे डाउनवोट करें और / या इस तरह का संकेत देने वाली टिप्पणी करें।
टायलरएच

2
क्यों नहीं इस तरह के पॉलीफ़िल को लिंक किया जाता है, इसलिए हम इसे बिना गॉगलिंग के उपयोग कर सकते हैं?
12 मई को माइटपॉर्क

4
एह, पहला भाग मेटा हो सकता है, लेकिन मुझे लगता है कि दूसरा भाग एक अच्छा जवाब है। जहां मैं काम करता हूं हम प्रीप्रोसेसर और / या पॉलीफिल का उपयोग नहीं करते हैं, इसलिए मेरे लिए स्वीकृत उत्तर काम करता है। लेकिन ऐसे उपकरण का उपयोग करने वाले किसी भी दुकान या देव के लिए, यह उत्तर संभवतः अधिक उपयोगी है।
jinglesthula

1

ब्राउज़र स्टैट्स IE 8.0 के अनुसार इसकी कीमत क्या है, यह पिछले एक साल में USA में 1% से भी कम हो गया है।

http://gs.statcounter.com/browser-version-partially-combined-market-share/desktop/united-states-of-america/#monthly-201512-201612

दिसंबर 2015 में IE 8.0 का बाजार में 2.92% हिस्सा था। दिसंबर 2016 में IE 8.0 का बाजार में .77% था ।

गिरावट की उस दर पर IE के पुराने संस्करणों का समर्थन बंद करने और छद्म तत्वों के लिए :: का उपयोग शुरू करने के लिए यह सबसे बुरा विचार नहीं होगा।


जो कुछ मनाने के लिए है :) यह भी इंगित करने योग्य है कि यह अभी भी स्थिति पर निर्भर करता है। यदि आप अमेज़ॅन हैं, तो आपके उपयोगकर्ताओं का 0.5% एक मिलियन से अधिक ग्राहकों के बराबर है जो सोचते हैं कि आपकी साइट टूट गई है। यदि आप 10 व्यक्ति स्टार्टअप के लिए ब्लॉग कर रहे हैं, तो दांव अलग हो सकता है।
जिंगलथूला

अमेज़ॅन जैसे संगठन के बारे में निश्चित रूप से सच है। लेकिन वह .77% पूरी आबादी में समान रूप से वितरित नहीं है। यह पुराने लोगों या कम पैसे वाले लोगों को अपग्रेड नहीं कर सकता है। विशुद्ध रूप से व्यावसायिक दृष्टिकोण से वे शायद आदर्श लक्ष्य बाजार नहीं हैं। तो ज्यादातर कंपनियों को .77% समूह उससे भी कम महत्वपूर्ण है जो उस छोटी संख्या से पता चलता है। और वह संख्या केवल छोटी हो जाएगी।
1901 को DR01D

अच्छे अंक। एक और समूह जहां उन्नयन एक कठिन लड़ाई है, सरकार और व्यावसायिक समूह उन ऐप्स पर बहुत अधिक निर्भर हैं जो केवल एक निश्चित ब्राउज़र संस्करण के साथ काम करेंगे (हालांकि शुक्र है कि इस तरह से समूह समय के साथ-साथ कम हो जाएंगे)। आप में से किसी को भी कभी ऐसे क्लाइंट के लिए कोड नहीं करना होगा :)
jinglesthula

0

दोनों संकेतनों को शामिल करना निश्चित रूप से सुरक्षित है, लेकिन मैं किसी भी ब्राउज़र को लंबे समय तक एकल संकेतन को छोड़ते हुए नहीं देख सकता, इसलिए केवल एक एकल ठीक रहेगा (यह वैध CSS2 है।)

व्यक्तित्व मैं केवल एकल बृहदान्त्र संकेतन का उपयोग करता हूं, ज्यादातर आदत से।


1
जैसा कि अन्य उत्तर स्पष्ट करते हैं, यह इससे थोड़ा अधिक जटिल है और कुछ गैर-स्पष्ट जाल हैं (उदाहरण के लिए CSS 3 छद्म तत्वों के लिए एकल-बृहदान्त्र संकेतन का समर्थन करना कल्पना का स्पष्ट उल्लंघन है, इसलिए यह CSS लेखकों के लिए बुद्धिमान नहीं लगता है उन चयनकर्ताओं के लिए एकल-बृहदान्त्र संकेतन का उपयोग करना)।
मार्क अमेरी
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.