बाहरी संशोधक वर्ग के आधार पर सशर्त सीएसएस - अच्छा अभ्यास?


9

परिचय / पृष्ठभूमि: सीएसएस घटक

अपेक्षाकृत बड़ी वेबसाइट के लिए हम SASS के साथ काम कर रहे हैं, और घटकों में CSS का प्रबंधन करने की कोशिश कर रहे हैं। घटकों का मूल विचार यह है कि एक घटक को हर जगह एक जैसा दिखना चाहिए, DOM में आगे कंटेनर तत्वों से स्वतंत्र होना चाहिए।

इसलिए, हम इस तरह से सामान (SASS) से बचना चाहते हैं:

// User picture component.
.user-picture {
  img {..}
}

// Override user picture for the frontpage.
body.page-front .user-picture img {..}

इसके बजाय, यदि हम चाहते हैं कि उपयोगकर्ता चित्र फ्रंटपेज पर अलग दिखे, तो इसके लिए एक अलग घटक होना चाहिए। जैसे SASS विरासत के साथ, या एक मिश्रण के साथ:

// User picture component.
.user-picture {
  img {..}
}

// User picture on frontpage.
.user-picture-front {
  @extend .user-picture;
  img {..}
}

तब हमें फ्रंटपेज पर html को समायोजित करने की आवश्यकता है, ताकि यह उपयोगकर्ता चित्र के विभिन्न संस्करण का उपयोग करे।

अब तक सब ठीक है। मैंने सीएसएस घटकों के बारे में अपनी वर्तमान समझ के उदाहरण के रूप में ऊपर पोस्ट किया है।

प्रश्न: संशोधक वर्ग - अच्छा अभ्यास?

अब हम एक समस्या में चल रहे हैं: कुछ पृष्ठों में एक गहरा (काला) पृष्ठभूमि है, और इसलिए पाठ, सीमाओं और सामान को सफेद करने की आवश्यकता है।

यह किसी भी तरह घटकों से परे जाता है: एक ही घटक में डिफ़ॉल्ट रूप से अंधेरे पाठ होना चाहिए, लेकिन सफेद पाठ यदि यह अंधेरे पृष्ठभूमि के साथ एक कंटेनर के भीतर है।

तो हम इस भयानक विचार है:

// Generic modifier class for all dark-background containers.
.white-on-black {
  // Generic text color change.
  color: white !important;
}

// Component.
.my-component {
  border: 1px solid blue;
  // Special for white-on-black.
  .white-on-black & {
    border-color: yellow;
  }
}

इसलिए हमारे पास एक बाहरी "संशोधक" या "संदर्भ" वर्ग है white-on-blackजो यह बताता है कि आंतरिक तत्व कैसे प्रदर्शित होते हैं।

प्रेरणा यह है कि घटक स्वयं DOM में आगे एक कंटेनर तत्व की पृष्ठभूमि के लिए ज़िम्मेदार नहीं है।

यह काम। केवल समस्या यह है कि अगर हमारे पास अंधेरे पृष्ठभूमि के कंटेनर के भीतर एक सफेद पृष्ठभूमि कंटेनर है। लेकिन यह एक तरफ, यह ठीक काम करता है।

सवाल यह है कि क्या यह वास्तुशिल्प रूप से एक अच्छा अभ्यास है, जिसमें घटकों को एक-दूसरे से स्वतंत्र रखने की कोशिश की पृष्ठभूमि है।

वैकल्पिक के लिए एक अलग घटक होना चाहिए, जैसे my-component-on-dark-bg, जो विरासत में मिला है my-componentऔर पाठ और सीमाओं के लिए अलग रंग है। लेकिन यहां (जैसे PHP) कोड जो घटक HTML का उत्पादन करता है उसे बाहर के बारे में जानना आवश्यक है, अर्थात, क्या अंधेरे बीजी का उपयोग किया जाता है। यह मानते हुए कि घटक को प्रस्तुत करने वाला PHP कोड कंटेनर को प्रस्तुत करने वाले PHP कोड से अलग है। जो अभी भी प्रबंधनीय है, लेकिन एक संशोधक वर्ग के साथ पैटर्न के लिए एक तर्क हो सकता है, जैसा कि ऊपर वर्णित है।

टिप्पणियाँ

हम वास्तव में हमारे सीएसएस वर्गों को एक परियोजना-विशिष्ट उपसर्ग के साथ उपसर्ग कर रहे हैं। मैंने इसे सरलता के लिए यहाँ छोड़ दिया है, और क्योंकि यह किसी का व्यवसाय नहीं है कि मैं किस परियोजना पर काम कर रहा हूँ :)।

जवाबों:


1

यह पूरी तरह से रक्षात्मक डिजाइन की तरह लगता है। आपके प्रस्तावित विकल्प की तुलना में:

  • सफेद-ऑन-ब्लैक के लिए घटकों का एक अलग सेट बनाने की तुलना में कम कोड दोहराव है।
  • यदि आपके पास सफेद-ऑन-ब्लैक राज्य के लिए बहुत सारे संशोधन हैं तो यह भ्रामक और थोड़ा गड़बड़ हो सकता है ।

मुझे लगता है कि यह एक निर्णय कॉल है जिसे डिजाइन को प्राथमिकता दी जानी चाहिए, लेकिन मैं आपके चुने हुए डिजाइन के साथ जाऊंगा अगर सफेद-काले रंग के लिए व्यक्तिगत घटकों के कस्टम संशोधनों की संख्या अपेक्षाकृत कम थी।

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