प्लस साइन ( +
) अगले भाई-बहन के लिए है।
क्या पिछले भाई-बहन के लिए एक समान है?
प्लस साइन ( +
) अगले भाई-बहन के लिए है।
क्या पिछले भाई-बहन के लिए एक समान है?
जवाबों:
नहीं, कोई "पिछला सिबलिंग" चयनकर्ता नहीं है।
एक संबंधित नोट पर, ~
सामान्य उत्तराधिकारी सहोदर के लिए है (जिसका अर्थ है कि तत्व इस एक के बाद आता है, लेकिन जरूरी नहीं कि तुरंत बाद) और एक CSS3 चयनकर्ता है। +
अगले भाई के लिए है और CSS2.1 है।
सिलेक्टर्स लेवल 3 से एडजस्टेंट सिबलिंग कॉम्बिनेटर देखें और कैस्केडिंग स्टाइल शीट्स लेवल 2 रिविजन 1 (सीएसएस 2.1) स्पेसिफिकेशन से सटे सिबलिंग सिलेक्टर्स ।
मुझे पिछले सभी भाई-बहनों (विपरीत ~
) को स्टाइल करने का एक तरीका मिला जो आपकी ज़रूरत के आधार पर काम कर सकता है।
मान लें कि आपके पास लिंक की एक सूची है और जब एक पर मँडराते हैं, तो पिछले सभी को लाल होना चाहिए। आप इसे इस तरह से कर सकते हैं:
/* default link color is blue */
.parent a {
color: blue;
}
/* prev siblings should be red */
.parent:hover a {
color: red;
}
.parent a:hover,
.parent a:hover ~ a {
color: blue;
}
<div class="parent">
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
<a href="#">link</a>
</div>
float:right
) में। इसके लिए इकाइयों / शब्दों और मार्जिन के बजाय पैडिंग के बीच एक सफेद-स्थान के पतन की आवश्यकता थी, लेकिन यह पूरी तरह से अन्यथा काम करता है!
चयनकर्ता स्तर 4 परिचय:has()
(पहले विषय सूचक !
) जो आपको पिछले भाई-बहन का चयन करने की अनुमति देगा:
previous:has(+ next) {}
... लेकिन लेखन के समय, यह ब्राउज़र समर्थन के लिए रक्तस्राव के किनारे से कुछ दूरी पर है।
:has()
छद्म श्रेणी का उपयोग नहीं कर सकता है ।
order
फ्लेक्स और ग्रिड लेआउट की संपत्ति पर विचार करें ।मैं नीचे दिए गए उदाहरणों में flexbox पर ध्यान केंद्रित करूँगा, लेकिन वही अवधारणाएं ग्रिड पर लागू होती हैं।
फ्लेक्सबॉक्स के साथ, पिछले सिबलिंग सिलेक्टर का अनुकरण किया जा सकता है।
विशेष रूप से, फ्लेक्स order
संपत्ति स्क्रीन के चारों ओर तत्वों को स्थानांतरित कर सकती है।
यहाँ एक उदाहरण है:
आप चाहते हैं कि तत्व A लाल हो जाए जब तत्व B होवर हो जाए।
<ul> <li>A</li> <li>B</li> </ul>
कदम
ul
एक फ्लेक्स कंटेनर बनाएं ।
ul { display: flex; }
मार्क-अप में भाई-बहनों के आदेश को उलट दें।
<ul>
<li>B</li>
<li>A</li>
</ul>
एलिमेंट ए ( ~
या +
करोगे) को टारगेट करने के लिए सिबलिंग सिलेक्टर का इस्तेमाल करें ।
li:hover + li { background-color: red; }
order
दृश्य प्रदर्शन पर भाई-बहनों के आदेश को पुनर्स्थापित करने के लिए फ्लेक्स संपत्ति का उपयोग करें ।
li:last-child { order: -1; }
... और आवाज! एक पिछला सिबलिंग चयनकर्ता (या कम से कम नकली) पैदा होता है।
यहाँ पूर्ण कोड है:
ul {
display: flex;
}
li:hover + li {
background-color: red;
}
li:last-child {
order: -1;
}
/* non-essential decorative styles */
li {
height: 200px;
width: 200px;
background-color: aqua;
margin: 5px;
list-style-type: none;
cursor: pointer;
}
<ul>
<li>B</li>
<li>A</li>
</ul>
Flexbox कल्पना से:
5.4। प्रदर्शन आदेश:
order
संपत्तिफ्लेक्स आइटम डिफ़ॉल्ट रूप से, उसी क्रम में प्रदर्शित और निर्धारित किए जाते हैं जैसे वे स्रोत दस्तावेज़ में दिखाई देते हैं।
order
संपत्ति इस क्रम बदलने के लिए इस्तेमाल किया जा सकता।
order
संपत्ति नियंत्रण जिस क्रम में फ्लेक्स आइटम फ्लेक्स कंटेनर के भीतर दिखाई देते हैं, उन्हें क्रमसूचक समूहों को बताए द्वारा। यह एक एकल<integer>
मान लेता है , जो निर्दिष्ट करता है कि फ्लेक्स आइटम किस क्रमिक समूह से संबंधित है।
order
सभी फ्लेक्स आइटम के लिए प्रारंभिक मान 0 है।
order
सीएसएस ग्रिड लेआउट कल्पना में भी देखें ।
फ्लेक्स order
संपत्ति के साथ बनाए गए "पिछले भाई के चयनकर्ताओं" के उदाहरण ।
.container { display: flex; }
.box5 { order: 1; }
.box5:hover + .box4 { background-color: orangered; font-size: 1.5em; }
.box6 { order: -4; }
.box7 { order: -3; }
.box8 { order: -2; }
.box9 { order: -1; }
.box9:hover ~ :not(.box12):nth-child(-1n+5) { background-color: orangered;
font-size: 1.5em; }
.box12 { order: 2; }
.box12:hover ~ :nth-last-child(-1n+2) { background-color: orangered;
font-size: 1.5em; }
.box21 { order: 1; }
.box21:hover ~ .box { background-color: orangered; font-size: 1.5em; }
/* non-essential decorative styles */
.container {
padding: 5px;
background-color: #888;
}
.box {
height: 50px;
width: 75px;
margin: 5px;
background-color: lightgreen;
display: flex;
justify-content: center;
align-items: center;
text-align: center;
cursor: pointer;
}
<p>
Using the flex <code>order</code> property to construct a previous sibling selector
</p>
<div class="container">
<div class="box box1"><span>1</span></div>
<div class="box box2"><span>2</span></div>
<div class="box box3"><span>3</span></div>
<div class="box box5"><span>HOVER ME</span></div>
<div class="box box4"><span>4</span></div>
</div>
<br>
<div class="container">
<div class="box box9"><span>HOVER ME</span></div>
<div class="box box12"><span>HOVER ME</span></div>
<div class="box box6"><span>6</span></div>
<div class="box box7"><span>7</span></div>
<div class="box box8"><span>8</span></div>
<div class="box box10"><span>10</span></div>
<div class="box box11"><span>11</span></div>
</div>
<br>
<div class="container">
<div class="box box21"><span>HOVER ME</span></div>
<div class="box box13"><span>13</span></div>
<div class="box box14"><span>14</span></div>
<div class="box box15"><span>15</span></div>
<div class="box box16"><span>16</span></div>
<div class="box box17"><span>17</span></div>
<div class="box box18"><span>18</span></div>
<div class="box box19"><span>19</span></div>
<div class="box box20"><span>20</span></div>
</div>
फ्लेक्सबॉक्स सीएसएस के बारे में लंबे समय से आयोजित विश्वासों को चकनाचूर कर रहा है।
ऐसा ही एक विश्वास है कि पिछले भाई-बहन का चयन सीएसएस में संभव नहीं है ।
यह कहना कि यह विश्वास व्यापक है एक समझ होगी। यहां केवल स्टैक ओवरफ्लो पर संबंधित प्रश्नों का एक नमूना है:
जैसा कि ऊपर वर्णित है, यह विश्वास पूरी तरह से सच नहीं है। पिछली order
संपत्ति के चयनकर्ता को फ्लेक्स संपत्ति का उपयोग करके सीएसएस में नकली किया जा सकता है।
z-index
मिथक
एक और लंबे समय से चली आ रही मान्यता है जो z-index
केवल तैनात तत्वों पर काम करती है।
वास्तव में, कल्पना का सबसे वर्तमान संस्करण - डब्ल्यू 3 सी संपादक का मसौदा - अभी भी यह सच होने का दावा करता है:
9.9.1 स्टैक स्तर निर्दिष्ट करना:
z-index
संपत्ति
z-index
- मूल्य: ऑटो | | इनहेरिट
- प्रारंभिक: ऑटो
- पर लागू होता है: तत्वों को तैनात किया
- इन्हेरिटेड: नहीं
- प्रतिशत: एन / ए
- मीडिया: दृश्य
- कंप्यूटेड वैल्यू: जैसा कि निर्दिष्ट है
(महत्व दिया)
वास्तव में, हालांकि, यह जानकारी अप्रचलित और गलत है।
तत्वों है कि कर रहे हैं फ्लेक्स आइटम या ग्रिड आइटम संदर्भों भी स्टैकिंग जब बना सकते हैं position
है static
।
4.3। फ्लेक्स आइटम जेड-ऑर्डरिंग
फ्लेक्स आइटम वास्तव में इनलाइन ब्लॉक के रूप में एक ही रंग, इसी क्रम संशोधित दस्तावेज़ आदेश कच्चे दस्तावेज़ आदेश के स्थान पर प्रयोग किया जाता है को छोड़कर, और
z-index
अतिरिक्त अन्य मानauto
भले ही एक स्टैकिंग प्रसंग बनाposition
हैstatic
।5.4। Z- अक्ष क्रम:
z-index
संपत्तिग्रिड मदों की पेंटिंग आदेश वास्तव में, इनलाइन ब्लॉक के रूप में ही है कि आदेश संशोधित दस्तावेज़ आदेश को छोड़कर कच्चे दस्तावेज़ आदेश के स्थान पर प्रयोग किया जाता है, और
z-index
अतिरिक्त अन्य मानauto
भले ही एक स्टैकिंग प्रसंग बनाposition
हैstatic
।
यहां z-index
गैर-तैनात फ्लेक्स आइटम पर काम करने का एक प्रदर्शन है : https://jsfiddle.net/m0wddwxs/
order
संपत्ति के लिए एक समाधान है, क्योंकि यह पूरी तरह से बदलने के लिए करना है नहीं है दृश्य आदेश, तो यह करता है नहीं मूल बहाल semantical आदेश है कि आप काम करने के लिए इस समाधान के लिए HTML में परिवर्तन करने के लिए मजबूर कर रहे हैं।
z-index
"ओएमजी" होने पर भी काम कैसे होगा, तो position
निर्दिष्ट नहीं है! ", विनिर्देश में स्टैकिंग संदर्भ की अवधारणा का उल्लेख किया गया है , जिसे एमडीएन पर इस लेख
float: right
(या किसी अन्य साधन से आदेश को उल्टा कर सकती है, जिसके flex/order
कम (कम से कम? दुष्प्रभाव) हैं। दो fiddles ऊपर मार पड़ी है: प्रदर्शन float: right
दृष्टिकोण , और प्रदर्शनdirection: rtl
मेरे पास एक ही सवाल था, लेकिन तब मेरे पास "डुह" पल था। लिखने के बजाय
x ~ y
लिखो
y ~ x
जाहिर है कि यह "y" के बजाय "x" से मेल खाता है, लेकिन यह उत्तर देता है "क्या कोई मेल है?" जावास्क्रिप्ट में लूपिंग की तुलना में प्रश्न और सरल DOM ट्रैवर्सल आपको सही तत्व से अधिक कुशलता से प्राप्त कर सकते हैं।
मुझे पता है कि मूल प्रश्न एक सीएसएस प्रश्न था, इसलिए यह उत्तर शायद पूरी तरह से अप्रासंगिक है, लेकिन अन्य जावास्क्रिप्ट उपयोगकर्ता इस प्रश्न पर ठोकर खा सकते हैं जैसे मैंने किया था।
y ~ x
मैं अपनी समस्या को कैसे हल कर सकता हूं
y ~ x
जवाब नहीं है "क्या कोई मैच है?" सवाल, क्योंकि यहां दिए गए दो चयनकर्ताओं का मतलब पूरी तरह से अलग है। कोई तरीका नहीं है जो y ~ x
कभी भी <root><x/><y/></root>
उदाहरण के लिए सबट्री दिए गए एक मैच का उत्पादन कर सके । यदि सवाल है "क्या y मौजूद है?" तो चयनकर्ता बस है y
। यदि प्रश्न है "क्या किसी भी स्थिति में y को एक भाई x दिया गया है?" तब आपको दोनों चयनकर्ताओं की आवश्यकता होगी । (हालांकि शायद मैं सिर्फ इस बिंदु पर nitpicking हूँ ...)
दो टोटके । मूल रूप से HTML में अपने इच्छित तत्वों के HTML क्रम में और
~
अगले भाई-बहन ऑपरेटर का उपयोग करके :
float-right
+ HTML तत्वों के क्रम को उलटाdiv{ /* Do with the parent whatever you know just to make the
inner float-right elements appear where desired */
display:inline-block;
}
span{
float:right; /* float-right the elements! */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
background:red;
}
<div>
<!-- Reverse the order of inner elements -->
<span>5</span>
<span>4</span>
<span>3</span>
<span>2</span>
<span>1</span>
</div>
direction: rtl;
आंतरिक तत्वों के क्रम के साथ जनक + उलटा.inverse{
direction: rtl;
display: inline-block; /* inline-block to keep parent at the left of window */
}
span:hover ~ span{ /* On hover target it's "previous";) elements */
background:gold;
}
Hover one span and see the previous elements being targeted!<br>
<div class="inverse">
<!-- Reverse the order of inner elements -->
<span>5</span>
<span>4</span>
<span>3</span>
<span>2</span>
<span>1</span>
</div>
+
अगले भाई-बहन के लिए है। क्या पिछले भाई-बहन के लिए एक समान है?
!
और?
कर रहे हैं 2 बाद में भाई चयनकर्ताओं पारंपरिक सीएसएस में:
+
है तत्काल बाद भाई चयनकर्ता~
है किसी भी बाद में भाई चयनकर्तापारंपरिक सीएसएस में, पिछले सिबलिंग चयनकर्ता नहीं है ।
हालाँकि, कुल्हाड़ी सीएसएस पोस्ट-प्रोसेसर लाइब्रेरी में, 2 पिछले भाई-बहन चयनकर्ता हैं :
?
है तत्काल (के विपरीत पिछले भाई चयनकर्ता +
)!
है किसी भी (के विपरीत पिछले भाई चयनकर्ता ~
)काम करने का उदाहरण:
नीचे दिए गए उदाहरण में:
.any-subsequent:hover ~ div
किसी भी बाद का चयन करता है div
.immediate-subsequent:hover + div
तत्काल बाद का चयन करता है div
.any-previous:hover ! div
किसी भी पिछले का चयन करता है div
.immediate-previous:hover ? div
तत्काल पिछले का चयन करता है div
div {
display: inline-block;
width: 60px;
height: 100px;
color: rgb(255, 255, 255);
background-color: rgb(255, 0, 0);
text-align: center;
vertical-align: top;
cursor: pointer;
opacity: 0;
transition: opacity 0.6s ease-out;
}
code {
display: block;
margin: 4px;
font-size: 24px;
line-height: 24px;
background-color: rgba(0, 0, 0, 0.5);
}
div:nth-of-type(-n+4) {
background-color: rgb(0, 0, 255);
}
div:nth-of-type(n+3):nth-of-type(-n+6) {
opacity: 1;
}
.any-subsequent:hover ~ div,
.immediate-subsequent:hover + div,
.any-previous:hover ! div,
.immediate-previous:hover ? div {
opacity: 1;
}
<h2>Hover over any of the blocks below</h2>
<div></div>
<div></div>
<div class="immediate-previous">Hover for <code>?</code> selector</div>
<div class="any-previous">Hover for <code>!</code> selector</div>
<div class="any-subsequent">Hover for <code>~</code> selector</div>
<div class="immediate-subsequent">Hover for <code>+</code> selector</div>
<div></div>
<div></div>
<script src="https://rouninmedia.github.io/axe/axe.js"></script>
आप HTML में तत्वों के क्रम का उलटा उपयोग कर सकते हैं। इसके बाद Michael_B के उत्तर केorder
रूप में उपयोग करने के अलावा आप अपने लेआउट पर उपयोग या निर्भर कर सकते हैं ।flex-direction: row-reverse;
flex-direction: column-reverse;
काम का नमूना:
.flex {
display: flex;
flex-direction: row-reverse;
/* Align content at the "reversed" end i.e. beginning */
justify-content: flex-end;
}
/* On hover target its "previous" elements */
.flex-item:hover ~ .flex-item {
background-color: lime;
}
/* styles just for demo */
.flex-item {
background-color: orange;
color: white;
padding: 20px;
font-size: 3rem;
border-radius: 50%;
}
<div class="flex">
<div class="flex-item">5</div>
<div class="flex-item">4</div>
<div class="flex-item">3</div>
<div class="flex-item">2</div>
<div class="flex-item">1</div>
</div>
इस समय ऐसा करने का कोई आधिकारिक तरीका नहीं है लेकिन आप इसे प्राप्त करने के लिए थोड़ी सी चाल का उपयोग कर सकते हैं! याद रखें कि यह प्रायोगिक है और इसकी कुछ सीमा है ... ( इस लिंक की जाँच करें यदि आप नेविगेटर संगतता के बारे में चिंता करते हैं)
आप क्या कर सकते हैं एक CSS3 चयनकर्ता का उपयोग करें: छद्म आवरण जिसे कहा जाता है nth-child()
#list>* {
display: inline-block;
padding: 20px 28px;
margin-right: 5px;
border: 1px solid #bbb;
background: #ddd;
color: #444;
margin: 0.4em 0;
}
#list :nth-child(-n+4) {
color: #600b90;
border: 1px dashed red;
background: orange;
}
<p>The oranges elements are the previous sibling li selected using li:nth-child(-n+4)</p>
<div id="list">
<span>1</span><!-- this will be selected -->
<p>2</p><!-- this will be selected -->
<p>3</p><!-- this will be selected -->
<div>4</div><!-- this will be selected -->
<div>5</div>
<p>6</p>
<p>7</p>
<p>8</p>
<p>9</p>
</div>
:nth-child(-n+4)
एक छद्म वर्ग है जिसे ठीक से काम करने के लिए एक चयनकर्ता पर लागू होना चाहिए। यदि आप आश्वस्त नहीं हैं, तो मेरी
*
चयनकर्ता का उपयोग करके नोड-टाइप स्वतंत्र जा सकते हैं , लेकिन यह अप्रिय रूप से बुरा व्यवहार है।
li#someListItem
और मैं इसके पहले नोड (ओं) को चाहता था (जो कि मैं "पिछले" की व्याख्या करता हूं) - मैं नहीं देखता कि आपने जो जानकारी प्रदान की है वह मुझे सीएसएस के माध्यम से व्यक्त करने में मदद कर सकती है। आप बस पहले n भाई-बहन का चयन कर रहे हैं, और मान लीजिए कि मैं n को जानता हूं। इस तर्क के आधार पर, कोई भी चयनकर्ता चाल कर सकता है और मुझे (जैसे: नहीं:) की आवश्यकता होती है।
यदि आप जानते हैं कि सटीक स्थिति :nth-child()
सभी भाई-बहनों के काम का बहिष्करण काम करेगा।
ul li:not(:nth-child(n+3))
जो li
3 से पहले सभी का चयन करेगा (उदाहरण के लिए 1 और 2)। लेकिन, मेरी राय में यह बदसूरत लग रहा है और इसमें बहुत तंग usecase है।
आप nth-child को दाएँ-से-बाएँ भी चुन सकते हैं:
ul li:nth-child(-n+2)
जो ऐसा ही करता है।
यह सीएसएस के माध्यम से संभव नहीं है। यह "कैस्केड" को दिल तक ले जाता है ;-)।
हालाँकि, यदि आप अपने पेज में जावास्क्रिप्ट जोड़ने में सक्षम हैं, तो थोड़ा सा jQuery आपको अपने अंतिम लक्ष्य तक पहुंचा सकता है।
आप find
अपने लक्ष्य तत्व / वर्ग / आईडी पर "लुक-फॉरवर्ड" करने के लिए jQuery का उपयोग कर सकते हैं , फिर अपने लक्ष्य का चयन करने के लिए पीछे हट सकते हैं।
तब आप अपने तत्व के लिए DOM (CSS) को फिर से लिखने के लिए jQuery का उपयोग करते हैं।
माइक ब्रैंट के इस जवाब के आधार पर , निम्नलिखित jQuery स्निपेट मदद कर सकता है।
$('p + ul').prev('p')
यह पहले उन सभी का चयन करता है <ul>
जो तुरंत a का अनुसरण करते हैं <p>
।
फिर यह <p>
s के उस सेट से सभी पिछले s का चयन करने के लिए "backtracks" है <ul>
।
प्रभावी रूप से, "पिछले भाई-बहन" को jQuery के माध्यम से चुना गया है।
अब, .css
उस तत्व के लिए अपने सीएसएस नए मूल्यों में पारित करने के लिए फ़ंक्शन का उपयोग करें ।
मेरे मामले में मैं आईडी के साथ एक डीआईवाई का चयन करने का एक तरीका ढूंढ रहा था #full-width
, लेकिन केवल तभी अगर इसमें (अप्रत्यक्ष) डीवाई के वर्ग के साथ वंशज था .companies
।
मेरे पास सभी HTML का नियंत्रण था .companies
, लेकिन इसके ऊपर के किसी भी HTML को बदल नहीं सकता था।
और झरना केवल 1 दिशा: नीचे जाता है।
इस प्रकार मैं सभी का चयन कर सकता हूं #full-width
।
या मैं चुन सकता है .companies
कि केवल एक का पालन किया #full-width
।
लेकिन मैं केवल वही नहीं चुन सका #full-width
जो आगे बढ़ा .companies
।
और, फिर से, मैं जोड़ने में असमर्थ था .companies
HTML में किसी भी उच्च । HTML का वह भाग बाहरी रूप से लिखा गया था, और हमारे कोड से लिपटा हुआ था।
लेकिन jQuery के साथ, मैं आवश्यक s का चयन कर सकता हूं #full-width
, फिर उपयुक्त शैली असाइन करें:
$("#full-width").find(".companies").parents("#full-width").css( "width", "300px" );
यह सभी पाता है #full-width .companies
, और बस उन का चयन करता है .companies
, जो सीएसएस में मानक तत्वों को लक्षित करने के लिए कैसे चयनकर्ताओं के समान हैं।
फिर यह .parents
"बैकट्रैक" का उपयोग करता है और सभी माता-पिता का चयन करता है .companies
,
लेकिन उन परिणामों को केवल #fill-width
तत्वों को रखने के लिए फ़िल्टर करता है, ताकि अंत में,
यह केवल एक #full-width
तत्व का चयन करता है यदि इसमें एक .companies
वर्ग अवरोही है।
अंत में, यह width
परिणामी तत्व को एक नया CSS ( ) मान प्रदान करता है ।
$(".parent").find(".change-parent").parents(".parent").css( "background-color", "darkred");
div {
background-color: lightblue;
width: 120px;
height: 40px;
border: 1px solid gray;
padding: 5px;
}
.wrapper {
background-color: blue;
width: 250px;
height: 165px;
}
.parent {
background-color: green;
width: 200px;
height: 70px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<html>
<div class="wrapper">
<div class="parent">
"parent" turns red
<div class="change-parent">
descendant: "change-parent"
</div>
</div>
<div class="parent">
"parent" stays green
<div class="nope">
descendant: "nope"
</div>
</div>
</div>
Target <b>"<span style="color:darkgreen">parent</span>"</b> to turn <span style="color:red">red</span>.<br>
<b>Only</b> if it <b>has</b> a descendant of "change-parent".<br>
<br>
(reverse cascade, look ahead, parent un-descendant)
</html>
jQuery संदर्भ डॉक्स:
$ () या jQuery () : DOM तत्व।
। खोजें : चयनित तत्व के वर्तमान सेट में प्रत्येक तत्व के वंशजों को प्राप्त करें, एक चयनकर्ता, jQuery ऑब्जेक्ट या तत्व द्वारा फ़िल्टर किया गया।
। माता-पिता : मिलान तत्वों के सेट में प्रत्येक तत्व के तुरंत पूर्ववर्ती सिबलिंग प्राप्त करें। यदि एक चयनकर्ता प्रदान किया जाता है, तो यह पिछली सिबलिंग को केवल तभी पुनर्प्राप्त करता है जब यह मेल खाता है कि चयनकर्ता (परिणामों को केवल सूचीबद्ध तत्वों / चयनकर्ताओं को शामिल करता है)।
। सीएसएस : मिलान तत्वों के सेट के लिए एक या अधिक सीएसएस गुण सेट करें।
previousElementSibling
)।
previousElementSibling()
देशी जेएस डोम कार्यों से अधिक परिचित लोगों के लिए एक और गैर-सीएसएस पथ आगे प्रदान कर सकता है ।
+
(गैर-मौजूद) चयनकर्ता का उपयोग करता है जो ओपी ने विशेष रूप से पूछा है। इस उत्तर पर एक जेएस "हैक" पर विचार करें। यह यहाँ किसी और को बचाने के लिए समय है जब मैंने एक समाधान खोजने के लिए खर्च किया।
दुर्भाग्य से कोई "पिछला" भाई-बहन का चयन करने वाला नहीं है, लेकिन आप संभवतः कर सकते हैं स्थिति (उदाहरण के लिए दाईं ओर) का उपयोग करके समान प्रभाव प्राप्त । यह इस बात पर निर्भर करता है कि आप क्या करने की कोशिश कर रहे हैं।
मेरे मामले में, मैं मुख्य रूप से CSS 5-स्टार रेटिंग सिस्टम चाहता था। मुझे पिछले सितारों को रंग (या आइकन स्वैप) करने की आवश्यकता होगी। प्रत्येक तत्व को सही से तैरने से, मुझे अनिवार्य रूप से एक ही प्रभाव मिल रहा है (तारों के लिए HTML इस प्रकार 'पीछे की ओर लिखा जाना चाहिए')।
मैं इस उदाहरण में FontAwesome का उपयोग कर रहा हूं और fa-star-o और fa-star के यूनिकोड के बीच स्वैप कर रहा हूं http://fortawesome.github.io/Font-Awesome/
सीएसएस:
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
/* set all stars to 'empty star' */
.stars-container {
display: inline-block;
}
/* set all stars to 'empty star' */
.stars-container .star {
float: right;
display: inline-block;
padding: 2px;
color: orange;
cursor: pointer;
}
.stars-container .star:before {
content: "\f006"; /* fontAwesome empty star code */
}
/* set hovered star to 'filled star' */
.star:hover:before{
content: "\f005"; /* fontAwesome filled star code */
}
/* set all stars after hovered to'filled star'
** it will appear that it selects all after due to positioning */
.star:hover ~ .star:before {
content: "\f005"; /* fontAwesome filled star code */
}
HTML: (40)
+
या ~
चयनकर्ताओं मेरे चारों ओर साफ कार्य के रूप में बनाता है।
आपके सटीक उद्देश्य के आधार पर, एक का उपयोग किए बिना एक माता-पिता चयनकर्ता की उपयोगिता को प्राप्त करने का एक तरीका है (भले ही कोई भी मौजूद हो ...
कहो हमारे पास:
<div>
<ul>
<li><a>Pants</a></li>
<li><a>Socks</a></li>
<ul>
<li><a>White socks</a></li>
<li><a>Blue socks</a></li>
</ul>
</ul>
</div>
हम Socks ब्लॉक बनाने के लिए क्या कर सकते हैं (जुर्राब रंगों सहित) नेत्रहीन रिक्ति का उपयोग कर बाहर खड़े हो जाओ?
क्या अच्छा होगा लेकिन मौजूद नहीं है:
ul li ul:parent {
margin-top: 15px;
margin-bottom: 15px;
}
क्या मौजूद है:
li > a {
margin-top: 15px;
display: block;
}
li > a:only-child {
margin-top: 0px;
}
यह सभी एंकर लिंक को शीर्ष पर 15px मार्जिन सेट करता है और LI के अंदर कोई UL तत्वों (या अन्य टैग) वाले लोगों के लिए इसे 0 पर वापस सेट करता है।
मुझे पिछले सिबलिंग ट्रे को चुनने के लिए एक समाधान की आवश्यकता थी। मैं रिएक्ट और स्टाइल-घटकों का उपयोग करके इस समाधान के साथ आया था। यह मेरा सटीक समाधान नहीं है (यह स्मृति से है, घंटों बाद)। मुझे पता है कि setHighlighterRow फ़ंक्शन में कोई दोष है।
OnMouseOver एक पंक्ति राज्य के लिए पंक्ति अनुक्रमणिका सेट करेगा, और पिछली पंक्ति को नए पृष्ठभूमि रंग के साथ पुन: प्रस्तुत करेगा
class ReactClass extends Component {
constructor() {
this.state = {
highlightRowIndex: null
}
}
setHighlightedRow = (index) => {
const highlightRowIndex = index === null ? null : index - 1;
this.setState({highlightRowIndex});
}
render() {
return (
<Table>
<Tbody>
{arr.map((row, index) => {
const isHighlighted = index === this.state.highlightRowIndex
return {
<Trow
isHighlighted={isHighlighted}
onMouseOver={() => this.setHighlightedRow(index)}
onMouseOut={() => this.setHighlightedRow(null)}
>
...
</Trow>
}
})}
</Tbody>
</Table>
)
}
}
const Trow = styled.tr`
& td {
background-color: ${p => p.isHighlighted ? 'red' : 'white'};
}
&:hover {
background-color: red;
}
`;
मुझे एक समान समस्या थी और पता चला कि इस प्रकृति की सभी समस्याओं को निम्नानुसार हल किया जा सकता है:
और इस तरह आप अपने वर्तमान, पिछले आइटम (वर्तमान और अगले आइटम के साथ ओवरराइड की गई सभी चीजें) और अपने अगले आइटम को स्टाइल कर पाएंगे।
उदाहरण:
/* all items (will be styled as previous) */
li {
color: blue;
}
/* the item i want to distinguish */
li.milk {
color: red;
}
/* next items */
li ~ li {
color: green;
}
<ul>
<li>Tea</li>
<li class="milk">Milk</li>
<li>Juice</li>
<li>others</li>
</ul>
आशा है कि यह किसी की मदद करता है।