2016-02-23 8 views
5

मैं निम्नलिखित HTML तत्वों है:, class1, class2class3 कोई और अधिक कम नहीं:सीएसएस शैली को कक्षा में कैसे लागू करें जो किसी अन्य कक्षा में है?

<div class="class1 class2 class3"> 
    <div class="innerClass"> 
    </div> 
</div> 

मैं innerClass जो कक्षाओं में है करने के लिए शैली लागू करना चाहते हैं। मेरा मतलब है, अगर वहाँ वर्गों class1, class2 शैली के साथ तत्व में innerClass लागू किया जा should't और अगर मैं वर्गों class1, class2, class3, class4 साथ तत्व में innerClass है यह या तो लागू नहीं किया जाना चाहिए।

+0

क्या एक भ्रामक सवाल ... :( –

+0

क्या शैली आप कोशिश करेंगे लागू करने के लिए? –

+0

उप वर्गों और अगली बार पोस्ट करने प्रासंगिक कोड (कुछ आप की कोशिश की है पोस्ट करें में देखो समाधान की ओर।) –

उत्तर

1

आप इस तरह की कक्षाओं गठबंधन चाहते हैं:

.class1.class2.class3 .innerClass { 

} 
+2

डाउनवॉट्स के साथ क्या चल रहा है? – ZimSystem

+3

वहां कुछ पागल उपयोगकर्ता! – Trix

+2

वाई हाँ, कोई आज एक बुरे मूड में है। वैसे भी मेरा जवाब भ्रमित प्रश्न के आधार पर गलत है, इसलिए मैं संशोधन कर रहा हूं। – ZimSystem

10

आप सीएसएस गुण चयनकर्ता

[विशेषता] चयनकर्ता एक निर्दिष्ट के साथ तत्वों का चयन करने के लिए किया जाता है साथ ऐसा कर सकते विशेषता।

div[class="class1 class2 class3"] .inner {padding:1em; background:red;}
<div class="class1 class2 class3"> 
 
    <div class="inner"></div> 
 
</div> 
 

 
<div class="class1 class2 class3 class4"> 
 
    <div class="inner"></div> 
 
</div> 
 

 
<div class="class3 class4"> 
 
    <div class="inner"></div> 
 
</div>

संदर्भ: https://developer.mozilla.org/en-US/docs/Web/CSS/Attribute_selectors (द्वारा कहा: Chris Bier)


संपादित करें: रूप Sidney Liebrand द्वारा टिप्पणी में के बारे में बताया, इस दृष्टिकोण मान लिया गया आदेश है कि कक्षाओं का सटीक है और इसलिए जब आदेश एफ होता है तो काम नहीं करेगा ollowing: class="class2 class3 class1"। इस को हल करने के एक तरीका यह सिर्फ शासन में प्रत्येक आदेश के संयोजन संभव जोड़ने के लिए है, इसलिए की तरह है:

div[class="class1 class2 class3"] .inner, 
div[class="class1 class3 class2"] .inner, 
div[class="class2 class1 class3"] .inner, 
div[class="class2 class3 class1"] .inner, 
div[class="class3 class1 class2"] .inner, 
div[class="class3 class2 class1"] .inner { 
padding:1em; background:red; 
} 

लेकिन जैसा कि आप देख सकते हैं, यह है कुशल नहीं बिल्कुल ताकि आप सुनिश्चित करने के लिए होगा ऑर्डर सही है या जावास्क्रिप्ट समाधान का सहारा लेना है।

+1

डाउनवॉट क्यों? – Aziz

+1

मुझे नहीं था, लेकिन मैं इसका अनुमान लगा रहा हूं क्योंकि यह बच्चे के लिए लागू होगा यदि मूल तत्व के पास कक्षा 4 भी था (मैं यह भी सोच रहा था कि डाउनवोट क्यों और फिर प्रश्न को पढ़ना पड़ा) – Pete

+1

मैंने डाउनवोट नहीं किया, लेकिन क्या आप वास्तव में उस प्रश्न को समझ सकते हैं? –

1

अज़ीज़ ने मेरी राय में सबसे अच्छा जवाब पोस्ट किया, लेकिन यह करने का एक और तरीका है।

.class1.class2.class3:not(.class4) .innerClass { 
     /* Style here */ 
} 

https://developer.mozilla.org/en-US/docs/Web/CSS/:not

यह केवल IE9 द्वारा समर्थित है +

+1

और यदि कक्षा 5 है? – Aziz

+0

बस सभी मामलों के लिए 'नहीं' छद्म वर्ग जोड़ना जारी रखें। ऐसा लगता है कि ओपी के पास सीएसएस पर कोई नियंत्रण नहीं है जो स्पष्ट रूप से एक समस्या है और गन्दा सीएसएस –

4

हैं वर्गों के आदेश काफी बेतरतीब है, तो आप इसे का उपयोग फ़िल्टर कर सकते हैं:

$('.class1.class2.class3').filter(function(){ 
    return this.classList.length === 3; 
}).find('.innerClass').css({prop: value}); 

आप पुराने ब्राउज़र के लिए polyfill मिल सकता है classList समर्थन के बारे में या सिर्फ className विभाजित करें।

+1

हाहाहा के लिए तैयार करेगा, पूरी तरह से jquery टैग नहीं देखा! – Pete

1

यहां यह है। एक मुद्दा है, कि आप तीसरे वर्ग के 'समान मिश्रित' पर ध्यान दे सकते हैं: यह केवल तभी काम करता है जब कक्षाएं इस क्रम पर लिखी जाती हैं।

div[class='class1 class2 class3'] > .innerClass { 
 
    background-color: gold; 
 
} 
 

 
.innerClass { 
 
    margin:5px; 
 
    width:100px; 
 
    height:100px; 
 
    float:left 
 
}
<div class="class1 class2"> 
 
<div class="innerClass" style="outline:2px solid black">one class less</div> 
 
</div> 
 

 
<div class="class1 class2 class3"> 
 
<div class="innerClass" style="outline:2px solid black">exact classes</div> 
 
</div> 
 

 
<div class="class2 class3 class1"> 
 
<div class="innerClass" style="outline:2px solid black">same mixed</div> 
 
</div> 
 

 
<div class="class1 class2 class3 class4"> 
 
<div class="innerClass" style="outline:2px solid black">one class more</div> 
 
</div>

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