सीएसएस अंतिम बच्चे का चयनकर्ता: विशिष्ट वर्ग के अंतिम तत्व का चयन करें, माता-पिता के अंदर अंतिम बच्चा नहीं?


176
<div class="commentList">
   <article class="comment " id="com21"></article>
   <article class="comment " id="com20"></article>
   <article class="comment " id="com19"></article>
   <div class="something"> hello </div>
</div>

मैं चयन करना चाहते हैं #com19?

.comment {
    width:470px;
    border-bottom:1px dotted #f0f0f0;
    margin-bottom:10px;
}

.comment:last-child {
    border-bottom:none;
    margin-bottom:0;
}

यह तब तक काम नहीं करता है जब तक मेरे पास div.somethingटिप्पणीकार में वास्तविक अंतिम बच्चे के रूप में एक और है। क्या अंतिम उपस्थिति का चयन करने के लिए इस मामले में अंतिम बच्चे के चयनकर्ता का उपयोग करना संभव है article.comment?

jsFiddle

जवाबों:


229

:last-childकेवल तब काम करता है जब प्रश्न में तत्व कंटेनर का अंतिम बच्चा होता है, न कि किसी विशिष्ट प्रकार के तत्व का। उसके लिए आपको चाहिए:last-of-type

http://jsfiddle.net/C23g6/3/

@ बोल्टकॉक की टिप्पणी के अनुसार, यह केवल अंतिम articleतत्व के लिए जाँच कर रहा है , वर्ग के साथ अंतिम तत्व नहीं .comment

body {
  background: black;
}

.comment {
  width: 470px;
  border-bottom: 1px dotted #f0f0f0;
  margin-bottom: 10px;
}

.comment:last-of-type {
  border-bottom: none;
  margin-bottom: 0;
}
<div class="commentList">
  <article class="comment " id="com21"></article>

  <article class="comment " id="com20"></article>

  <article class="comment " id="com19"></article>

  <div class="something"> hello </div>
</div>


146
यह वर्ग को नहीं देखता है, केवल प्रकार को, इसलिए यदि आप उसी वर्ग के साथ गैर-लेख करते हैं तो आपको अप्रत्याशित परिणाम मिलेंगे।
BoltClock

1
यह ठीक से काम करता है। हालांकि, अगर हमें कक्षा द्वारा तत्वों को कम करने की आवश्यकता है, तो यह फिर से काम नहीं करता है। jsfiddle.net/aliemreeee/a4H7f/2
अली इमरे makmakoğlu

12
इन उत्तरों के आधार पर, मुझे लगता है कि चयन करने का कोई तरीका नहीं है last-of-class
तोबुलकेह

14
तब तक नहीं जब तक CSS चयनकर्ता स्तर 4 को ब्राउज़र द्वारा स्वीकार और कार्यान्वित नहीं किया जाता है, जहाँ आपकी पहुँच :nth-match(selector)और होगी :nth-last-match(selector)। अधिक विवरण के लिए w3.org/TR/selectors4 देखें ।
क्रिस

1
या इसके बजाय, :nth-last-child(An+B of selector)जैसा :nth-last-match()कि उससे बहुत पहले गिरा दिया गया था, लेकिन उन्होंने WD को अपडेट करने की जहमत नहीं उठाई। देखें stackoverflow.com/questions/21167159/css-nth-match-doesnt-work/...
BoltClock

6

यदि आप तत्वों को तैर ​​रहे हैं तो आप ऑर्डर को उल्टा कर सकते हैं

के float: right;बजाय यानीfloat: left;

और फिर एक कक्षा के पहले बच्चे का चयन करने के लिए इस विधि का उपयोग करें।

/* 1: Apply style to ALL instances */
#header .some-class {
  padding-right: 0;
}
/* 2: Remove style from ALL instances except FIRST instance */
#header .some-class~.some-class {
  padding-right: 20px;
}

यह वास्तव में वर्ग को पिछले उदाहरण पर लागू कर रहा है क्योंकि यह अब उलटा क्रम में है।

यहाँ आप के लिए एक काम कर रहे उदाहरण है:

<!doctype html>
<head><title>CSS Test</title>
<style type="text/css">
.some-class { margin: 0; padding: 0 20px; list-style-type: square; }
.lfloat { float: left; display: block; }
.rfloat { float: right; display: block; }
/* apply style to last instance only */
#header .some-class {
  border: 1px solid red;
  padding-right: 0;
}
#header .some-class~.some-class {
  border: 0;
  padding-right: 20px;
}
</style>
</head>
<body>
<div id="header">
  <img src="some_image" title="Logo" class="lfloat no-border"/>
  <ul class="some-class rfloat">
    <li>List 1-1</li>
    <li>List 1-2</li>
    <li>List 1-3</li>
  </ul>
  <ul class="some-class rfloat">
    <li>List 2-1</li>
    <li>List 2-2</li>
    <li>List 2-3</li>
  </ul>
  <ul class="some-class rfloat">
    <li>List 3-1</li>
    <li>List 3-2</li>
    <li>List 3-3</li>
  </ul>
  <img src="some_other_img" title="Icon" class="rfloat no-border"/>
</div>
</body>
</html>

ध्यान दें कि यह काम नहीं करेगा यदि फ्लोटिंग तत्वों को अगली लाइन पर धकेल दिया जाए (अर्थात फ्लोट-राइट / लेफ्ट के लिए पर्याप्त क्षैतिज स्थान नहीं है)
ओजेजी

.some-class~.some-classमेरे लिए बहुत अच्छा काम करता है जब केवल 2 तत्वों को दोहराया जाता है।
मेलोमन

4

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

इस चयनकर्ता के साथ आपका परिदृश्य हल किया जा सकता है: .commentList .comment:nth-last-child(1 of .comment)

लेकिन तकनीकी रूप से सही होने का मतलब यह नहीं है कि आप इसका उपयोग कर सकते हैं, हालाँकि, यह चयनकर्ता अब केवल सफारी में लागू किया गया है।

आगे पढ़ने के लिए:


1

कुछ ऐसा जो मुझे लगता है कि यहाँ टिप्पणी की जानी चाहिए जो मेरे लिए काम करती है:

उपयोग :last-childआवश्यक स्थानों पर कई बार ताकि यह हमेशा अंतिम से अंतिम हो।

इसे उदाहरण के लिए लें:

.page.one .page-container .comment:last-child {
  color: red;
}
.page.two .page-container:last-child .comment:last-child {
  color: blue;
}
<p> When you use .comment:last-child </p>
<p> you only get the last comment in both parents </p>

<div class="page one">
  <div class="page-container">
    <p class="comment"> Something </p>
    <p class="comment"> Something </p>
  </div>

  <div class="page-container">
    <p class="comment"> Something </p>
    <p class="comment"> Something </p>
  </div>
</div>

<p> When you use .page-container:last-child .comment:last-child </p>
<p> you get the last page-container's, last comment </p>

<div class="page two">
  <div class="page-container">
    <p class="comment"> Something </p>
    <p class="comment"> Something </p>
  </div>

  <div class="page-container">
    <p class="comment"> Something </p>
    <p class="comment"> Something </p>
  </div>
</div>


0

इस समाधान के बारे में क्या?

div.commentList > article.comment:not(:last-child):last-of-type
{
    color:red; /*or whatever...*/
}

@lsblsb, आप articleयहां उपयोग करते हैं, इसलिए: (: अंतिम बच्चा) दिए गए उदाहरण के लिए आवश्यक नहीं है।
енвгений Масленков

क्या होगा यदि somethingमूल एचटीएमएल में वर्ग के साथ तत्व मौजूद नहीं है और गतिशील रूप से डाला जा रहा है hover? क्या यह समाधान विफल नहीं होगा?
Fr0zenFyr

-1

यदि अंतिम तत्व प्रकार लेख भी है, last-of-typeतो अपेक्षा के अनुरूप काम नहीं करेगा।

शायद मुझे समझ में नहीं आता कि यह कैसे काम करता है।

डेमो

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