सीएसएस विस्फोट का प्रबंधन


682

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

लेकिन अब समस्या यह है कि मैंने देखा है कि मुझे "सीएसएस धमाका" मिल रहा है। मेरे लिए यह तय करना मुश्किल हो रहा है कि CSS फ़ाइल के भीतर डेटा को कैसे व्यवस्थित और अमूर्त किया जाए।

मैं divवेबसाइट के भीतर बड़ी संख्या में टैग का उपयोग कर रहा हूं , एक भारी तालिका-आधारित वेबसाइट से चल रहा है। इसलिए मुझे बहुत सारे CSS चयनकर्ता मिल रहे हैं जो इस तरह दिखते हैं:

div.title {
  background-color: blue;
  color: white;
  text-align: center;
}

div.footer {
  /* Styles Here */
}

div.body {
  /* Styles Here */
}

/* And many more */

यह अभी तक बहुत बुरा नहीं है, लेकिन जैसा कि मैं एक शुरुआती हूं, मैं सोच रहा था कि क्या सीएसएस फ़ाइल के विभिन्न हिस्सों को व्यवस्थित करने के लिए सबसे अच्छा सुझाव दिया जा सकता है। मैं अपनी वेबसाइट पर हर तत्व के लिए एक अलग सीएसएस विशेषता नहीं रखना चाहता हूं, और मैं हमेशा चाहता हूं कि सीएसएस फ़ाइल काफी सहज और पढ़ने में आसान हो।

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


122
यह एक बड़ा सवाल है, लेकिन कई कंपनियों के लिए वास्तव में एक बहुत ही बेकार समस्या है। जिसका मुख्य कारण सीएसएस लेखक की जा रही है और प्रबंधित ग्राफिक डिजाइनर, जो मामले के बारे में पता नहीं हो सकता है के द्वारा simplicity, complexity, maintenance, structureऔर refactoring
चेरोविम

8
@cherouvim - यह हास्यास्पद है कि आपको यह कहना चाहिए क्योंकि इस प्रश्न को पूछने का मेरा पूरा कारण ग्राफिक कलाकार द्वारा डिज़ाइन किए गए कुछ डरावने सीएसएस को देखने के साथ शुरू हुआ। शायद हमें उनके लिए कुछ बेहतर प्रशिक्षण की आवश्यकता है?
जैसकॉव

13
मेरा समाधान (एक आदर्श दुनिया में) आपकी टीम में समर्पित लोगों को PSD को html + सीएसएस में काटने और बाद में बनाए रखने के लिए है। इन लोगों को प्रोग्रामर और डिजाइनरों के करीब होना चाहिए।
चेरोविम

@cherouvim को सहमत होना होगा - यह बहुत ज्यादा है जिस तरह से एजेंसियां ​​जा रही हैं, खासकर सीएसएस अधिक जटिल हो जाता है।
जॉन पार्कर

27
@JasCav, ग्राफिक कलाकार CSS को नहीं छूना चाहिए। वेब डिजाइनर , और फ्रंट-एंड वेब डेवलपर्स को सीएसएस से निपटना चाहिए। ग्राफिक डिज़ाइनर का काम ग्राफिक्स बनाना है।
zzzzBov

जवाबों:


566

यह एक बहुत अच्छा सवाल है। हर जगह मैं देखता हूं, सीएसएस फाइलें थोड़ी देर के बाद नियंत्रण से बाहर हो जाती हैं - विशेष रूप से, लेकिन न केवल, जब एक टीम में काम करते हैं।

निम्नलिखित नियम हैं जिनका मैं स्वयं पालन करने की कोशिश कर रहा हूं (ऐसा नहीं कि मैं हमेशा इसका प्रबंधन करता हूं।)

  • रिफैक्टर जल्दी, रिफ्लेक्टर अक्सर। सीएसएस फ़ाइलों को अक्सर साफ करें, एक ही वर्ग की कई परिभाषाओं को एक साथ फ्यूज करें। अप्रचलित परिभाषाओं को तुरंत हटा दें ।

  • बग को ठीक करने के दौरान सीएसएस जोड़ते समय, एक टिप्पणी छोड़ दें कि क्या बदलाव होता है ("यह सुनिश्चित करने के लिए है कि बॉक्स IE <7 में संरेखित किया गया है")

  • अतिरेक से बचें, उदाहरण के लिए उसी चीज़ को परिभाषित करना .classnameऔर .classname:hover

  • /** Head **/एक स्पष्ट संरचना बनाने के लिए टिप्पणियों का उपयोग करें ।

  • एक प्रीडिफ़ायर टूल का उपयोग करें जो एक स्थिर शैली को बनाए रखने में मदद करता है। मैं पॉलीस्टाइल का उपयोग करता हूं , जिसके साथ मैं काफी खुश हूं (लागत $ 15 है, लेकिन पैसा अच्छी तरह से खर्च किया गया है)। वहाँ के रूप में अच्छी तरह से चारों ओर मुक्त हैं (जैसे सीएसएस सुंदर , एक खुले स्रोत उपकरण के आधार पर कोड ब्यूटीफायर )।

  • समझदार कक्षाएं बनाएँ। इस पर कुछ नोट्स के लिए नीचे देखें।

  • शब्दार्थ का उपयोग करें, DIV सूप से बचें - <ul>उदाहरण के लिए मेनू के लिए उपयोग करें ।

  • जितना संभव हो उतना कम स्तर पर सब कुछ परिभाषित करें (जैसे एक डिफ़ॉल्ट फ़ॉन्ट परिवार, रंग और आकार में body) और inheritजहां संभव हो उपयोग करें

  • यदि आपके पास बहुत जटिल सीएसएस है, तो शायद एक सीएसएस प्री-कंपाइलर मदद करता है। मैं xCSS को जल्द ही उसी कारण से देखने की योजना बना रहा हूं । आसपास कई अन्य हैं।

  • यदि एक टीम में काम करते हैं, तो सीएसएस फ़ाइलों के लिए गुणवत्ता और मानकों की आवश्यकता पर भी प्रकाश डालें। हर कोई अपनी प्रोग्रामिंग भाषा (ओं) में कोडिंग मानकों पर बड़ा है, लेकिन इस बारे में बहुत कम जागरूकता है कि यह CSS के लिए भी आवश्यक है।

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

  • साथ काम न करें !important। केवल इसलिए नहीं कि IE = <7 इसके साथ सौदा नहीं कर सकते। एक जटिल संरचना में, इसका उपयोग !importantअक्सर एक व्यवहार को बदलने के लिए लुभाता है जिसका स्रोत नहीं मिल सकता है, लेकिन यह लंबे समय तक रखरखाव के लिए जहर है

समझदार कक्षाओं का निर्माण

इस तरह मुझे समझदार वर्ग बनाना पसंद है।

मैं पहले वैश्विक सेटिंग लागू करता हूं:

body { font-family: .... font-size ... color ... }
a { text-decoration: none; }

फिर, मैं पृष्ठ के लेआउट के मुख्य खंडों को पहचानता हूं - जैसे शीर्ष क्षेत्र, मेनू, सामग्री और पाद लेख। यदि मैंने अच्छा मार्कअप लिखा है, तो ये क्षेत्र HTML संरचना के समान होंगे।

फिर, मैं सीएसएस कक्षाओं का निर्माण शुरू करता हूं, जहां तक ​​संभव हो उतना पूर्वजों को निर्दिष्ट करना, जब तक यह समझदार है, और संबंधित कक्षाओं को यथासंभव निकट से समूहीकृत करना।

div.content ul.table_of_contents 
div.content ul.table_of_contents li 
div.content ul.table_of_contents li h1
div.content ul.table_of_contents li h2
div.content ul.table_of_contents li span.pagenumber

एक के रूप में पूरे सीएसएस संरचना के बारे में सोचो पेड़ तेजी से सटीक परिभाषा जड़ आप कर रहे हैं से अधिक दूर के साथ। आप जितना संभव हो उतना कक्षाओं की संख्या कम रखना चाहते हैं, और आप खुद को यथासंभव कम दोहराना चाहते हैं।

उदाहरण के लिए, मान लें कि आपके पास नेविगेशनल मेनू के तीन स्तर हैं। ये तीन मेनू अलग-अलग दिखते हैं, लेकिन वे कुछ विशेषताओं को भी साझा करते हैं। उदाहरण के लिए, वे सभी हैं <ul>, उन सभी का फ़ॉन्ट आकार समान है, और आइटम सभी एक-दूसरे के बगल में हैं (डिफ़ॉल्ट रेंडरिंग के विपरीत ul)। इसके अलावा, किसी भी मेनू में कोई भी बुलेट पॉइंट ( list-style-type) नहीं है।

सबसे पहले, एक वर्ग में सामान्य विशेषताओं को परिभाषित करें menu:

div.navi ul.menu { display: ...; list-style-type: none; list-style-image: none; }
div.navi ul.menu li { float: left }

फिर, तीन मेनू में से प्रत्येक की विशिष्ट विशेषताओं को परिभाषित करें। स्तर 1 40 पिक्सेल लंबा है; स्तर 2 और 3, 20 पिक्सेल।

नोट: आप इसके लिए कई वर्गों का उपयोग कर सकते हैं लेकिन Internet Explorer 6 में कई वर्गों के साथ समस्याएँ हैं , इसलिए यह उदाहरण ids का उपयोग करता है ।

div.navi ul.menu#level1 { height: 40px; }
div.navi ul.menu#level2 { height: 20px; }
div.navi ul.menu#level3 { height: 16px; }

मेनू के लिए मार्कअप इस तरह दिखेगा:

<ul id="level1" class="menu"><li> ...... </li></ul>
<ul id="level2" class="menu"><li> ...... </li></ul>
<ul id="level3" class="menu"><li> ...... </li></ul>

यदि आपके पास पृष्ठ पर शब्दार्थ समान तत्व हैं - जैसे ये तीन मेनू - पहले सामान्यताओं को बाहर निकालने की कोशिश करें और उन्हें एक कक्षा में डालें; फिर, विशिष्ट गुणों को काम करें और उन्हें कक्षाओं में लागू करें, या, यदि आपको इंटरनेट एक्सप्लोरर 6, आईडी का समर्थन करना है।

विविध HTML युक्तियाँ

यदि आप अपने HTML आउटपुट में इन शब्दार्थों को जोड़ते हैं, तो डिज़ाइनर बाद में शुद्ध CSS का उपयोग करके वेब साइटों और / या ऐप्स के लुक को कस्टमाइज़ कर सकते हैं, जो कि एक बेहतरीन लाभ और समय बचाने वाला है।

  • यदि संभव हो, तो प्रत्येक पृष्ठ के शरीर को एक अद्वितीय वर्ग दें: <body class='contactpage'>इससे शैली-पत्रक में पृष्ठ-विशिष्ट ट्विक्स जोड़ना बहुत आसान हो जाता है:

    body.contactpage div.container ul.mainmenu li { color: green }
  • मेनू को स्वचालित रूप से बनाते समय, बाद में व्यापक स्टाइल की अनुमति देने के लिए जितना संभव हो उतना सीएसएस संदर्भ जोड़ें। उदाहरण के लिए:

    <ul class="mainmenu">
     <li class="item_first item_active item_1"> First item </li> 
     <li class="item_2"> Second item </li> 
     <li class="item_3"> Third item </li> 
     <li class="item_last item_4"> Fourth item </li> 
    </ul>

    इस तरह, हर मेनू आइटम को इसके अर्थ संदर्भ के अनुसार स्टाइल के लिए एक्सेस किया जा सकता है: चाहे वह सूची में पहला या अंतिम आइटम हो; चाहे वह वर्तमान में सक्रिय आइटम हो; और संख्या से।

ध्यान दें कि उपरोक्त उदाहरण में उल्लिखित के रूप में कई वर्गों का यह असाइनमेंट IE6 में ठीक से काम नहीं करता है । IE6 को कई वर्गों से निपटने में सक्षम बनाने के लिए एक समाधान है। यदि वर्कअराउंड एक विकल्प नहीं है, तो आपको वह वर्ग सेट करना होगा जो आपके लिए सबसे महत्वपूर्ण है (आइटम नंबर, सक्रिय या पहला / अंतिम), या आईडी का उपयोग करने का सहारा लें।


3
@ मुख्य रूप से एक गतिशील वातावरण में (क्योंकि एक CMS की तरह) एक आईडी का उपयोग करके आसानी से टकराव हो सकता है (कहते हैं, एक उपयोगकर्ता "संपर्क" के लिए एक पृष्ठ का नाम बदल रहा है, उस नाम को शरीर की आईडी के रूप में इस्तेमाल किया जा रहा है, संपर्क फ़ॉर्म से टकरा रहा है) जिसे "संपर्क" भी कहा जाता है)। मैं आम तौर पर उस कारण के रूप में संभव के रूप में आईडी का उपयोग करने की सलाह देता हूं।
पीका

4
@Pekka आपको www.oocss.org की जाँच करनी चाहिए। यह बहुत कुछ है जो आपने यहाँ उल्लेख किया है, लेकिन इसका सबसे अच्छा तरीका मैंने सीएसएस ब्लोट को प्रबंधित करने के लिए देखा है। नीचे मेरा जवाब भी देखें: stackoverflow.com/questions/2253110/how-to-manage-css-explosion/…
मोइन ज़मन

2
@ धन्यवाद! मुझे यह काफी पसंद है, हालाँकि मुझे कभी-कभी इन दिशानिर्देशों का पालन करना बहुत कठिन लगता है । सीएसएस शैली पत्रक हैं तो यहाँ एक रंग बदलने, एक - समय के साथ पेंच करने के लिए आसान font-weight: boldवहाँ .... अनुशासन केवल दवा :) है
पेका

1
सीएसएस विस्फोट के अध्ययन के लिए किसी नए व्यक्ति के रूप में बोलते हुए, "अद्वितीय वर्ग" वाक्यांश भ्रामक है। मुझे लग रहा है कि ऐसा नहीं है, idलेकिन यह निश्चित रूप से एक जैसा लगता है। शायद अवधारणा को स्पष्ट किया जा सकता है?
अरी सोना

2
@ हरि आप सही कह रहे हैं कि तकनीकी रूप से भी एक हो सकता idहै।
पेकाका

89

यहाँ सिर्फ 4 उदाहरण हैं:

सभी 4 पर मेरे जवाब में नेटली डाउन्स पीडीएफ सीएसएस सिस्टम को डाउनलोड करने और पढ़ने की सलाह शामिल है । (पीडीएफ में स्लाइड्स में नहीं, बल्कि कई नोट्स शामिल हैं, इसलिए पीडीएफ पढ़ें!)। संगठन के लिए उसके सुझावों पर ध्यान दें।

EDIT (2014/02/05) चार साल बाद, मैं कहूंगा:

  • एक सीएसएस प्री-प्रोसेसर का उपयोग करें और अपनी फ़ाइलों को पार्टीशन के रूप में प्रबंधित करें (मैं व्यक्तिगत रूप से कम्पास के साथ सैस को पसंद करता हूं, लेकिन कम भी काफी अच्छा है और अन्य भी हैं)
  • OOCSS , SMACSS , और BEM या getbem जैसी अवधारणाओं पर पढ़ें ।
  • इस पर एक नज़र डालें कि बूटस्ट्रैप और ज़र्ब फाउंडेशन जैसे लोकप्रिय सीएसएस फ्रेमवर्क कैसे संरचित हैं। और कम लोकप्रिय ढांचे को छूट न दें - इनुइट एक दिलचस्प है लेकिन बहुत सारे अन्य हैं।
  • एक निरंतर एकीकरण सर्वर और / या ग्रन्ट या गुलप जैसे टास्क रनर पर एक बिल्ड स्टेप के साथ अपनी फ़ाइलों को मिलाएं / घटाएँ।

सीएसएस प्री-प्रोसेसर समाधान के बजाय समस्या का कारण हैं। कैस्केडिंग अवधारणा को सही मायने में मास्टर करें और आप ब्लोट को कम कर देंगे।
डैनियल सोकोलोस्की

@DanielSokolowski किसी भी अनुचित तरीके से उपयोग किए जाने वाले उपकरण एक समाधान के बजाय एक समस्या हो सकती है। लेकिन कैस्केड को माहिर करने की बात पर 100% सहमत हैं।
एंडी फोर्ड

73

CSS में शीर्षासन न लिखें

बस खंडों को फ़ाइलों में विभाजित करें। किसी भी सीएसएस टिप्पणी, कि टिप्पणी होना चाहिए।

reset.css
base.css
somepage.css
someotherpage.css
some_abstract_component.css

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

यदि आपको शीर्षक लिखना है, तो फ़ाइल के प्रारंभ में एक TOC रखें

टीओसी में हेडिंग आपके द्वारा लिखे गए शीर्षकों के बराबर होनी चाहिए। यह शीर्षकों की खोज करने के लिए एक दर्द है। समस्या में जोड़ने के लिए, यह जानने के लिए कि आपके पहले हेडर के बाद आपके पास एक और हेडर कैसे है? ps। टीओसी लिखते समय प्रत्येक पंक्ति की शुरुआत में डॉक्स-जैसे * (स्टार) न जोड़ें, यह सिर्फ पाठ का चयन करने के लिए अधिक कष्टप्रद बनाता है।

/* Table of Contents
   - - - - - - - - -
   Header stuff
   Body Stuff
   Some other junk
   - - - - - - - - -
 */
...
/* Header Stuff 
 */
...
/* Body Stuff 
 */

नियमों के साथ या भीतर टिप्पणी लिखें, ब्लॉक के बाहर नहीं

सबसे पहले, जब आप स्क्रिप्ट को संपादित करते हैं, तो 50/50 मौका होता है, आप ध्यान दें कि नियम ब्लॉक के बाहर क्या है (विशेषकर यदि यह पाठ का एक बड़ा ग्लोब है;))। दूसरी बात यह है कि (लगभग) कोई मामला नहीं है जहाँ आपको बाहर "टिप्पणी" की आवश्यकता होगी। यदि यह बाहर है, तो यह शीर्षक का 99% समय है, इसलिए इसे इस तरह रखें।

पृष्ठ को घटकों में विभाजित करें

अधिकांश समय घटक के पास होना चाहिए position:relative, नहीं paddingऔर नहीं margin। यह% नियमों को बहुत सरल करता है, साथ ही absolute:positionतत्वों के बहुत सरल अंतर्वेशन के लिए अनुमति देता है , क्योंकि अगर कोई निरपेक्ष तैनात कंटेनर है तो पूर्ण तैनात तत्व कंटेनर का उपयोग करेगा top, जब कंप्यूटिंग right,, bottomऔर leftगुण।

HTML5 दस्तावेज़ में अधिकांश DIV आमतौर पर एक घटक होते हैं।

एक घटक भी कुछ ऐसा है जिसे पृष्ठ पर एक स्वतंत्र इकाई माना जा सकता है। आम आदमी की शर्तों में एक घटक की तरह कुछ का इलाज अगर यह एक ब्लैकबॉक्स की तरह कुछ समझ में आता है ।

QA पृष्ठ उदाहरण के साथ फिर से जा रहे हैं:

#navigation
#question
#answers
#answers .answer
etc.

पृष्ठ को घटकों में विभाजित करके, आप अपने काम को प्रबंधनीय इकाइयों में विभाजित करते हैं।

एक ही लाइन पर एक संचयी प्रभाव के साथ नियम रखो।

उदाहरण के लिए border, marginऔर padding(लेकिन नहीं outline) सभी उस तत्व के आयाम और आकार में जोड़ते हैं जो आप स्टाइल कर रहे हैं।

position: absolute; top: 10px; right: 10px;

यदि वे सिर्फ एक पंक्ति में पढ़ने योग्य नहीं हैं, तो कम से कम उन्हें निकटता में रखें:

padding: 10px; margin: 20px;
border: 1px solid black;

जब संभव हो तो आशुलिपि का उपयोग करें:

/* the following... */
padding-left: 10px;
padding-right: 10px;
/* can simply be written as */
padding: 0 10px;

चयनकर्ता को कभी न दोहराएं

यदि आपके पास एक ही चयनकर्ता के अधिक उदाहरण हैं, तो एक अच्छा मौका है कि आप एक ही नियम के कई उदाहरणों के साथ अपरिहार्य रूप से समाप्त होंगे। उदाहरण के लिए:

#some .selector {
    margin: 0;
    font-size: 11px;
}
...
#some .selector {
    border: 1px solid #000;
    margin: 0;
}

TAGs को चयनकर्ताओं के रूप में उपयोग करने से बचें, जब आप आईडी / कक्षाओं का उपयोग कर सकते हैं

सबसे पहले DIV और SPAN टैग अपवाद हैं: आपको कभी भी, कभी भी उनका उपयोग नहीं करना चाहिए! ;) केवल उन्हें एक वर्ग / आईडी संलग्न करने के लिए उपयोग करें।

इस...

div#answers div.answer table.statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
div#answers div.answer table.statistics thead {
    outline: 3px solid #000;
}

इस तरह लिखा जाना चाहिए:

#answers .answer .statistics {
    border-collapse: collapsed;
    color: pink;
    border: 1px solid #000;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

क्योंकि अतिरिक्त झूलने वाले DIVs चयनकर्ता के लिए कुछ भी नहीं जोड़ते हैं। वे एक अनावश्यक टैग-नियम को भी मजबूर करते हैं। आप उदाहरण के लिए, बदलने के लिए, तो .answerएक से divएक को articleअपनी शैली टूट जाएगा।

या यदि आप अधिक स्पष्टता पसंद करते हैं:

#answers .answer .statistics {
    color: pink;
    border: 1px solid #000;
}
#answers .answer table.statistics {
    border-collapse: collapsed;
}
#answers .answer .statistics thead {
    outline: 3px solid #000;
}

border-collapseसंपत्ति होने का कारण एक विशेष संपत्ति है जो केवल तभी समझ में आता है जब इसे लागू किया जाता है table। यदि .statisticsयह नहीं है तो tableयह लागू नहीं होना चाहिए।

सामान्य नियम बुरे हैं!

  • यदि आप कर सकते हैं तो सामान्य / जादू नियम लिखने से बचें
  • जब तक यह सीएसएस-रीसेट / अनलेट के लिए नहीं है, तब तक आपके सभी सामान्य जादू कम से कम एक रूट घटक पर लागू होने चाहिए

वे आपको समय नहीं बचाते हैं, वे आपके सिर में विस्फोट करते हैं; साथ ही रख-रखाव एक बुरा सपना है। जब आप नियम लिख रहे होते हैं, तो आप जान सकते हैं कि वे कहां लागू होते हैं, हालांकि इसकी कोई गारंटी नहीं है कि आपका नियम आपके साथ बाद में गड़बड़ नहीं करेगा।

इस सामान्य नियमों में जोड़ने के लिए भ्रमित करना और पढ़ना मुश्किल है, भले ही आपके पास दस्तावेज़ के कुछ विचार हों जो आप स्टाइल कर रहे हैं। यह कहने के लिए नहीं है कि आपको सामान्य नियम नहीं लिखना चाहिए, बस उनका उपयोग न करें जब तक कि आप वास्तव में उनके लिए सामान्य होने का इरादा नहीं रखते हैं, और यहां तक ​​कि वे चयनकर्ता में उतनी ही गुंजाइश जानकारी जोड़ सकते हैं जितनी आप कर सकते हैं।

इस तरह से सामान ...

.badges {
    width: 100%;
    white-space: nowrap;
}

address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

... प्रोग्रामिंग भाषा में वैश्विक चर का उपयोग करने के रूप में एक ही समस्या है। आपको उन्हें गुंजाइश देने की आवश्यकता है!

#question .userinfo .badges {
    width: 100%;
    white-space: nowrap;
}

#answers .answer .userinfo address {
    padding: 5px 10px;
    border: 1px solid #ccc;
}

मूल रूप से जो इस प्रकार है:

components                   target
---------------------------- --------
#answers .answer   .userinfo address
-------- --------- --------- --------
domain   component component selector 

मुझे आईडी का उपयोग करना पसंद है जब भी मुझे पता चलता है कि एक घटक एक पृष्ठ पर एक सिंगलटन है; आपकी जरूरतें अलग हो सकती हैं।

नोट: आदर्श रूप में, आपको बस पर्याप्त लिखना चाहिए। कम घटकों का उल्लेख करने की तुलना में चयनकर्ता में अधिक घटकों का उल्लेख करना अधिक क्षमाशील गलती है।

मान लें कि आपके पास एक paginationघटक है। आप इसे अपनी साइट पर कई स्थानों पर उपयोग करते हैं। यह एक अच्छा उदाहरण होगा जब आप एक सामान्य नियम लिख रहे होंगे। आपको display:blockव्यक्तिगत पृष्ठ संख्या लिंक कहते हैं और उन्हें एक गहरे भूरे रंग की पृष्ठभूमि देते हैं। उन्हें दिखाई देने के लिए आपके पास इस तरह के नियम होना चाहिए:

.pagination .pagelist a {
    color: #fff;
}

अब आपको उत्तर की सूची के लिए अपने पृष्ठांकन का उपयोग करने देता है, आप कुछ इस तरह से सामना कर सकते हैं

#answers .header a {
    color: #000;
}
...
.pagination .pagelist a {
    color: #fff;
}

इससे आपके सफेद लिंक काले हो जाएंगे, जो आप नहीं चाहते हैं।

इसे ठीक करने का गलत तरीका है:

.pagination .pagelist a {
    color: #fff !important;
}

इसे ठीक करने का सही तरीका है:

#answers .header .pagination .pagelist a {
    color: #fff;
}

जटिल "तर्क" टिप्पणियाँ काम नहीं करती हैं :)

यदि आप कुछ इस तरह लिखते हैं: "यह मूल्य ब्ला-ब्ला की ऊंचाई के साथ संयुक्त ब्ला-ब्ला पर निर्भर है", तो यह अनिवार्य है कि आप एक गलती करेंगे और यह सब कार्ड के घर की तरह नीचे गिर जाएगा।

अपनी टिप्पणियों को सरल रखें; यदि आपको "तार्किक संचालन" की आवश्यकता है, तो उन सीएसएस टेम्प्लेटिंग भाषाओं में से एक पर विचार करें, जैसे SASS या LESS

आप एक रंग पैलेट कैसे लिखते हैं?

इसे अंत के लिए छोड़ दें। अपने पूरे रंग के पैलेट के लिए एक फाइल रखें। इस फ़ाइल के साथ आपकी शैली में अभी भी नियमों में कुछ प्रयोग करने योग्य रंग-पैलेट होना चाहिए। आपका रंग फूस को अधिलेखित करना चाहिए। आप एक बहुत ही उच्च स्तरीय मूल घटक (जैसे। #page) का उपयोग करके चयनकर्ताओं की श्रृंखला करते हैं और फिर अपनी शैली को एक आत्मनिर्भर नियम ब्लॉक के रूप में लिखते हैं। यह सिर्फ रंग या कुछ और हो सकता है।

जैसे।

#page #header .description,
#page #categories .description,
#page #answers .answer .body
{
    color: #222; background: #fff; 
    border-radius: 10px;
    padding: 1em;
}

विचार सरल है, आपका रंग पैलेट आधार शैली से स्वतंत्र एक स्टाइलशीट है, जिसे आपने कैस्केड किया है।

कम नाम, कम मेमोरी की आवश्यकता होती है, जिससे कोड को पढ़ना आसान हो जाता है

कम नामों का उपयोग करना बेहतर है। आदर्श रूप से बहुत सरल (और संक्षिप्त!) शब्दों का उपयोग करें: पाठ, शरीर, हेडर।

मुझे यह भी पता है कि सरल शब्दों का संयोजन समझना आसान है, फिर लंबे "उपयुक्त" शब्दों का एक सूप होना: पोस्टबॉडी, पोस्टहेड, उपयोगकर्ता नाम, आदि।

शब्दावली को छोटा रखें, इस तरह से भले ही कुछ अजनबी आपके स्टाइल-सूप (जैसे कि कुछ हफ्तों के बाद खुद को पढ़ने के लिए आ रहे हों) को केवल यह समझने की जरूरत है कि शब्दों का उपयोग कहां किया जाता है, जहां हर चयनकर्ता का उपयोग किया जाता है। उदाहरण के लिए .thisजब भी कोई तत्व "चयनित आइटम" या "वर्तमान आइटम", आदि का उपयोग करता है

अपने आप के बाद साफ करो

सीएसएस लिखना खाने की तरह है, कभी-कभी आप एक गड़बड़ छोड़ देते हैं। सुनिश्चित करें कि आप उस गंदगी को साफ करते हैं, या कचरा कोड बस ढेर हो जाएगा। उन कक्षाओं / आईडी को निकालें जिनका आप उपयोग नहीं करते हैं। उन सीएसएस नियमों को हटा दें जिनका आप उपयोग नहीं करते हैं। सुनिश्चित करें कि सब कुछ अच्छा तंग है और आपके पास परस्पर विरोधी या दोहराए गए नियम नहीं हैं।

यदि आपने मुझे सुझाव दिया है, तो आपकी शैली में कुछ कंटेनरों को ब्लैक-बॉक्स (घटकों) के रूप में माना जाता है, उन घटकों को अपने चयनकर्ताओं में उपयोग किया है, और सब कुछ एक समर्पित फ़ाइल में रखा है (या टीओसी और हेडर के साथ एक फ़ाइल को ठीक से विभाजित करें), फिर आपकी काम काफी आसान है ...

आप फ़ायरफ़ॉक्स एक्सटेंशन डस्ट-मी सेलेक्टर्स (टिप: इसे अपने साइटमैप.एक्सएमएल पर इंगित करें) जैसे टूल का उपयोग कर सकते हैं, जिससे आपको अपने सीएसएस की नाक और कार्नियों में छिपे हुए कुछ जंक को ढूंढने में मदद मिलेगी।

एक unsorted.cssफाइल रखें

कहते हैं कि आप एक क्यूए साइट को स्टाइल कर रहे हैं, और आपके पास पहले से ही "उत्तर पृष्ठ" के लिए एक स्टाइलशीट है, जिसे हम कॉल करेंगे answers.css। यदि आपको अब बहुत सी नई सीएसएस जोड़ने की आवश्यकता है, unsorted.cssतो इसे स्टाइलशीट में जोड़ें, फिर अपनी answers.cssस्टाइलशीट में रिफलेक्टर करें।

इसके कई कारण हैं:

  • आपके द्वारा काम पूरा करने के बाद इसे रिफलेक्टर करना तेज़ है, फिर यह नियमों की खोज करना है (जो कि संभवत: मौजूद नहीं है) और कोड इंजेक्ट करें
  • आप सामान को लिखेंगे जिसे आप हटा देंगे, कोड को इंजेक्ट करना बस उस कोड को हटाने के लिए कठिन बनाता है
  • मूल फ़ाइल के लिए आसानी से नियम / चयनकर्ता दोहराव की ओर जाता है

1
गैर-टैग चयनकर्ता बहुत धीमी हैं जो टैग-आधारित हैं। सभी ब्राउज़रों के पास मूल तरीके हैं उदाहरण के लिए 'div' (या कोई अन्य टैग)। यदि आप इसे बहुत सामान्य ('.class') होने देते हैं, तो रेंडरिंग इंजन को DOM के सभी तत्वों को देखने के लिए चलना होगा कि क्या कोई मैच मौजूद है।
मिगुएल पिंग

@ मिग्युएल को प्रतिपादन इंजन को डोम में सभी तत्वों को देखने के लिए क्यों नहीं चलना होगा अगर वे एक डीआईवी हैं? यदि कुछ विशेष अनुकूलन है तो इसे कक्षाओं / आईडी पर लागू क्यों नहीं किया जाता है? क्या आपके पास कोई ज़रिया है? सीएसएस के साथ मैंने जो एकमात्र दृश्यमान प्रदर्शन हत्यारा देखा था वह फ्लोट स्पैम के कारण था - यह पृष्ठ को स्क्रॉल करते समय कुछ ब्राउज़रों पर रेंडरिंग इंजन को बहुत खराब कर सकता है (शायद बहुत अधिक गणनाएं)।
1825 में srcspider

3
मैं टैगनेम (य!) को लक्षित नहीं करने के लिए कहने के लिए इसे वोट करने जा रहा था, लेकिन तब जेनेरिक (बू!) नहीं होने के बारे में एक हिस्सा था
mwilcox

1
@ मिगुएल, यह उस तरह से काम नहीं करता है। ब्राउज़र एक सीएसएस स्ट्रिंग को पीछे की ओर पढ़ते हैं, इसलिए यह ले जाएगा: "div .myclass" और सभी ".myclass" कक्षाएं ढूंढें, और फिर जांचें कि क्या यह div का पूर्वज है।
19il में mwilcox

5
वैश्विक चर के लिए सामान्य नियमों की तुलना करना मैंने सीएसएस के बारे में अब तक की सबसे बड़ी गलत धारणा है।
१२:१२ बजे gblazex

55

1. SASS 2 पर नजर डालें । कम्पास


11
एक लाख बार यह। सैस का उपयोग करके मुझे पहले से कहीं अधिक संगठित और शक्तिशाली सीएसएस रैंगलर बनाया गया है। यह मुझे कई फाइलों, घोंसले शैलियों, चर का उपयोग, आदि, आदि, आदि की शैली को व्यवस्थित करने देता है
एलन एच।

2
sass, कम्पास और कम सभी दिन के अंत में सामान्य सीएसएस का उत्पादन करते हैं जो अभी भी बदसूरत और विस्फोट हो सकता है। सीएसएस में और खुद में ब्लोट का समाधान नहीं है।
मोइन ज़मां

8
@ मोइन_ज़मान मेरी विनम्र राय में, आपका कथन शुद्ध विनम्रता है। आप sass / कम्पास / कम में लिखते हैं और उनकी फाइलों में अपना कोड व्यवस्थित करते हैं। आपको इस बात की परवाह नहीं है कि आउटपुट css कैसा दिखता है। भी, कम से कम कम (कम ऐप के माध्यम से) आउटपुट को छोटा कर सकता है जो महान है।
bxx

1
@bzx आप मेरी बात साबित कर रहे हैं :) एक ब्राउज़र sass / कम्पास / कम नहीं समझता है। इन सभी को सादे पुराने CSS या तो क्लाइंटसाइड, या आपके बिल्ड के भाग के रूप में संकलित करने की आवश्यकता है। अंत में सीएसएस के रूप में वे क्या जानते हैं बिना इन जैसे उपकरणों का उपयोग करना, उन्हें अनजाने में दुरुपयोग करना और इष्टतम सीएसएस फ़ाइलों की तुलना में बड़ी के साथ अंत करना बहुत आसान बनाता है।
मोईन ज़मान

यहीं से gzip कम्प्रेशन चलन में आता है ... अधिकांश वेब सर्वर और ब्राउज़र संभव होने पर gzipped सामग्री के साथ संवाद करेंगे। यदि आप कई बार चयनकर्ता के टुकड़े को दोहराते हैं, तो वह एकल हैश तालिका प्रविष्टि में बदल जाएगा। एकमात्र वास्तविक समस्या तब ब्राउज़र में CSS नियमों को पार्स करने के लिए आवश्यक RAM की मात्रा है।
थर्डेंडर

31

CSSब्लोट का मुकाबला करने का सबसे अच्छा तरीका ऑब्जेक्ट ओरिएंटेड सीएसएस सिद्धांतों का उपयोग करना है।

वहाँ भी एक OOCSS ढांचा है जो बहुत अच्छा है।

कुछ विचारधाराएँ शीर्ष उत्तर में यहाँ बताई गई बातों के विरुद्ध जाती हैं, लेकिन एक बार जब आप जानते हैं कि CSSएक वस्तु उन्मुख फैशन में आर्किटेक्ट कैसे आप इसे वास्तव में कोड दुबला और मतलब रखने पर काम करेंगे देखेंगे।

यहां मुख्य बात यह है कि अपनी साइट में 'ऑब्जेक्ट्स' या बिल्डिंग ब्लॉक पैटर्न की पहचान करें और उनके साथ आर्किटेक्ट करें।

फेसबुक ने OOCSS के निर्माता निकोल सुलिवन को उनके फ्रंट एंड कोड (HTML / CSS) में बहुत सारी बचत प्राप्त करने के लिए काम पर रखा है । हाँ आप वास्तव में बचत न केवल अपने सीएसएस में, लेकिन भी अपने HTML, जो यह की आवाज़ से, आप के लिए बहुत संभव है में प्राप्त कर सकते हैं के रूप में आप एक परिवर्तित उल्लेख tableका एक बहुत में आधारित लेआउट divके

OOCSS के कुछ पहलुओं में एक और शानदार दृष्टिकोण समान है, अपने सीएसएस को शुरू से स्केलेबल और मॉड्यूलर होने की योजना बनाना और लिखना है। जोनाथन स्नूक ने शानदार लेखन किया है और SMACSS के बारे में पुस्तक / ebook - सीएसएस के लिए स्केलेबल और मॉड्यूलर आर्किटेक्चर

मैं आपको कुछ लिंक से रूबरू कराता हूं:
बड़े पैमाने पर सीएसएस की 5 गलतियां - (वीडियो)
बड़े पैमाने पर सीएसएस की 5 गलतियां - (स्लाइड)
सीएसएस ब्लोट - (स्लाइड)


16

आपको कैस्केड, और वजन को समझना चाहिए, और वे कैसे काम करते हैं।

मुझे लगता है कि आप केवल वर्ग पहचानकर्ताओं (div.title) का उपयोग कर रहे हैं। क्या आप जानते हैं कि आप आईडी का भी उपयोग कर सकते हैं, और यह कि एक आईडी एक वर्ग से अधिक वजन वहन करती है?

उदाहरण के लिए,

#page1 div.title, #page1 ul, #page1 span {
  // rules
}

उन सभी तत्वों को एक फ़ॉन्ट-आकार, कहें या एक रंग, या जो भी आपके नियम हैं, साझा करेंगे। आप सभी DIV को भी बना सकते हैं जो # पेज 1 के वंशज हैं और कुछ नियम प्राप्त करते हैं।

वजन के रूप में, याद रखें कि CSS कुल्हाड़ी सबसे सामान्य / हल्के से सबसे विशिष्ट / भारी से चलती है। अर्थात्, सीएसएस चयनकर्ता में एक तत्व विशेष को एक वर्ग विशेष द्वारा अधिलेखित किया जाता है और एक आईडी विनिर्देशक द्वारा अधिलेखित किया जाता है। संख्याओं की गणना होती है, इसलिए दो तत्व निर्दिष्टकर्ताओं (ul li) के साथ एक चयनकर्ता के पास केवल एक विनिर्देशक (li) के साथ एक से अधिक भार होगा।

इसे अंकों की तरह समझें। लोगों के कॉलम में एक 9 अभी भी दसवें कॉलम में एक से कम है। एक आईडी विनिर्देशक के साथ एक चयनकर्ता, एक वर्ग विनिर्देशक, और दो तत्व विनिर्देशक, एक आईडी, 500 वर्ग विनिर्देशक और 1,000 तत्व विनिर्देशक के साथ एक चयनकर्ता की तुलना में अधिक वजन होगा। यह एक बेतुका उदाहरण है, निश्चित रूप से, लेकिन आपको यह विचार मिलता है। मुद्दा यह है कि इस अवधारणा को लागू करने से आपको बहुत सीएसएस को साफ करने में मदद मिलती है।

BTW, तत्व निर्दिष्ट करने के लिए वर्ग (div.title) जोड़ना आवश्यक नहीं है जब तक कि आप अन्य तत्वों के साथ संघर्ष में नहीं चल रहे हैं जिनके पास वर्ग = "शीर्षक" है। अनावश्यक वजन न जोड़ें, क्योंकि आपको बाद में उस वजन का उपयोग करने की आवश्यकता हो सकती है।


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

2
@alpav: क्षमा करें, यह गलत है। आईडी एक शानदार तरीका है जैसे तत्वों को एक पृष्ठ के विभिन्न हिस्सों में अलग-अलग तरीके से प्रकट किया जाता है, बिना नट्स को बनाए नए वर्ग के नाम।
रोबस्टो

@ रोबो: नई आईडी का नाम नए वर्ग के नाम बनाने से अधिक कठिन क्यों है?
अल्पावि

@Robusto: नए वर्ग के नाम बनाना वास्तव में आईडी नामों की तुलना में आसान है क्योंकि आईडी के साथ आपको वैश्विक दायरे के बारे में चिंता करनी होगी और वर्ग नामों के साथ आपको केवल स्थानीय दायरे में अद्वितीयता के बारे में चिंता करने की आवश्यकता है, स्थानीय चर के साथ समान लाभ।
अल्पव

1
@alpav "जो एनकैप्सुलेशन के उद्देश्य को पराजित करता है - विश्व स्तर पर बिना सोचे समझे स्थानीय रूप से नाम देने में सक्षम होना।" सही, लेकिन CSS चयनकर्ता स्वाभाविक रूप से वैश्विक हैं: जब आप लिखते हैं .myclass, तो आप कक्षा के साथ सब कुछ चुनते हैं myclass। CSS में, कक्षाएं उस संबंध में आईडी के समान हैं।
पॉल डी। वेट

12

मैं कम सीएसएस डायनामिक फ्रेमवर्क का सुझाव दे सकता हूं

यह SASS के समान है जैसा कि पहले उल्लेख किया गया है।

यह सीएसएस प्रति अभिभावक वर्ग को बनाए रखने में मदद करता है।

उदाहरण के लिए

 #parent{     
  width: 100%;

    #child1
    {    
     background: #E1E8F2;    
     padding: 5px;    
    }

    #child2
   {
     background: #F1F8E2;
     padding: 15px
   }
 }

यह क्या करता है: लागू होता है चौड़ाई: # चाइल्ड 1 और # चाइल्ड 2 दोनों के लिए 100%।

इसके अलावा, # child1 विशिष्ट CSS #parent से संबंधित है।

यह करने के लिए प्रस्तुत करना होगा

#parent #child1
{
 width: 100%;
 background: #E1E8F2;
 padding: 5px;
}

#parent #child2
{
 width: 100%;
 background: #F1F8E2;
 padding: 15px;
}

1
मैं sass का उपयोग करता हूं और यह हो सकता है कि यह sass और कम के बीच का अंतर है, लेकिन मुझे पूरा यकीन है कि यह `#parent {चौड़ाई: 100% के रूप में संकलित होगा; } # अपरेंट # चाइल्ड 1 {बैकग्राउंड: # ई 1 ई 8 एफ 2; गद्दी: 5 पीएक्स; } # अपरेंट # चाइल्ड 2 {बैकग्राउंड: # एफ 1 एफ 8 ई 2; गद्दी: 15 पीएक्स; } `
15

12

मुझे लगता है कि कठिन बात एक साइट के लिए आवश्यक डिज़ाइन को नियमों की एक श्रृंखला में अनुवाद करना है। यदि साइट का डिज़ाइन स्पष्ट और नियम-आधारित है, तो आपकी कक्षा के नाम और CSS संरचना उसी से प्रवाहित हो सकते हैं। लेकिन अगर लोग समय के साथ, बेतरतीब ढंग से साइट पर छोटे बिट्स जोड़ रहे हैं जो बहुत मायने नहीं रखते हैं, तो बहुत कुछ आप सीएसएस में उस बारे में नहीं कर सकते हैं।

मैं अपनी CSS फाइलों को इस तरह से व्यवस्थित करता हूं:

  1. CSS रीसेट, एरिक मेयर के आधार पर । (क्योंकि अन्यथा मुझे लगता है कि, अधिकांश तत्वों के लिए, मुझे कम से कम एक या दो नियम मिले हैं जो केवल डिफ़ॉल्ट ब्राउज़र शैलियों को रीसेट कर रहे हैं - मेरी अधिकांश सूचियाँ उदाहरण के लिए डिफ़ॉल्ट HTML शैली की तरह नहीं दिखती हैं।)

  2. ग्रिड सिस्टम सीएसएस, अगर साइट इसके लिए कॉल करती है। (मैं 960.gs पर आधार मेरा )

  3. घटकों के लिए शैलियाँ जो प्रत्येक पृष्ठ पर दिखाई देती हैं (हेडर, फ़ुटर, आदि)

  4. घटकों के लिए शैलियाँ जो साइट भर में विभिन्न स्थानों में उपयोग की जाती हैं

  5. शैलियाँ जो केवल व्यक्तिगत पृष्ठों पर प्रासंगिक हैं

जैसा कि आप देख सकते हैं, कि ज्यादातर साइट के लिए डिजाइन पर निर्भर करता है। यदि डिज़ाइन की स्पष्ट और व्यवस्थित, आपका सीएसएस हो सकता है। यदि नहीं, तो आप खराब हैं।


7

आपके प्रश्न में आपके द्वारा उठाए गए उच्च-स्तरीय चिंताओं को दूर करने के लिए मेरा उत्तर उच्च-स्तरीय है। निम्न-स्तरीय संगठनात्मक तरकीबें हो सकती हैं और आप इसे पूर्ववर्ती बनाने के लिए ट्वीक कर सकते हैं, लेकिन उनमें से कोई भी पद्धतिगत कमियों को ठीक नहीं कर सकता है। सीएसएस विस्फोट को प्रभावित करने वाली कई चीजें हैं। स्पष्ट रूप से साइट की समग्र जटिलता, लेकिन नामकरण, सीएसएस प्रदर्शन, सीएसएस फ़ाइल संगठन और परीक्षण / स्वीकार्यता जैसी चीजें भी।

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

यह ध्यान रखना महत्वपूर्ण है कि यह स्वच्छ दृष्टिकोण प्रदर्शन की चिंता के विपरीत चल सकता है, जो आईडी या टैग नाम के आधार पर छोटे चयनकर्ताओं का पक्षधर है । यह पता लगाना कि संतुलन आपके ऊपर है, लेकिन जब तक आपके पास एक विशाल साइट नहीं है, यह आपके सिर के पीछे एक गाइड होना चाहिए जो आपको आपके चयनकर्ताओं को कम रखने के लिए याद दिलाता है। यहाँ प्रदर्शन के बारे में अधिक

अंत में, क्या आपके पास अपनी पूरी साइट के लिए एक एकल सीएसएस फ़ाइल , या कई फाइलें (प्रति पृष्ठ या -section फ़ाइलों के साथ उपयोग की जाने वाली एकल आधार फ़ाइल) हैं? एकल फ़ाइल प्रदर्शन के लिए बेहतर है, लेकिन टीम के कई सदस्यों के साथ समझना / बनाए रखना कठिन हो सकता है, और परीक्षण करना कठिन हो सकता है। परीक्षण के लिए, मेरा सुझाव है कि आपके पास एक एकल सीएसएस-परीक्षण पृष्ठ है जिसमें टकराव और अनपेक्षित कैस्केडिंग का परीक्षण करने के लिए प्रत्येक समर्थित सीएसएस मॉड्यूल शामिल है।

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

ग्राहक की विशिष्ट आवश्यकताओं का विश्लेषण करना, इन चिंताओं को उसके अनुसार संतुलित करना आपके ऊपर है।


5

जैसा कि मेरे सामने कहा गया है: OOCSS में जाओ। Sass / Less / Compass उपयोग करने के लिए आकर्षक है, लेकिन जब तक वेनिला CSS का सही तरीके से उपयोग नहीं किया जाता है, तब तक Sass / Less / Compass केवल चीजों को खराब करेगा।

सबसे पहले, कुशल सीएसएस के बारे में पढ़ें। Google पृष्ठ गति आज़माएं और पढ़ें कि सॉडर ने कुशल सीएसएस के बारे में क्या लिखा है।

फिर, OOCSS दर्ज करें।

  • कैस्केड के साथ काम करना सीखें। (आखिरकार, हम इसे कैस्केडिंग स्टाइल्सशीट कहते हैं)।
  • जानें कि ग्रैन्युलैरिटी कैसे प्राप्त करें (ऊपर-नीचे की बजाय नीचे-ऊपर)
  • संरचना और त्वचा को अलग करना सीखें (क्या अद्वितीय है, और इन वस्तुओं की विविधताएं क्या हैं?)
  • कंटेनर और सामग्री को अलग करना सीखें।
  • ग्रिड से प्यार करना सीखें।

यह सीएसएस लिखने के बारे में हर एक बिट में क्रांति लाएगा। मैं पूरी तरह से नवीनीकृत हूं और इसे प्यार करता हूं।

अद्यतन: SMACSS OOCSS के समान है, लेकिन आम तौर पर बोलने के लिए अनुकूल करने के लिए आसान है।


2
"सैस / कम / कम्पास केवल चीजों को बदतर कर देगा" - बहुत व्यक्तिपरक और परियोजना पर निर्भर करता है। मैं यह बताना चाहूंगा कि OOCSS के संयोजन में इनमें से किसी एक का उपयोग करने से वास्तव में कई बड़ी परियोजनाओं (विशेषकर जिनकी शैलियों को अक्सर बदला जा सकता है) की स्थिरता को लाभ होगा
Zach Lysobey

Zach L: OOCSS (या उस मामले के लिए, SMACSS) सही ढंग से उपयोग किए गए कम्पास / कम / Sass केवल विक्रेता उपसर्गों के लिए आवश्यक बनाता है।
मद्र

मैं इस पर बहुत बहस करने की कोशिश नहीं करूंगा (क्योंकि मैं वर्तमान में एक प्री-प्रोसेसर का उपयोग नहीं करता हूं), लेकिन मुझे पूरा यकीन है कि ऐसे लोगों का एक समूह है जो ऐसी चीजों को उपयोगी पाते हैं, यहां तक ​​कि संयोजन में भी विक्रेता उपसर्ग मुद्दों के बाहर OOCSS / SMACSS के साथ
Zach Lysobey

4

समझदार सीएसएस के लिए मुख्य सिद्धांत, सीएसएस रीफैक्टरिंग से निकाला गया : परिशिष्ट से केवल मॉड्यूलर सीएसएस तक

SASS में लिखें। तुम चर, मिश्रण, और इतने पर के लाभ के लिए पागल हो जाएगा।

स्टाइल के लिए कभी भी HTML आईडी का उपयोग न करें; हमेशा कक्षाओं का उपयोग करें । एचटीएमएल आईडी, जब सही तरीके से उपयोग किया जाता है, तो पूरे पृष्ठ में केवल एक बार दिखाई देता है, जो कि पुन: प्रयोज्य के पूर्ण विपरीत है - समझदार इंजीनियरिंग में सबसे बुनियादी सामानों में से एक। इसके अलावा, आईडी वाले चयनकर्ताओं को ओवरराइड करना वास्तव में कठिन है और अक्सर एक एचटीएमएल आईडी पर हावी होने का एकमात्र तरीका एक और आईडी बनाना होता है, जिससे आईडी कोडबेज में उन कीटों की तरह प्रचारित होती हैं। जावास्क्रिप्ट या एकीकरण परीक्षण हुक अपरिवर्तित करने के लिए HTML आईडी छोड़ने के लिए बेहतर है।

अपने सीएसएस वर्गों को उनके अनुप्रयोग-विशिष्ट फ़ंक्शन के बजाय उनके विज़ुअल फ़ंक्शन द्वारा नाम दें। उदाहरण के लिए, ".bundle-product-discount-box" के बजाय ".hlightlight-box" कहें। इस तरह से कोडिंग करने का अर्थ है कि जब आप साइड-बिज़नेस की भूमिका निभाते हैं, तो आप अपनी मौजूदा स्टाइल-शीट का फिर से उपयोग कर सकते हैं। उदाहरण के लिए, हमने कानून के नोटों की बिक्री शुरू की लेकिन हाल ही में कानून के ट्यूटर्स में चले गए। हमारे पुराने सीएसएस वर्गों में ".download_document_box" जैसे नाम थे, एक ऐसा वर्ग नाम जो डिजिटल दस्तावेज़ों के बारे में बात करते समय समझ में आता है, लेकिन निजी ट्यूटर्स के नए डोमेन पर लागू होने पर केवल भ्रमित करेगा। एक बेहतर नाम जो मौजूदा सेवाओं दोनों को फिट करता है - और भविष्य का कोई भी - ".pretty_callout_box" होगा।

विशिष्ट ग्रिड जानकारी के बाद CSS कक्षाओं के नामकरण से बचें। सीएसएस समुदायों में एक भयानक विरोधी पैटर्न था (जिसके अनुसार सीएसएस फ्रेमवर्क के डिजाइनर और निर्माता ) (खांसी ट्विटर बूटस्ट्रैप ) का मानना ​​है कि "स्पैन -2" या "कोल -8" सीएसएस कक्षाओं के लिए उचित नाम हैं। CSS का बिंदु आपको मार्कअप (बहुत कुछ) को प्रभावित किए बिना अपने डिजाइन को संशोधित करने की संभावना प्रदान करना है। HTML में हार्डकोडिंग ग्रिड आकार इस लक्ष्य को विफल करता है, इसलिए इसे सप्ताहांत से अधिक समय तक चलने वाले किसी भी प्रोजेक्ट के खिलाफ सलाह दी जाती है। अधिक बाद में हम ग्रिड कक्षाओं से कैसे बचते हैं।

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

घोंसला कम करें। चयनकर्ताओं के चयन के बजाय नई कक्षाओं का परिचय दें। यह तथ्य कि SASS चयनकर्ताओं के दोहराए जाने के दर्द को दूर करता है जब घोंसले के शिकार का मतलब यह नहीं है कि आपको पांच स्तरों को गहरा करना है। कभी भी एक चयनकर्ता को अर्हता प्राप्त न करें (उदाहरण के लिए "ul.nav" का उपयोग न करें जहां ".nav" समान कार्य कर सकता है।) और कस्टम वर्ग नाम (जैसे "h2.highlight") के साथ HTML तत्वों को निर्दिष्ट न करें। इसके बजाय केवल कक्षा के नाम का उपयोग करें और आधार चयनकर्ता को छोड़ दें (उदाहरण के लिए पिछला उदाहरण ".highlight" होना चाहिए)। अधिक योग्यता वाले चयनकर्ता कोई मूल्य नहीं जोड़ते हैं।

HTML तत्वों के लिए शैली बनाएं (उदाहरण के लिए "h1") केवल आधार घटकों को स्टाइल करते समय जो पूरे एप्लिकेशन में सुसंगत होना चाहिए। "हेडर उल" जैसे व्यापक चयनकर्ताओं से बचें क्योंकि यह संभावना है कि आपको उन्हें कुछ स्थानों पर वैसे भी ओवरराइड करना होगा। जैसा कि हम कहते रहते हैं, जब भी आप एक विशेष शैली चाहते हैं, तो ज्यादातर आप एक विशिष्ट, अच्छी तरह से नामित वर्ग का उपयोग करना चाहते हैं।

ब्लॉक-एलिमेंट-मोडिफायर की मूल बातें अपनाएं। आप इसके बारे में यहाँ उदाहरण के लिए पढ़ सकते हैं। हमने इसे काफी हल्के ढंग से इस्तेमाल किया, लेकिन फिर भी इसने सीएसएस शैलियों को व्यवस्थित करने में हमारी बहुत मदद की।


2

मैं कई बार व्यक्तियों को अनुभागों के बीच शीर्ष लेख के साथ फाइल को खंडों में तोड़ता हुआ देखूंगा।

कुछ इस तरह

/* Headings and General Text */

.... stuff here for H1, etc..

/* Main page layout */

.... stuff here for layout page setup etc.

यह बहुत अच्छी तरह से काम करता है और बाद में वापस जाने और जो आप काम कर रहे हैं उसे ढूंढना आसान बना सकता है।


यह "हर एक चीज़ के लिए एक अलग सीएसएस विशेषता" होने के बारे में पूछने वाले की चिंता के बारे में कुछ नहीं कहता है।
G-Wiz

1

आपको BEM को देखना चाहिए ।

सिद्धांत

बीईएम चीजों को अधिक पुन: प्रयोज्य और मॉड्यूलर बनाने के प्रयास में सीएसएस चयनकर्ताओं के आयोजन और नामकरण के लिए निर्देशों का एक सेट प्रदान करने का प्रयास करता है और उस तरह के चयनकर्ताओं के बीच संघर्ष से बचने के लिए जो अक्सर स्पेगेटी कोड और विशिष्टता सिरदर्द की ओर जाता है।

जब इसका सही तरीके से उपयोग किया जाता है तो वास्तव में इसके कुछ बहुत ही सकारात्मक प्रभाव होते हैं।

  • जब वे किसी तत्व में जुड़ जाते हैं, तो स्टाइल्स आपकी अपेक्षा करते हैं
  • शैलियाँ लीक नहीं होती हैं और केवल उन्हीं चीज़ों को प्रभावित करती हैं, जिन्हें वे जोड़ते हैं
  • दस्तावेज़ संरचना से शैलियाँ पूरी तरह से विघटित हो जाती हैं
  • शैलियों को एक-दूसरे को ओवर-राइड करने के लिए मजबूर होने की आवश्यकता नहीं है

BEM CSS के साथ लगभग ऑब्जेक्ट ओरिएंटेड स्टाइल लाने के लिए SASS के साथ अच्छी तरह से काम करता है। आप मॉड्यूलर फाइलें बना सकते हैं, जो एक यूआई तत्व के प्रदर्शन को संभालते हैं और इसमें चर जैसे रंग और 'तरीके' जैसे कि आंतरिक तत्व कैसे संभाले जाते हैं। हालांकि एक कट्टर OO प्रोग्रामर इस विचार से बच सकता है, वास्तव में, लागू अवधारणाएं OO संरचनाओं के बहुत सारे अच्छे हिस्सों में लाती हैं, जैसे कि मॉड्यूलरिटी, ढीली युग्मन और तंग सामंजस्य और संदर्भ मुक्त पुन: प्रयोज्य। तुम भी एक तरह से बना सकते हैं जो सैस और &ओपेरा आर का उपयोग करके एक एनकैप्सुलेटेड ऑब्जेक्ट की तरह दिखता है ।

स्मैशिंग मैगज़ीन से अधिक गहराई से लेख यहां पाया जा सकता है ; और सीसीएस मैजड्री के हैरी रॉबर्ट्स (जो कि सीएसएस में शामिल किसी को भी पढ़ना चाहिए) से एक यहाँ है

प्रयोग में

मैंने इसका इस्तेमाल किया है, कई बार, SMACSS और OOCSS का इस्तेमाल करने के साथ, मेरा मतलब है कि उनकी तुलना भी कुछ है। मैंने कुछ बड़ी गड़बड़यों में भी काम किया है, अक्सर मेरी खुद की अनुभवहीन रचना।

जब मैं वास्तविक दुनिया में BEM का उपयोग करता हूं तो मैं कुछ अतिरिक्त सिद्धांतों के साथ तकनीक को बढ़ाता हूं। मैं उपयोगिता वर्गों का उपयोग करता हूं - एक अच्छा उदाहरण एक आवरण वर्ग है:

.page-section {
    width: 100%;
}
@media screen and (min-width: 1200px) {
    margin: 0 auto;
    width: 1200px;
}

और मैं कैस्केड और विशिष्टता पर भी कुछ हद तक भरोसा करता हूं। यहाँ BEM मॉड्यूल होगा .primary-boxऔर .headerएक विशिष्ट ओवर-राइड के लिए संदर्भ होगा

.header {
  .primary-box {
    color: #000;
  }
}

(मैं हर चीज को सामान्य और संदर्भ के रूप में संभव बनाने के लिए अपनी पूरी कोशिश करता हूं, जिसका अर्थ है कि एक अच्छी परियोजना लगभग सब कुछ मॉड्यूल में है जो फिर से उपयोग करने योग्य है)

एक अंतिम बिंदु जो मैं यहां बताऊंगा, वह यह है कि आपकी परियोजना छोटी और गैर-जटिल हो सकती है जो आपको शुरू से ही करनी चाहिए, दो कारणों से:

  • परियोजनाओं की जटिलता बढ़ जाती है, इसलिए अच्छी नींव रखना महत्वपूर्ण है, जिसमें सीएसएस भी शामिल है
  • यहां तक ​​कि एक परियोजना जो सरल दिखाई देती है क्योंकि यह वर्डप्रेस पर बनाया गया है थोड़ा जावास्क्रिप्ट अभी भी सीएसएस में बहुत जटिल हो सकता है - ठीक है, आपको किसी भी सर्वर साइड कोडिंग को करने की ज़रूरत नहीं है, ताकि भाग सरल हो, लेकिन ब्रोशर-पहनें फ्रंट एंड बीस मॉड्यूल और प्रत्येक के तीन रूपांतर हैं: आपको वहां कुछ बहुत ही जटिल सीएसएस मिला है!

वेब घटक

2015 में हम वेब कंपोनेंट्स को देखना शुरू कर रहे हैं। मैं अभी तक इन के बारे में एक बड़ी राशि नहीं जानता, लेकिन वे स्वयं में निहित मॉड्यूल में सभी फ्रंट एंड कार्यक्षमता को एक साथ लाने के लिए देखते हैं, प्रभावी ढंग से बीईएम से सिद्धांतों के प्रकार को एक पूरे के रूप में लागू करने की कोशिश कर रहे हैं और पूरी तरह से फैल गए लेकिन पूरी तरह से युग्मित DOM टुकड़े, Js (MVC) और CSS जैसे तत्व जो सभी एक ही UI विजेट बनाते हैं।

इस तरह से, वे कुछ मूल मुद्दों को संबोधित करेंगे जो css के साथ मौजूद हैं, जिसे हमने BEM जैसी चीजों के साथ हल करने की कोशिश की है, जबकि कुछ अन्य सामने वाले आर्किटेक्चर को अधिक समझदार बना रहे हैं।

यहाँ कुछ और पढ़ना है और यहाँ एक रूपरेखा पॉलिमर भी है जो देखने लायक है

आखिरकार

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



0

यहाँ कुछ बेहतरीन सामग्री है और कुछ ने इस सवाल का जवाब देने में समय का आबंटन किया है, लेकिन जब यह अलग या व्यक्तिगत शैली की शीट की बात आती है, तो मैं विकास के लिए अलग फ़ाइलों के साथ जाऊंगा और फिर अपने सभी जेनेरिक सीएसएस को मर्ज किए गए साइट में स्थानांतरित कर दूंगा। तैनात होने पर एक ही फाइल में।

इस तरह से आपके पास दोनों दुनिया के सर्वश्रेष्ठ हैं, प्रदर्शन बढ़ाते हैं (कम HTTP अनुरोध ब्राउज़र से अनुरोध किया जा रहा है) और विकसित होते समय कोड चिंताओं को अलग करते हैं।

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