अन्य HTML के साथ <body> में <style> टैग का उपयोग करना


195
<html>
  <body>
    <style type="text/css">
      p.first {color:blue}
      p.second {color:green}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>

    <style type="text/css">
      p.first {color:green}
      p.second {color:blue}
    </style>

    <p class="first">Hello World</p>
    <p class="second">Hello World</p>
  </body>
</html>

एक ब्राउज़र को css प्रदान करने वाला कैसे माना जाता है जो कि गैर सन्निहित है? क्या यह एक पृष्ठ पर सभी सीएसएस शैलियों का उपयोग करके कुछ डेटा संरचना उत्पन्न करना है और इसका उपयोग करना है?

या यह शैली जानकारी का उपयोग करके प्रस्तुत करता है जिस क्रम में यह देखता है?


2
मैं कहूंगा कि यह अपरिभाषित व्यवहार है क्योंकि यह मान्य HTML नहीं है। अधिक जानकारी के लिए कौन से तत्व मान्य हैं और कौन से नहीं हैं: en.wikipedia.org/wiki/HTML_element
फेलिक्स क्लिंग

2
एक तरफ इस समस्या को लाना है, यह एक बुरा व्यवहार अप मिश्रण है CSSऔर HTML
0x2D9A3

1
@ 0x2D9A3 जरूरी नहीं कि सच हो। सीएसएस की तुलना में बाहरी सीएसएस पेज का अनुरोध करने में अधिक समय लगता है जो <head>टैग में परिभाषित किया गया है
कोलोब कैनियन

@KolobCanyon सहमत हैं, लेकिन एक सामान्य नियम के रूप में, सीएसएस एक अलग फाइल में होना चाहिए। यदि आपके पास CSS का टन है, तो इसे प्रबंधित करना (बनाए रखना, (पोस्ट-) प्रसंस्करण, खनन, बंडलआईएनजी) दोनों अलग करना आसान है और एक अलग फ़ाइल के रूप में काम करता है, और आपकी सामग्री (HTML) तेजी से लोड हो सकती है, जिससे बेहतर UX हो सकता है। हालांकि, हमेशा विकास के साथ, सब कुछ संदर्भ-विशिष्ट है, इसलिए YMMW :)
0x2D9A3

3
@KolobCanyon, यह इस बात का मुद्दा नहीं है कि क्या सीएसएस एक अलग फाइल में होना चाहिए। इस मामले में सवाल सीएसएस के <body>बजाय के बारे में है <head>
रे बटरवर्थ

जवाबों:


312

जैसा कि दूसरों ने पहले ही उल्लेख किया है, एचटीएमएल 4 को <style>टैग को <head>अनुभाग में रखने की आवश्यकता है (भले ही अधिकांश ब्राउज़र <style>टैग के भीतर अनुमति देते हैं body)।

हालांकि, एचटीएमएल 5 में scopedविशेषता शामिल है (नीचे अपडेट देखें), जो आपको स्टाइल शीट बनाने की अनुमति देता है जो <style>टैग के मूल तत्व के भीतर स्कूप किए गए हैं । यह आपको तत्व के <style>भीतर टैग लगाने में सक्षम बनाता है <body>:

<!DOCTYPE html>
<html>
<head></head>
<body>

<div id="scoped-content">
    <style type="text/css" scoped>
        h1 { color: red; } 
    </style>

    <h1>Hello</h1>
</div>

    <h1>
      World
    </h1>

</body>
</html>

यदि आप HTML-5 सक्षम ब्राउज़र में उपर्युक्त कोड का समर्थन करते हैं scoped, तो आपको स्टाइल शीट का सीमित दायरा दिखाई देगा।

वहाँ सिर्फ एक प्रमुख चेतावनी है ...

जिस समय मैं यह उत्तर (मई, 2013) लिख रहा हूं, वर्तमान में लगभग कोई मुख्यधारा का ब्राउज़र scopedविशेषता का समर्थन नहीं करता है । (हालांकि स्पष्ट रूप से डेवलपर क्रोमियम का समर्थन करता है)

फिर भी, scopedइस सवाल से संबंधित विशेषता का एक दिलचस्प निहितार्थ है । इसका मतलब है कि भविष्य के ब्राउज़रों को मानकों के माध्यम से अनिवार्य किया जाता है ताकि <style>तत्वों को <body>(जब तक <style>तत्वों को बंद कर दिया जाता है ) अनुमति दी जा सके ।)

तो, यह देखते हुए कि:

  • वर्तमान में लगभग हर मौजूदा ब्राउज़र scopedविशेषता को अनदेखा करता है
  • लगभग हर मौजूदा ब्राउज़र वर्तमान में <style>टैग की अनुमति देता है<body>
  • भविष्य के कार्यान्वयन के लिए (स्कोप) <style>टैग की अनुमति देना आवश्यक होगा<body>

... तो शरीर के भीतर टैग रखने में शाब्दिक रूप से कोई नुकसान नहीं<style> होता है, जब तक कि आप भविष्य को एक scopedविशेषता के साथ सबूत देते हैं। एकमात्र समस्या यह है कि वर्तमान ब्राउज़र वास्तव में स्टाइलशीट के दायरे को सीमित नहीं करेंगे - वे इसे पूरे दस्तावेज़ पर लागू करेंगे। लेकिन मुद्दा यह है कि, सभी व्यावहारिक उद्देश्यों के लिए, आप टैग प्रदान कर सकते हैं <style>, <body>बशर्ते कि आप:

  • scopedविशेषता को शामिल करके अपने HTML को भविष्य-प्रूफ करें
  • समझें कि अब तक, <body>वास्तव में वसीयत के भीतर की स्टाइलशीट को स्कोप नहीं किया जाएगा (क्योंकि मुख्यधारा का कोई ब्राउज़र समर्थन अभी तक मौजूद नहीं है)


* HTML सत्यापनकर्ताओं को बंद करने के लिए पाठ्यक्रम को छोड़कर ...


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


फरवरी 2019 तक अपडेट करें, मोज़िला प्रलेखन के अनुसार , scopedविशेषता को पदावनत किया जाता है। Chrome ने संस्करण 62 (2018) और फ़ायरफ़ॉक्स में 62 (2018) संस्करण में इसका समर्थन करना बंद कर दिया। दोनों ही मामलों में, इस सुविधा को ब्राउज़र की सेटिंग में उपयोगकर्ता द्वारा स्पष्ट रूप से सक्षम किया जाना था। किसी अन्य प्रमुख ब्राउज़र ने कभी इसका समर्थन नहीं किया।


3
@RobertMcKee: क्या आपने वास्तव में परीक्षण किया है? मुझे उम्मीद है कि आमतौर पर पूरे HTML पृष्ठ (सभी इनलाइन शैली सहित) को रेंडर करने से पहले पार्स किया जाता है, क्योंकि आमतौर पर यह बहुत बड़ा नहीं होता है और ब्राउज़र एक (बहुत कम) प्रतीक्षा करते हैं, जबकि फ्लैश-ऑफ-अनस्टाइल कंटेंट से बचने के लिए ठीक से रेंडर करने से पहले में जुड़े सीएसएस के कारण headयदि यह आपकी एकमात्र सीएसएस है, और यदि पृष्ठ बड़ा है और यदि नेटवर्क कनेक्शन बहुत तेज़ नहीं है, तो शायद आप बिना सामग्री के फ्लैश देखेंगे, लेकिन यह मुझे अधिकांश व्यावहारिक स्थितियों में आश्चर्यचकित करेगा।
Eamon Nerbonne

4
आज तक, केवल फ़ायरफ़ॉक्स स्कॉप्ड स्टाइल एलिमेंट ( caniuse.com/#feat=style-scoped के अनुसार ) का समर्थन करता है । और चूँकि आम ब्राउज़र BODY के अंदर केवल STYLE तत्व का समर्थन करते हैं, मैं ज़रूरत पड़ने पर इसका इस्तेमाल करूँगा। यदि सीएसएस को एक दायरे में लागू किया जाना चाहिए, तो आप बस एक आवरण के आईडी / वर्ग के साथ सीएसएस स्रोत में प्रत्येक चयनकर्ता को उपसर्ग कर सकते हैं। मैंने वास्तव में एक वेब ऐप में ऐसा किया था जो HTML रिपोर्ट को सर्वर-साइड लोड करता था और उन्हें AJAX के माध्यम से प्रस्तुत करता था। CSS को फिर जावास्क्रिप्ट में सरल रीजेक्स के साथ उपसर्ग किया जा सकता है: cssString.replace (/ (^> \ _) ([^ {] + (({{) / g, '$ 1' + उपसर्ग + '$ 2% 3')
एडम

5
के लिए समर्थन @scoped, या scopedबाहर मर रहा है लगता है: यहाँ और यहाँ
किरण सुब्बरमन

51
@KiranSubbaraman का समर्थन: मैंने मोज़िला देव पर अभी (जुलाई 2016) पढ़ा है: " क्रोम और फ़ायरफ़ॉक्स द्वारा केवल सीमित और प्रयोगात्मक गोद लेने के बाद स्कोप्ड विशेषता को विनिर्देश से हटा दिया गया हैआपको इसका उपयोग करने से बचना चाहिए , क्योंकि यह लगभग निश्चित रूप से होगा। इन ब्राउज़रों से जल्द ही हटा दिया जाएगा। " >> developer.mozilla.org/en-US/docs/Web/HTML/Element/…
jave.web

9
scopedविशेषता वर्तमान एचटीएमएल 5 विनिर्देशों से हटा दिया गया।
अल्बर्ट वायर्सच

61

ब्रेकिंग बैड न्यूज के लिए "शैली शरीर में" प्रेमियों: W3C हाल ही में किया गया है एचटीएमएल युद्ध हार WHATWG, जिसका versionless एचटीएमएल "लिविंग स्टैंडर्ड" के खिलाफ अब बन गया है आधिकारिक है, जो, अफसोस, करता नहीं की अनुमति देने STYLE में BODY। अल्पकालिक सुखी दिन खत्म हो गए हैं। ;) W3C सत्यापनकर्ता भी अब WHATWG चश्मा द्वारा काम करता है। (साभार @FrankConijn हेड-अप के लिए!)

(नोट: यह "आज के रूप में" मामला है, लेकिन चूंकि कोई संस्करण नहीं है, लिंक नोटिस या नियंत्रण के किसी भी क्षण अमान्य हो सकते हैं। जब तक आप इसके व्यक्तिगत स्रोत से लिंक करने के लिए तैयार नहीं होते हैं, तब तक आप मूल रूप से नहीं कर सकते। अब नए आधिकारिक HTML मानक , AFAIK को स्थिर संदर्भ दें । कृपया मुझे ठीक करें अगर यह ठीक से करने का एक विहित तरीका है।)

OBSOLETED GOOD NEWS:

Yay, HTML5.2 के रूप STYLEमें अंत में मान्य है BODY! (और scopedचला गया है, भी)

से W3C चश्मा ( अंतिम पंक्ति स्वाद! ):

4.2.6। शैली तत्व

...

ऐसे तत्व जिनमें इस तत्व का उपयोग किया जा सकता है:

जहां मेटाडेटा सामग्री अपेक्षित है।

एक नासिका तत्व में जो एक सिर तत्व का एक बच्चा है।

शरीर में, जहां प्रवाह सामग्री अपेक्षित है।


मेटा साइड-नोट:

मात्र तथ्य यह है कि "ब्राउज़र युद्ध" के नुकसान के बावजूद हमें अभी भी दो हास्यास्पद प्रतिस्पर्धा "आधिकारिक" एचटीएमएल "मानकों" (उद्धरण के लिए 1 standard + 1 standard < 1 standard) के खिलाफ विकसित होते रहना था, जिसका अर्थ है कि "सामान्य ज्ञान के लिए वापसी" वेब विकास वास्तव में कभी लागू नहीं हुआ है।

यह अंततः बदल सकता है, लेकिन पारंपरिक ज्ञान का हवाला देते हुए: वेब लेखक / डेवलपर्स और इस प्रकार, बदले में, ब्राउज़रों को अंततः यह तय करना चाहिए कि विनिर्देशों में क्या होना चाहिए (और नहीं होना चाहिए), जब पहले से ही किया गया है, तो इसके खिलाफ कोई अच्छा कारण नहीं है वास्तविकता। और अधिकांश ब्राउज़रों ने लंबे समय से समर्थन STYLEकिया है BODY(एक तरह से या किसी अन्य में; उदाहरण के लिए scopedएट्री देखें ।), इसके अंतर्निहित प्रदर्शन (और संभवतः अन्य) के दंड के बावजूद (जिसे हमें भुगतान करना चाहिए या नहीं, चश्मा नहीं।)। इसलिए, एक के लिए, मैं उन पर दांव लगाता रहूंगा, और आशा नहीं छोड़ूंगा। ;) अगर WHATWG का वास्तविकता / लेखकों के लिए उतना ही सम्मान है जितना वे दावा करते हैं, वे शायद यहाँ वही कर रहे हैं जो W3C ने किया था।


3
मैं चश्मा पढ़ता हूं, लेकिन समझ नहीं आता। क्या आप किसी styleब्लॉक के उदाहरण bodyको मान्य कर सकते हैं?
फ्रैंक कॉनिजन

3
@FrankConijn: अच्छी बात है, चीजें बदलीं, जवाब अपडेट हुआ! यह वाकई भ्रामक है। 5.2 और 5.3 W3C दोनों चश्मा STYLEमेटाडेटा और प्रवाह सामग्री के रूप में व्यवहार करते हैं , लेकिन नवीनतम WHATWG "जीवित" कल्पना पुराने, उबाऊ "मेटाडाटा केवल" कहानी (इसे केवल हेड में अनुमति देता है) बताती है। और, चोट के अपमान को जोड़ने के लिए, W3C सत्यापनकर्ता WHATWG स्वाद का पालन करता है। मैंने अभी तक तय नहीं किया है कि क्या हंसना है या रोना है, लेकिन निश्चित रूप से "ब्राउज़रों + डब्ल्यू 3 सी - सत्यापनकर्ता" मामले के साथ "गलत" करने का फैसला किया है, और बॉडी में स्टाइल की अनुमति दें। (BTW, मत भूलना: हम वास्तव में मानक का अंतिम स्रोत होना चाहिए ।)
एसजे

मुझे वास्तव में लगता है कि उन्होंने इस बकवास के साथ शार्क को कूद दिया, वे मूल रूप से लाइन शैलियों में उपयोग करने के अलावा कोई विकल्प नहीं छोड़ते हैं यदि आप एक टेम्पर्ड सिस्टम में एक पृष्ठभूमि छवि संपत्ति को गतिशील रूप से सेट करना चाहते हैं। यह आपके HTML आउटपुट के ठीक ऊपर एक प्रोग्रामेटिक रूप से उत्पन्न स्टाइल ब्लॉक को छोड़ने के लिए बहुत कम आक्रामक था।
GovCoder

32

जब मैं देखता हूं कि बड़े-साइट कंटेंट मैनेजमेंट सिस्टम ने नियमित रूप से कुछ <style> एलिमेंट्स (कुछ, सभी नहीं) को उन सामग्रियों के करीब रखा है जो उन कक्षाओं पर निर्भर करते हैं, तो मैं निष्कर्ष निकालता हूं कि घोड़ा खलिहान से बाहर है।

Cnn.com, nytimes.com, huffingtonpost.com, आपके निकटतम बड़े शहर के समाचार पत्र आदि के पृष्ठ स्रोतों को देखें, ये सभी ऐसा करते हैं।

यदि शरीर में कहीं और एक अतिरिक्त <style> अनुभाग डालने का एक अच्छा कारण है - उदाहरण के लिए यदि आप शामिल हैं (तो) वास्तविक समय में विविध और स्वतंत्र पृष्ठ तत्व शामिल हैं और प्रत्येक की अपनी एक अंतर्निहित <शैली> है, और संगठन क्लीनर होगा, अधिक मॉड्यूलर, अधिक समझने योग्य और अधिक बनाए रखने योग्य - मैं कहता हूं कि बस गोली काटो। यकीन है कि बेहतर होगा कि हम "स्थानीय" शैली को सीमित दायरे के साथ, स्थानीय चर की तरह ले सकते हैं, लेकिन आपके पास HTML के साथ काम करने के लिए जाते हैं, न कि HTML जिसे आप चाहते हैं या बाद के समय में चाहते हैं।

बेशक, संभावित कमियां हैं और अच्छे (यदि हमेशा मजबूर नहीं) रूढ़िवादी का पालन करने के कारण हैं, जैसा कि अन्य ने विस्तार से बताया है। लेकिन मेरे लिए यह अधिक से अधिक विचारशील उपयोग की तरह लगता है <शैली> में <शरीर> पहले से ही मुख्यधारा में चला गया है।


1
व्यावहारिकता FTW!
वारुयामा

1
हाँ तुम सही हो। उदाहरण के तौर पर मैं अपने प्लगइन के अंदर <body> <body> टैग का उपयोग करता हूं। क्यों, क्योंकि यह स्टाइलिश प्लगइन सामग्री का सबसे आसान तरीका है। लेकिन एक पल, सभी सीएसएस कक्षाएं मेरे प्लगइन डेटा के लिए अप्रयुक्त हैं।
Avirtum

7

मान्य HTML नहीं है, वैसे भी हर ब्राउज़र पर केवल दूसरा उदाहरण माना जाता है।

फेडोरा और एफएफ, ओपेरा, आईई और क्रोम के तहत एफएफ और गूगल क्रोम के अंतिम संस्करणों के तहत परीक्षण किया गया।


6

मुझे लगता है कि यह ब्राउज़र से ब्राउज़र के लिए अलग-अलग होगा: वैश्विक प्रदर्शन नियमों को संभवतः अपडेट किया जाएगा क्योंकि ब्राउज़र कोड के माध्यम से जाता है।

वैश्विक प्रदर्शन नियमों में आप कभी-कभी ऐसे बदलाव देख सकते हैं जब किसी बाहरी शैली की शीट को देरी से लोड किया जाता है। यहाँ कुछ ऐसा ही हो सकता है लेकिन इतने कम उत्तराधिकार में कि वास्तव में इसका प्रतिपादन नहीं हो पाता।

यह वैसे भी मान्य HTML नहीं है, इसलिए मैं कहूंगा कि यह सोचना एक निरर्थक बात है। <style>टैग headपृष्ठ के अनुभाग में हैं।


5

जैसा कि दूसरों ने कहा है, यह मान्य HTML नहीं है क्योंकि स्टाइल टैग सिर में हैं।

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


5

<style>टैग में अंतर्गत आता है <head>अनुभाग में, सभी सामग्री से अलग।

संदर्भ: W3C चश्मा और W3Schools


52
प्रश्न को संबोधित नहीं करता है। और उन कठोर दिशा-निर्देशों को वास्तविकता से परे कर दिया गया है। MANY के मामले हैं जहां लेखकों के लिए html शैली में उनकी शैली को परिभाषित / शामिल करना संभव नहीं है।
जेवियर

3
यह 2010 में सच हो सकता है, लेकिन यह आज एक स्वीकार्य जवाब से दूर है।
इसहाक लुबो

3

आपके उदाहरण में, एक ब्राउज़र कुछ भी करने के लिए "माना" नहीं जाता है। HTML अमान्य है। या तो त्रुटि रिकवरी शुरू हो जाती है, या पार्सर इसे जैसा चाहे वैसा बना देता है।

एक वैध उदाहरण में, कई स्टाइलशीट को एक के बाद एक प्रदर्शित होने के रूप में माना जाता है, कैस्केड की सामान्य रूप से गणना की जाती है।


2

मुझे लगता है कि यह सीमित संदर्भों के बारे में एक मुद्दा हो सकता है, उदाहरण के लिए एक वेब सिस्टम पर WYIWYG संपादकों का उपयोग किया जाता है , जो प्रोग्रामर उपयोगकर्ताओं द्वारा उपयोग नहीं किया जाता है , जो मानकों के पालन की संभावनाओं को सीमित करता है। कभी-कभी (TinyMCE की तरह), यह एक ऐसा textareaटैग है जो आपकी सामग्री / कोड को टैग के अंदर रखता है , जिसे संपादक द्वारा एक बड़े divटैग के रूप में प्रस्तुत किया जाता है । और कभी-कभी, यह इन संपादकों का पुराना संस्करण हो सकता है।

मैं मान रहा हूँ कि:

  1. ये नहीं-प्रोग्रामर उपयोगकर्ताओं के पास सिस्टम एडिंस (या संस्थान के वेबदेव) के साथ एक खुला चैनल नहीं है, सिस्टम के कुछ सीएसएस नियमों को शामिल करने के लिए कहने के लिए stylesheets। वास्तव में, यह इस तरह से अनुरोधों की संख्या को देखते हुए कि वे होगा, इस तरह के प्रवेशकों (या वेबदेवों) के लिए अव्यावहारिक होगा।
  2. यह प्रणाली विरासत है और अभी भी HTML के नए संस्करणों का समर्थन नहीं करती है।

कुछ मामलों में, उपयोग के styleनियमों के बिना , यह बहुत खराब डिजाइन अनुभव हो सकता है। तो, हाँ, इन उपयोगकर्ताओं को अनुकूलन की आवश्यकता है। ठीक है, लेकिन इस परिदृश्य में, समाधान क्या होगा? एक htmlपृष्ठ में सीएसएस डालने के विभिन्न तरीकों को ध्यान में रखते हुए , मुझे लगता है कि ये समाधान हैं:


पहला विकल्प: अपने sysadm से पूछें

सिस्टम में कुछ सीएसएस नियमों को शामिल करने के लिए अपने सिस्टम की प्रशंसा के लिए पूछें stylesheets । यह एक बाहरी या आंतरिक सीएसएस समाधान होगा। जैसा कि पहले ही कहा गया है, यह संभव नहीं हो सकता है।


दूसरा विकल्प: <link> पर<body>

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

एक <link>तत्व या तो तत्व <head>या <body>तत्व में हो सकता है , यह इस बात पर निर्भर करता है कि क्या उसका लिंक प्रकार शरीर-ठीक है । उदाहरण के लिए, stylesheetलिंक प्रकार शरीर-ठीक है, और इसलिए <link rel="stylesheet">शरीर में इसकी अनुमति है। हालांकि, यह पालन करने के लिए एक अच्छा अभ्यास नहीं है; यह आपके को अलग करने के लिए अधिक समझ में आता है<link> तत्वों को आपके शरीर की सामग्री से है, उन्हें अंदर डाल रहा है <head>

कुछ अन्य, इसे <head>अनुभाग में प्रतिबंधित करते हैं , जैसे w3schools :

ध्यान दें: यह तत्व केवल हेड सेक्शन में जाता है, लेकिन यह किसी भी समय दिखाई दे सकता है।

परिक्षण

मैंने इसे यहां (डेस्कटॉप वातावरण, एक ब्राउज़र पर) परीक्षण किया और यह मेरे लिए काम करता है। एक फ़ाइल बनाएँ foo.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <link href="bar.css" type="text/css" rel="stylesheet">
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
</body>
</html>

और फिर एक सीएसएस फ़ाइल, उसी निर्देशिका में, जिसे कहा जाता है bar.css:

.test1 { 
    color: green;
};

ठीक है, यह सिर्फ तभी संभव होगा जब आपके पास संस्था प्रणाली में कहीं सीएसएस फ़ाइल अपलोड हो। शायद यह मामला होगा।


तीसरा विकल्प: <style>पर<body>

टैग पर इंटरनेट स्टाइल शीट का उपयोग करें body, यानी, styleआपके पास जिस क्षेत्र में पहुंच है, उसके अंदर bodyटैग का उपयोग करें (जो साइट पर, टैग के अंदर और टैग में नहीं होगा head)। यह वही है जिसके बारे में चार्ल्स साल्विया और एसजे के उत्तर यहां दिए गए हैं। इस विकल्प को चुनना, उनकी चिंताओं पर विचार करें।


4 वें, 5 वें और 6 वें विकल्प: जेएस तरीके

चेतावनी ये <head>पृष्ठ के तत्व को संशोधित करने से संबंधित हैं । हो सकता है कि संस्थान के सिस्टम प्रशासकों द्वारा इसकी अनुमति नहीं होगी । इसलिए, उन्हें पहले अनुमति मांगने की सलाह दी जाती है।

ठीक है, दी गई अनुमति को दबाते हुए, रणनीति तक पहुंच है <head> । कैसे? जावास्क्रिप्ट विधियों।

चौथा विकल्प: नया <link>पर<head>

यह दूसरा विकल्प का दूसरा संस्करण है। टैग पर बाहरी शैली की शीट का उपयोग करें <head>, अर्थात, आपके द्वारा उपयोग किए जाने वाले क्षेत्र के बाहर<link> तत्व का उपयोग करें (जो कि साइट पर होगा, टैग के अंदर नहीं और टैग के अंदर हां )। यह समाधान MDN और w3schools की सिफारिशों का अनुपालन करता है , जैसा कि ऊपर बताया गया है, दूसरा विकल्प समाधान पर। एक नई वस्तु बनाई जाएगी।bodyheadLink

जेएस के माध्यम से मामले को हल करने के लिए, कई तरीके हैं लेकिन निम्नलिखित कोडलाइन पर मैं एक सरल प्रदर्शित करता हूं।

परिक्षण

मैंने इसे यहां (डेस्कटॉप वातावरण, एक ब्राउज़र पर) परीक्षण किया और यह मेरे लिए काम करता है। एक फ़ाइल बनाएँ f.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
        // JS code here
    </script>
</body>
</html>

scriptटैग के अंदर :

var newLink = document.createElement("link");
newLink.href = "bar.css";
newLink.rel = "stylesheet";
newLink.type = "text/css";
document.getElementsByTagName("head")[0].appendChild(newLink);

और फिर CSS फ़ाइल में, उसी निर्देशिका में, जिसे bar.css(दूसरे विकल्प पर) कहा जाता है :

.test1 { 
    color: green;
};

जैसा कि मैंने पहले ही कहा है: यह केवल तभी संभव होगा जब आपके पास संस्था प्रणाली में कहीं सीएसएस फ़ाइल अपलोड हो।

5 वां विकल्प: नया <style>ऑन<head>

टैग पर नई आंतरिक शैली शीट का उपयोग करें <head>, अर्थात, आपके पास पहुंच वाले क्षेत्र के बाहर एक नए <style>तत्व का उपयोग करें (जो साइट पर होगा, टैग के अंदर नहीं और टैग के अंदर हां )। एक नई वस्तु बनाई जाएगी।bodyheadStyle

इसे JS के माध्यम से हल किया गया है। एक सरल तरीका निम्नलिखित दर्शाया गया है।

परिक्षण

मैंने इसे यहां (डेस्कटॉप वातावरण, एक ब्राउज़र पर) परीक्षण किया और यह मेरे लिए काम करता है। एक फ़ाइल बनाएँ foobar.html:

<!DOCTYPE html>
<html>
<head></head>
<body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
        // JS code here
    </script>
</body>
</html>

scriptटैग के अंदर :

var newStyle = document.createElement("style");
newStyle.innerHTML = 
    "h1.test1 {"+
        "color: green;"+
    "}";
document.getElementsByTagName("head")[0].appendChild(newStyle);

6 विकल्प: किसी मौजूदा का उपयोग कर <style>पर<head>

टैग पर मौजूदा आंतरिक शैली की शीट का उपयोग करें <head>, अर्थात, आपके पास पहुंच वाले क्षेत्र के बाहर एक <style>तत्व का उपयोग (जो साइट पर होगा, टैग के अंदर नहीं और हां टैग के अंदर ), यदि कुछ मौजूद है। एक नई वस्तु बनाई जाएगी या एक वस्तु का उपयोग किया जाएगा (यहां अपनाए गए समाधान के कोड में)।bodyheadStyleCSSStyleSheet

यह जोखिम भरा है। पहला , क्योंकि यह किसी <style> वस्तु में मौजूद नहीं हो सकता है । इस समाधान को लागू करने के तरीके के आधार पर, आपको undefinedरिटर्न मिल सकता है (सिस्टम बाहरी स्टाइल शीट का उपयोग कर सकता है )। दूसरा , क्योंकि आप सिस्टम डिज़ाइन लेखक के काम (लेखक के मुद्दों) का संपादन करेंगे। तीसरा , क्योंकि यह आपके संस्थान की सुरक्षा की आईटी राजनीति में अनुमति नहीं दी जा सकती है। तो, ऐसा करने के लिए अनुमति मांगें (अन्य जेएस समाधान में)

मान लेना, फिर से अनुमति मिल गई:

आप इस तरह से करने के लिए विधि उपलब्ध कुछ प्रतिबंध पर विचार करना होगा: insertRule()। प्रस्तावित समाधान डिफ़ॉल्ट परिदृश्य का उपयोग करता है, और पहली बार एक ऑपरेशन stylesheet, अगर कुछ मौजूद है।

परिक्षण

मैंने इसे यहां (डेस्कटॉप वातावरण, एक ब्राउज़र पर) परीक्षण किया और यह मेरे लिए काम करता है। एक फ़ाइल बनाएँ foo_bar.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1 class="test1">Hello</h1>
    <h1 class="test2">World</h1>
    <script>
      // JS code here
    </script>
  </body>
</html>

scriptटैग के अंदर :

function demoLoop(){ // remove this line
    var elmnt = document.getElementsByTagName("style");
    if (elmnt.length === 0) {
        // there isn't style objects, so it's more interesting create one
        var newStyle = document.createElement("style");
        newStyle.innerHTML =
            "h1.test1 {" +
                "color: green;" +
            "}";
        document.getElementsByTagName("head")[0].appendChild(newStyle);
    } else {
        // Using CSSStyleSheet interface
        var firstCSS = document.styleSheets[0];
        firstCSS.insertRule("h1.test2{color:blue;}"); // at this way (without index specified), will be like an Array unshift() method
    }
} // remove this too
demoLoop(); // remove this too
demoLoop(); // remove this too

इस समाधान के लिए एक और दृष्टिकोण यह CSSStyleDeclarationऑब्जेक्ट ( w3schools और MDN पर डॉक्स ) का उपयोग कर रहा है । लेकिन यह दिलचस्प नहीं हो सकता है, सिस्टम के सीएसएस पर मौजूदा नियमों को ओवरराइड करने के जोखिम को देखते हुए।


7 वां विकल्प: इनलाइन सीएसएस

इनलाइन सीएसएस का उपयोग करें । यह समस्या को हल करता है, हालांकि पृष्ठ आकार (कोड लाइनों में) के आधार पर, कोड के रखरखाव (लेखक स्वयं या अन्य असाइन किए गए व्यक्ति द्वारा) बहुत मुश्किल हो सकता है।

लेकिन संस्थान, या इसकी वेब सिस्टम सुरक्षा नीतियों में आपकी भूमिका के संदर्भ के आधार पर, यह आपके लिए अद्वितीय उपलब्ध समाधान हो सकता है।

परिक्षण

एक फ़ाइल बनाएँ _foobar.html:

<!DOCTYPE html>
<html>
  <head></head>
  <body>
    <h1 style="color: green;">Hello</h1>
    <h1 style="color: blue;">World</h1>    
  </body>
</html>

गगन द्वारा पूछे गए प्रश्न का कड़ाई से उत्तर देना

एक ब्राउज़र को css प्रदान करने वाला कैसे माना जाता है जो कि गैर सन्निहित है?

  1. क्या यह एक पृष्ठ पर सभी सीएसएस शैलियों का उपयोग करके कुछ डेटा संरचना उत्पन्न करना है और इसका उपयोग करना है?
  2. या यह शैली जानकारी का उपयोग करके प्रस्तुत करता है जिस क्रम में यह देखता है?

(बोली अनुकूलित)

अधिक सटीक उत्तर के लिए, मैं Google को ये लेख सुझाता हूं:

  • ब्राउज़र कैसे काम करता है: आधुनिक वेब ब्राउज़रों के दृश्यों के पीछे
  • रेंडर-ट्री कंस्ट्रक्शन, लेआउट और पेंट
  • एक वेबपेज पर "रेंडर" करने का क्या मतलब है?
  • ब्राउज़र रेंडरिंग कैसे काम करता है - पर्दे के पीछे
  • प्रतिपादन - HTML मानक
  • 10 प्रतिपादन - एचटीएमएल 5

+1 स्क्रिप्ट टैग सहित अच्छा विचार और सीएसएस जोड़ने के लिए जावास्क्रिप्ट का उपयोग करें, गूंगा WYSIWYG सीएमएस संपादकों के लिए पूरी तरह से कानूनी HTML
djolf

1

क्योंकि यह HTML मान्य नहीं है, इसका परिणाम पर कोई प्रभाव नहीं पड़ता है ... इसका मतलब यह है कि HTML मानक का पालन करता है (केवल संगठनात्मक उद्देश्यों के लिए)। मान्य होने के लिए इसे इस तरह लिखा जा सकता था:

<html>
<head>
<style type="text/css">
  p.first {color:blue}
  p.second {color:green}
</style>
</head>
<body>
<p class="first" style="color:green;">Hello World</p>
<p class="second" style="color:blue;">Hello World</p>

मेरा अनुमान है कि ब्राउज़र उस अंतिम शैली को लागू करता है जो उसके पार आती है।


हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.