පංතිය සමඟ පළමු අංගය සඳහා CSS තේරීම


982

මට පන්ති නාමයක් සහිත මූලද්‍රව්‍ය පොකුරක් ඇත red, නමුත් class="red"පහත දැක්වෙන CSS රීතිය භාවිතා කරමින් පළමු අංගය තෝරා ගැනීමට මට නොහැකි ය :

.red:first-child {
    border: 5px solid red;
}
<p class="red"></p>
<div class="red"></div>

මෙම තේරීම් කාරකයේ ඇති වැරැද්ද කුමක්ද සහ මම එය නිවැරදි කරන්නේ කෙසේද?

අදහස් දැක්වීම් වලට ස්තූතියි, මූලද්‍රව්‍යය තෝරා ගැනීම සඳහා එහි දෙමව්පියන්ගේ පළමු දරුවා විය යුතු බව මම හදුනා ගතිමි. මට පහත ව්‍යුහය ඇත, අදහස් දැක්වීමේදී මෙම නියමය අසමත් වේ:

.home .red:first-child {
    border: 1px solid red;
}
<div class="home">
    <span>blah</span>
    <p class="red">first</p>
    <p class="red">second</p>
    <p class="red">third</p>
    <p class="red">fourth</p>
</div>

පංතිය ඇති පළමු දරුවා ඉලක්ක කරන්නේ කෙසේද red?


මගේ උදාහරණයේ (p, div) විවිධ වර්ගයේ මූලද්‍රව්‍ය නිසා ව්‍යාකූලත්වයට පත්වන අය සඳහා, ඒවා එක හා සමාන කිරීමද ක්‍රියා නොකරන අතර ගැටළුව තවමත් පවතී.
රාජත්

4
මම හිතන්නේ මේ ආකාරයටයි: පළමු ළමා තේරීම්කරු වැඩ කළ යුතුව තිබුණේ ...
ෆීලික්ස් ඒව්

30
: පළමු දරුවා එවකට හොඳ නමක් නොවනු ඇත. ඔබට පුතෙකු හා පසුව දියණියක සිටී නම්, ඔබ ඔබේ දියණියට ඔබේ කුලුඳුලා යැයි නොකියනු ඇත. ඒ හා සමානව, පළමු .home> .red .home හි පළමු දරුවා නොවේ, එබැවින් එය එසේ හැඳින්වීම නුසුදුසු වනු ඇත.
බෝල්ට් ක්ලොක්

නැත, එය එසේ වන්නේ: පළමු වර්ගයේ වැඩ කළ යුතුව තිබුනේ
ඉවාන් තොම්සන්

AvEvanThompson වැඩ :first-of-type කරන්නේ එලෙසයි .
ටයිලර් එච්

Answers:


1465

කතුවරුන් :first-childක්‍රියා කරන ආකාරය වරදවා වටහා ගැනීම සඳහා මෙය වඩාත් ප්‍රසිද්ධ උදාහරණයකි . CSS2 හි හඳුන්වා දී ඇති :first-childව්‍යාජ පංතිය එහි මවුපියන්ගේ පළමු දරුවා නියෝජනය කරයි . ඒක තමයි. අනෙක් සංයුක්ත තේරීම් කාරක විසින් නිශ්චිතව දක්වා ඇති කොන්දේසි වලට ගැලපෙන පළමු ළමා මූලද්‍රව්‍යය කුමන එකක් දැයි එය ඉතා පොදු වැරදි මතයකි. තේරීම්කරුවන් වැඩ කරන ආකාරය නිසා ( පැහැදිලි කිරීමක් සඳහා මෙහි බලන්න ), එය සරලවම සත්‍ය නොවේ.

තේරීම් මට්ටම 3 :first-of-typeව්‍යාජ පන්තියක් හඳුන්වා දෙයි , එය එහි මූලද්‍රව්‍ය වර්ගයේ සහෝදර සහෝදරියන් අතර පළමු අංගය නියෝජනය කරයි. මෙම පිළිතුර නිදර්ශන සමඟ :first-childසහ අතර වෙනස පැහැදිලි කරයි :first-of-type. කෙසේ වෙතත්, මෙන් :first-child, එය වෙනත් කොන්දේසි හෝ ගුණාංග දෙස බලන්නේ නැත. HTML හි, මූලද්‍රව්‍ය වර්ගය ටැග් නාමයෙන් නිරූපණය කෙරේ. ප්රශ්නයේ දී, එම වර්ගය වේp .

අවාසනාවකට, දී ඇති :first-of-classපන්තියක පළමු ළමා අංගයට ගැලපීම සඳහා සමාන ව්‍යාජ පංතියක් නොමැත. එක සලසන වක් මගක් ලෙයා Verou මම (මුළුමනින්ම ස්වාධීනව වුවත්) මේ සඳහා සමග පැමිණි පළමු ඔබේ අපේක්ෂිත මෝස්තර අයදුම් කිරීමට ය සියලු පන්ති සමඟ ඔබේ මූලද්රව්ය:

/* 
 * Select all .red children of .home, including the first one,
 * and give them a border.
 */
.home > .red {
    border: 1px solid red;
}

... පසුව "අහෝසි" බව පන්තිය සමග අංග සඳහා මෝස්තර පළමු එක් අනුව එන්න භාවිතා පොදු සහෝදර සහෝදරියන් combinator~ උපදේශය පාලනයේ:

/* 
 * Select all but the first .red child of .home,
 * and remove the border from the previous rule.
 */
.home > .red ~ .red {
    border: none;
}

දැන් class="red"මායිමක් ඇත්තේ පළමු මූලද්‍රව්‍යය සමඟ පමණි .

නීති රීති ක්‍රියාත්මක කරන ආකාරය පිළිබඳ නිදර්ශනයක් මෙන්න:

<div class="home">
  <span>blah</span>         <!-- [1] -->
  <p class="red">first</p>  <!-- [2] -->
  <p class="red">second</p> <!-- [3] -->
  <p class="red">third</p>  <!-- [3] -->
  <p class="red">fourth</p> <!-- [3] -->
</div>
  1. නීති රීති අදාළ නොවේ; දේශ සීමාවක් ඉදිරිපත් නොකෙරේ.
    මෙම මූලද්රව්යයට පන්තිය නොමැත red, එබැවින් එය මඟ හැරී ඇත.

  2. පළමු රීතිය පමණක් අදාළ වේ; රතු මායිමක් විදහා දක්වයි.
    මෙම මූලද්රව්යයට පංතිය ඇත red, නමුත් එය redඑහි මවුපියන් තුළ පන්තිය සමඟ කිසිදු මූලද්රව්යයකට පෙර නොවේ . මේ අනුව දෙවන රීතිය අදාළ නොවේ, පළමු පමණක් වන අතර මූලද්රව්යය එහි මායිම තබා ගනී.

  3. නීති දෙකම අදාළ වේ; දේශ සීමාවක් ඉදිරිපත් නොකෙරේ.
    මෙම මූලද්රව්යයට පන්තිය redඇත. එය පංතිය සමඟ අවම වශයෙන් එක් මූලද්‍රව්‍යයකින්වත් පෙර redවේ. මේ අනුව නීති දෙකම ක්‍රියාත්මක වන අතර දෙවන borderප්‍රකාශය පළමුවැන්න අභිබවා යන අතර එමඟින් එය “අහෝසි” කරයි.

ප්රසාද ලෙස, එය තේරීම් 3 හඳුන්වා තිබුණත් සාමාන්ය සහෝදර සහෝදරියන් combinator සෑහෙන්න IE7 විසින් හොඳින් සහාය සහ නව ඇත, මෙන් නොව :first-of-typeහා:nth-of-type() පමණක් ගමන් IE9 සහාය දක්වයි. ඔබට හොඳ බ්‍රව්සර් සහාය අවශ්‍ය නම්, ඔබ වාසනාවන්තයි.

ඇත්ත වශයෙන්ම, මෙම තාක්‍ෂණයේ ඇති එකම වැදගත් අංගය වන්නේ සහෝදර සහෝදරියන් වන අතර එයට එවැනි පුදුමාකාර බ්‍රව්සර් ආධාරකයක් තිබීම මෙම තාක්‍ෂණය ඉතා විවිධාකාර කරයි - පන්ති තේරීම් කරුවන්ට අමතරව වෙනත් දේවලින් මූලද්‍රව්‍ය පෙරීම සඳහා ඔබට එය අනුවර්තනය කළ හැකිය:

  • :first-of-typeපංති තේරීම් කාරකයක් වෙනුවට වර්ග තේරීම් කාරකයක් සැපයීමෙන් ඔබට IE7 සහ IE8 හි වැඩ කිරීමට මෙය භාවිතා කළ හැකිය (නැවතත්, එහි වැරදි භාවිතය පිළිබඳ වැඩි විස්තර මෙහි පසු කොටසක):

    article > p {
        /* Apply styles to article > p:first-of-type, which may or may not be :first-child */
    }
    
    article > p ~ p {
        /* Undo the above styles for every subsequent article > p */
    }
  • පංති වෙනුවට ගුණාංග තේරීම් කරුවන්ට හෝ වෙනත් සරල තේරීම් කරුවන්ට ඔබට පෙරහන් කළ හැකිය .

  • ව්‍යාජ මූලද්‍රව්‍ය තාක්‍ෂණිකව සරල තේරීම්කරුවන් නොවුනත් ඔබට මෙම අතිච්ඡාදනය කිරීමේ තාක්‍ෂණය ව්‍යාජ මූලද්‍රව්‍ය සමඟ ඒකාබද්ධ කළ හැකිය .

මෙය ක්‍රියාත්මක වීමට නම්, ඔබේ අනෙක් සහෝදර සහෝදරියන් සඳහා පෙරනිමි මෝස්තර මොනවාදැයි ඔබ කල්තියා දැනගත යුතු අතර එවිට ඔබට පළමු රීතිය අභිබවා යා හැකිය. මීට අමතරව, CSS හි නීති රීති ඉක්මවා යාම මෙයට ඇතුළත් වන හෙයින්, ඔබට තේරීම් කාරක API හෝ සෙලේනියම් සමඟ භාවිතා කිරීම සඳහා තනි තේරීම්කරුවෙකු සමඟ එකම දේ සාක්ෂාත් කරගත නොහැක. හි CSS ලොකේටර් .

තේරීම්කරුවන් 4 විසින් අංකනය සඳහා දිගුවක්:nth-child() හඳුන්වා දෙන බව සඳහන් කිරීම වටී (මුලින් මුළුමනින්ම නව ව්‍යාජ පංතියක් ලෙස හැඳින්වේ :nth-match()), එය :nth-child(1 of .red)උපකල්පිතයක් වෙනුවට වෙනත් දෙයක් භාවිතා කිරීමට ඔබට ඉඩ සලසයි .red:first-of-class. සාපේක්ෂව මෑත කාලීන යෝජනාවක් වන බැවින්, නිෂ්පාදන ස්ථානවල එය භාවිතා කළ හැකි තරම් අන්තර් ක්‍රියාකාරී ක්‍රියාත්මක කිරීම් තවමත් නොමැත. මෙය ඉක්මනින් වෙනස් වනු ඇතැයි බලාපොරොත්තු වෙමු. මේ අතර, මම යෝජනා කළ වැඩමුළුව බොහෝ අවස්ථාවන් සඳහා වැඩ කළ යුතුය.

මෙම පිළිතුර උපකල්පනය කරන්නේ යම් පන්තියක් ඇති සෑම පළමු ළමා අංගයක් සඳහාම ප්‍රශ්නය සොයන බවයි. සමස්ත ලේඛනය පුරාම සංකීර්ණ තේරීම් කරුවෙකුගේ නවවන තරගය සඳහා ව්‍යාජ පංතියක් හෝ සාමාන්‍ය CSS විසඳුමක් හෝ නොමැත - විසඳුමක් තිබේද යන්න ලේඛන ව්‍යුහය මත බෙහෙවින් රඳා පවතී. jQuery සපයයි :eq(), :first, :lastහා වඩා මෙම අරමුණු ඉටු කර ගැනීම සඳහා, නමුත් එය නැවතත් සටහන් ඔවුන් වෙනස් ආකාරයකිනි ක්රියාත්මක :nth-child()et al . තේරීම් API භාවිතා කරමින්, ඔබට document.querySelector()පළමු තරගය ලබා ගැනීමට භාවිතා කළ හැකිය :

var first = document.querySelector('.home > .red');

හෝ document.querySelectorAll()කිසියම් නිශ්චිත ගැලපීමක් තෝරා ගැනීමට දර්ශකයක් සමඟ භාවිතා කරන්න:

var redElements = document.querySelectorAll('.home > .red');
var first = redElements[0];
var second = redElements[1];
// etc

නමුත් ෙම් .red:nth-of-type(1)වන විට මුල් පිළිගත් පිළිතුරු විසඳුමක් පිලිප් Daubmeier (මුලින් විසින් ලියන ලද ක්රියා මාටින් නමුත්, එතැන් සිට මකා දමන ලදී), එය ඔබ කිරීමට බලාපොරොත්තු වන්නේ කියලා මාර්ගය ලෙස හැසිරෙන්නේ නැත.

උදාහරණයක් ලෙස, ඔබට අවශ්‍ය pවූයේ ඔබේ මුල් සලකුණු තුළ පමණක් තෝරා ගැනීමට නම් :

<p class="red"></p>
<div class="red"></div>

... ඔබ භාවිතා කළ නොහැකි .red:first-of-type(සමාන .red:nth-of-type(1)එක් එක් මූලද්රව්යය පළමු (සහ පමණි) එහි වර්ගය එක් (නිසා) pහා divපිළිවෙළින්), එසේ යන දෙකම මෙම තේරීම් සම්පාත වනු ඇත.

කිසියම් පන්තියක පළමු මූලද්‍රව්‍යය ද එහි වර්ගයේ පළමු අංගය වන විට ව්‍යාජ පංතිය ක්‍රියා කරනු ඇත, නමුත් මෙය සිදුවන්නේ අහම්බෙන් පමණි . මෙම හැසිරීම පිලිප්ගේ පිළිතුරෙන් පෙන්නුම් කෙරේ. මෙම මූලද්‍රව්‍යයට පෙර ඔබ එකම වර්ගයේ මූලද්‍රව්‍යයක රැඳී සිටින මොහොතේදී, තේරීම් කාරකය අසමත් වේ. යාවත්කාලීන කළ සලකුණු කිරීම:

<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

සමඟ රීතියක් යෙදීම සාර්ථක .red:first-of-typeවනු ඇත, නමුත් ඔබ pපන්තියෙන් තොරව තවත් එකක් එකතු කළ පසු:

<div class="home">
  <span>blah</span>
  <p>dummy</p>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

... තේරීම වහාම අසමත් වනු ඇත, මන්ද පළමු .redමූලද්‍රව්‍යය දැන් දෙවන p මූලද්‍රව්‍යයයි.


16
ඉතින්, අනුකරණය කිරීමට ක්‍රමයක් :last-of-classතිබේද? පන්තියක අවසාන අංගය තෝරන්න.
රොකට් හස්මාත්

1
Oc රොකට්: මට පෙනෙන පරිදි නොවේ :(
බෝල්ට් ක්ලොක්

4
සහෝදරයා සමඟ හොඳ තාක්ෂණය. බහු සහෝදර සහෝදරියන් සමඟද මෙය ක්‍රියා කිරීම සටහන් කිරීම වටී, උදා: p ~ p ~ p තෙවන අයිතමය සහ ඉන් ඔබ්බට තෝරා ගනු ඇත: jsfiddle.net/zpnnvedm/1
ලෙගෝලාස්

2
Ol බෝල්ට්ලොක් ඔව්, කණගාටුයි, මම මෙහි පැමිණියේ විසඳුමක් සඳහා වන අතර OP විශේෂිත නඩුව ගැන මම එතරම් තැකීමක් නොකළෙමි. නිශ්චිත වර්ගයක් සඳහා general sibling selector ~ක්‍රියා කරන්නේ ඇයිදැයි මට සැබවින්ම වටහා ගත නොහැක :not(:first-of-*), එය එක් එක් ගැලපෙන මූලද්‍රව්‍යයට රීතිය අදාළ කළ යුතු යැයි මම සිතමි, නමුත් එය අදාළ වන්නේ තරග 3 ක් හෝ වැඩි ගණනක් තිබියදීත් පළමු තරගය සඳහා පමණි.
ජෙරාඩ්

3
අනුව caniuse මෙම :nth-child(1 of .foo)දීර්ඝ දැනටමත් සෆාරි 9.1+ මත ක්රියාත්මක කර ඇත. (මම පරීක්ෂා කර නැත)
ඩැනීල්ඩ්

339

මෙම :first-childනම, පවසයි වැනි මව් ටැගය පළමු දරුවා තෝරා ගැනීමට තේරීම්, අදහස් කර ගෙන ඇත. ළමයින් එකම මාපිය ටැගය තුළට ඇතුළත් කළ යුතුය. ඔබගේ නිශ්චිත උදාහරණය ක්‍රියාත්මක වනු ඇත (එය මෙහි උත්සාහ කර බලන්න ):

<body>
    <p class="red">first</p>
    <div class="red">second</div>
</body>

සමහර විට ඔබ ඔබේ මව් විවිධ මව් ටැග් වල කැදවා තිබේද? ඔබේ පන්තියේ ටැග් redඇත්ත වශයෙන්ම මවුපියන් යටතේ ඇති පළමු ටැග් ද?

මෙය මුළු ලේඛනයේම පළමු ටැගය සඳහා පමණක් අදාළ නොවන බව සලකන්න, නමුත් සෑම විටම නව දෙමාපියෙකු ඒ වටා ඔතා, වැනි:

<div>
    <p class="red">first</p>
    <div class="red">second</div>
</div>
<div>
    <p class="red">third</p>
    <div class="red">fourth</div>
</div>

firstහා thirdපසුව රතු වනු ඇත.

යාවත්කාලීන කිරීම:

මාටින් ඔහුගේ පිළිතුර මකා දැමුවේ ඇයිදැයි මම නොදනිමි, නමුත් ඔහුට විසඳුම ඇත, :nth-of-typeතේරීම්කරු:

.red:nth-of-type(1)
{
    border:5px solid red;
} 
<div class="home">
    <span>blah</span>
    <p class="red">first</p>
    <p class="red">second</p>
    <p class="red">third</p>
    <p class="red">fourth</p>
</div>

නය මාටින් . උදාහරණයක් ලෙස වැඩි වගේ පොස්ට් වලට මෙතන . මෙය CSS 3 තේරීම් කාරකයක් බව මතක තබා ගන්න, එබැවින් සියලුම බ්‍රව්සර් එය හඳුනා නොගනී (උදා: IE8 හෝ ඊට වැඩි).


එය මගේ වැරැද්ද වන්නට ඇත - මාටින්ට පෙන්වා දුන් පරිදි, CSS3 වැනි තේරීම් :nth-of-typeකාරකයක් IE හි වර්තමාන අනුවාදයක කිසිසේත් වැඩ නොකිරීමේ සුළු ගැටලුවකට ගොදුරු වේ.
MÖr Örlygsson

26
මට මෙය කියවීම ටිකක් ව්‍යාකූල විය. .red:nth-of-type(1)(අ) එහි මූලද්‍රව්‍ය වර්ගයේ පළමු දරුවා වන (ආ) පන්තියේ “රතු” ඇති ඕනෑම මූලද්‍රව්‍යයක් දැඩි ලෙස තෝරා ගනු ඇත. උදාහරණයක් ලෙස, පළමු <p> පන්තියේ "රතු" නොතිබුනේ නම්, එය තෝරා නොගනී. විකල්පයක් ලෙස <span> සහ පළමු <p> දෙකම "රතු" පන්තියේ තිබුනේ නම්, ඔවුන් දෙදෙනාම තෝරා ගනු ඇත. jsfiddle.net/fvAxn
ඩේවිඩ්

7
An ඩෑන් මුන්ඩි: :first-of-typeසමාන වේ :nth-of-type(1), එබැවින් එය ද ක්‍රියාත්මක වේ. මගේ පිළිතුරේ සඳහන් එකම හේතුව නිසා එය ද අසාර්ථක විය හැකිය.
බෝල්ට් ක්ලොක්

4
Av ඩේවිඩ් මට විශ්වාසයි :nth-of-type"මූලද්‍රව්‍යය / ටැගය" එය "වර්ගය" යැයි කියන විට. එබැවින් එය සලකා බලන්නේ මූලද්‍රව්‍යය මිස පන්ති වැනි දේ නොවේ.
gcampbell

2
@gcampbell: ඔව්, එය හරියටම අදහස් කරන්නේ එයයි, ඒ නිසා මෙම පිළිතුර දෝෂ සහිතයි. "වර්ගය" යන වචනය තෝරා ගැනීමට හේතුව HTML / XML සමඟ තේරීම් යුවළක් නොවීමයි, මන්ද සෑම භාෂාවකටම මූලද්‍රව්‍ය අර්ථ දක්වන "ටැග්" සංකල්පයක් නොමැත.
බෝල්ට් ක්ලොක්

76

නිවැරදි පිළිතුර:

.red:first-child, :not(.red) + .red { border:5px solid red }

1 වන කොටස: මූලද්‍රව්‍යය මුලින්ම එහි මවුපියන්ට සහ "රතු" පන්තිය තිබේ නම්, එය මායිම ලබා ගනී.
දෙවන කොටස: ".red" මූලද්රව්යය මුලින්ම එහි මවුපියන්ට නොව, ".red" පන්තියෙන් තොර මූලද්රව්යයක් වහාම අනුගමනය කරන්නේ නම්, එම දේශ සීමාවේ ගෞරවය ද ලැබිය යුතුය.

ෆෙඩල් හෝ එය සිදු නොවීය.

පිලිප් ඩවුබ්මියර්ගේ පිළිතුර පිළිගත් නමුත් නිවැරදි නොවේ - අමුණා ඇති ෆෙඩල් බලන්න.
බෝල්ට්ලොක්ගේ පිළිතුර ක්‍රියාත්මක වනු ඇත, නමුත් අනවශ්‍ය ලෙස මෝස්තර නිර්වචනය කර නැවත ලියයි
(විශේෂයෙන් එය වෙනත් දේශ සීමාවක් උරුම කර ගන්නා ගැටළුවක් - ඔබට දේශ සීමාවට අනෙකක් ප්‍රකාශ කිරීමට අවශ්‍ය නැත: කිසිවක් නැත)

සංස්කරණය කරන්න: ඔබට රතු නොවන කිහිප වතාවක් අනුගමනය කර “රතු” ඇති විට, සෑම “පළමු” රතු පැහැයටම මායිම ලැබේ. එය වලක්වා ගැනීම සඳහා යමෙකුට බෝල්ට් ක්ලොක්ගේ පිළිතුර භාවිතා කළ යුතුය. ෆෙඩල් බලන්න


2
මේ පිළිතුර වැරදි නැහැ, මේ තේරීම් වේ වේ යන්තම් නිසා - දී ඇති සලකුණු සඳහා නිවැරදි, නමුත් මම මෙම තත්ත්වය සංස්කරණය සඳහන් බව නැවත නැවතත් කියා සිටිමු යුත්තේ ඇයි මම ඔබ අදාල මාර්ක්අප් ව්යුහය සහතික විය නොහැක විට අභිබවා අවම වශයෙන් අවශ්ය වන බව රාජ්ය හේතුව .redඅනුගමනය කිරීමෙන් :not(.red)සැමවිටම එය .redතම සහෝදර සහෝදරියන් අතර පළමුවැන්නා බවට පත් නොවේ . දේශ සීමාව උරුම කර ගැනීමට අවශ්‍ය නම්, එය හුදෙක් අභිබවා යන රීතිය border: inheritවෙනුවට ප්‍රකාශ කිරීමකි border: none.
බෝල්ට් ක්ලොක්

3
මෙම විසඳුම හොඳම IMO වේ, මන්ද ඔබට අවසාන දරුවාට පහසුවෙන්ම එය කළ හැකිය.
A1rPun

1 A1rPun අන්තිම දරුවා සඳහා ඔබ මෙය වෙනස් කරන්නේ කෙසේද?
විලෙම්

Ile විලෙම් first-childවෙත වෙනස් වන්න last-child, නමුත් මෙය සැමවිටම උපක්‍රමය නොකරන බව පරීක්ෂා කිරීමෙන් පසුව මට පෙනේ.
A1rPun

3
මට කණගාටුයි, නමුත් එය "පන්තියේ .red" ඇති පළමු ළමා අංගයට නොගැලපේ, ඒ වෙනුවට එය "පන්තියේ .red සහ පළමු .red මූලද්‍රව්‍යය .red. මේ දෙක සමාන නොවේ. Fiddle: jsfiddle.net/Vq8PB/166
තුවක්කුකරුවන්

18

ඔබට භාවිතා කළ හැකිය first-of-typeහෝnth-of-type(1)

.red {
  color: green;  
}

/* .red:nth-of-type(1) */
.red:first-of-type {
  color: red;  
}
<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>


6
ඔබ තුළ ඇති නම් එය වැඩ කරන්නේ නැහැ <p></p>අතර span, ඔබේ පළමු pමුලද්රව්යයක් redපන්තියේ. මෙම JSFiddle දෙස බලන්න .
ෆ්‍රැන්සිස්කෝ රොමේරෝ

1
ඔහුගේ පිළිතුරේ අවසාන උදාහරණයෙන් මා මෙහි පෙන්වා දුන් හැසිරීමම ප්‍රතිනිෂ්පාදනය කරන බව මම දැන් දුටුවෙමි. මම ඔබේ ආදර්ශය උත්සාහ කර මඳක් "වාදනය" කළ විට, එම හැසිරීම මා දුටු අතර අනාගත පා readers කයන් දැනුවත් වනු ඇත.
ෆ්‍රැන්සිස්කෝ රොමේරෝ

14

ඉහත පිළිතුරු ඉතා සංකීර්ණයි.

.class:first-of-type { }

මෙය පළමු වර්ගයේ පන්තියක් තෝරා ගනු ඇත. MDN ප්‍රභවය


4
මට පළමු වර්ගයට කිසිදු සඳහනක් සොයාගත නොහැකි අතර පළමු වර්ගයට අදාළ වන්නේ ටැග් නාමයට පමණි; මෙම පිළිතුර නිවැරදි යැයි ඔබට විශ්වාසද?
මැට් බ්‍රෝච්


8
එය පන්ති සමඟ ක්‍රියා නොකරයි. ටැගයක නව වැනි කොටස තෝරා ගැනීමට වඩා පන්තියක නවය තෝරා ගැනීම වඩා ප්‍රයෝජනවත් වන බැවින් එය ක්‍රියාත්මක විය යුත්තේ එලෙස ය . නමුත් ': first-of-type' මෙතෙක් වැඩ කර ඇත්තේ tagName මගින් පමණි. එය එසේ වුවහොත්, 'පළමු පන්තියේ' සහ 'පළමු-ටැගය' ඔවුන් බොහෝ විට කරන එකම මූලද්‍රව්‍යයට යොමු වන අතර, එය එසේ ක්‍රියා කරයි යැයි සිතීම ව්‍යාකූල කිරීම පහසුය; ඔවුන් එසේ නොකරන නඩුවකට පැමිණි විට බිඳී ඇත්තේ කුමක් දැයි කල්පනා කරන්න.
ඉවාන් තොම්සන්

2
මෙය තෝරාගත් පිළිතුර නොවන්නේ මන්දැයි විශ්වාස නැත. මෙය OP ඉල්ලා සිටි දෙය හරියටම කරයි, සහ පරිපූර්ණව ක්‍රියා කරයි. එස්.එම්.එච්.
බර්නෙස්ටෝ

1
Ern බර්නෙස්ටෝ, ඔබට එකම “වර්ගයේ” බහු මූලද්‍රව්‍ය ඇති නඩුවක් ඇති විට, කියන්නට ඉඩ දෙන්න <span>, සහ කිහිප දෙනෙකුට පන්තිය highlightඇත. මෙම .highlight:first-of-typeතේරීම් මෙම උදාහරණය ප්රථම, මෙම තෝරාගත් පන්තිය සමග "වර්ගය" යන පළමු අවස්ථාව තෝරා ඇත <span>, සහ නොව පන්තියේ පළමු අවස්ථාව highlight. ශෛලිය ක්‍රියාත්මක කරනු ලබන්නේ පරතරයේ පළමු අවස්ථාවෙහිදී පමණි. ( codepen.io/andrewRmillar/pen/poJKJdJ )
Sl4rtib4rtf4st

9

ඔබේ තේරීම් කාරකයට ගැලපීමට, මූලද්‍රව්‍යයට පන්ති නාමයක් redතිබිය යුතු අතර එහි මවුපියන්ගේ පළමු දරුවා විය යුතුය.

<div>
    <span class="red"> <!-- MATCH -->
</div>

<div>
    <span>Blah</span>
    <p class="red"> <!-- NO MATCH -->
</div>

<div>
    <span>Blah</span>
    <div><p class="red"></div> <!-- MATCH -->
</div>

මෙය නිවැරදි වන අතර මෙය මගේ ගැටලුවක් ලෙස පෙනේ, නමුත් පළමු මූලද්‍රව්‍යය වෙනත් මූලද්‍රව්‍යයන්ට වඩා ඉදිරියෙන් තිබේද යන්න නොසලකා පන්තියක් සහිත පළමු අංගය තෝරා ගැනීමට ක්‍රමයක් තිබේද?
රාජත්

ඔබ මාටින්ස්ගේ පිළිතුර දෙස බැලුවහොත් ඔබට මෙය ඇසීමට අවශ්‍ය නොවීය :)
පිලිප් ඩවුබ්මියර්

9

අනෙක් පිළිතුරු එහි ඇති වැරැද්ද ආවරණය කරන හෙයින්, අනෙක් භාගය උත්සාහ කරමි, එය නිවැරදි කරන්නේ කෙසේද යන්න. අවාසනාවට, ඔබට මෙහි CSS පමණක් විසඳුමක් ඇති බව මම නොදනිමි , අවම වශයෙන් මට සිතිය හැකි නොවේ . තවත් විකල්ප කිහිපයක් ඇතත් ....

  1. firstඔබ එය ජනනය කරන විට මූලද්‍රව්‍යයට පන්තියක් පවරන්න ,

    <p class="red first"></p>
    <div class="red"></div>

    CSS:

    .first.red {
      border:5px solid red;
    }

    මෙම CSS දෙකම පන්ති firstහා redපන්ති සමඟ ගැලපේ .

  2. විකල්පයක් ලෙස, ජාවාස්ක්‍රිප්ට් හි ද එසේ කරන්න, උදාහරණයක් ලෙස ඉහත සඳහන් කළ එකම CSS භාවිතා කරමින් මෙය කිරීමට ඔබ භාවිතා කරන්නේ කුමන jQuery ද?

    $(".red:first").addClass("first");

මම මීට ටික කලකට පෙර CSS පමණක් විසඳුමක් ඉදිරිපත් කළෙමි ; මම එය කැනොනිකල් පිළිතුරක් ලෙස මෙහි ප්‍රතිනිෂ්පාදනය කර ඇත්තෙමි.
බෝල්ට් ක්ලොක්

1
එවැනි කිසිවක් නොමැති තාක් කල් :first-of-class, පළමු අංගයට අමතර පන්තියක් එක් කිරීමට ද මම යෝජනා කරමි. දැනට පහසුම විසඳුම ලෙස පෙනේ.
කයි නොක්

7

මම මෙය මගේ ව්‍යාපෘතියේ ලබා ගත්තා.

div > .b ~ .b:not(:first-child) {
	background: none;
}
div > .b {
    background: red;
}
<div>
      <p class="a">The first paragraph.</p>
      <p class="a">The second paragraph.</p>
      <p class="b">The third paragraph.</p>
      <p class="b">The fourth paragraph.</p>
  </div>


5

ඔබගේ යාවත්කාලීන කළ ගැටලුවට අනුව

<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

කොහොමද

.home span + .red{
      border:1px solid red;
    }

මෙය පන්තියේ නිවසක් තෝරා ගනු ඇත , පසුව මූලද්‍රව්‍ය පරතරය සහ අවසානයේ සියලු .red මූලද්‍රව්‍යයන් පරතරය මූලද්‍රව්‍ය වලින් පසු වහාම ස්ථානගත වේ.

යොමුව: http://www.w3schools.com/cssref/css_selectors.asp


4

Ul li ලැයිස්තුව සඳහා පසුබිම් රූපයක් ලබා ගැනීමට මම පහත CSS භාවිතා කරමි

#footer .module:nth-of-type(1)>.menu>li:nth-of-type(1){
  background-position: center;
  background-image: url(http://monagentvoyagessuperprix.j3.voyagesendirect.com/images/stories/images_monagentvoyagessuperprix/layout/icon-home.png);
  background-repeat: no-repeat;
}
<footer id="footer">
  <div class="module">
    <ul class="menu ">
      <li class="level1 item308 active current"></li>
      <li> </li>
    </ul> 
  </div>
  <div class="module">
    <ul class="menu "><li></li>
      <li></li> 
    </ul>
  </div>
  <div class="module">
    <ul class="menu ">
      <li></li>
      <li></li>
    </ul>
  </div>
</footer>


3

ඔබට nth-of-type (1) භාවිතා කළ හැකි නමුත් වෙබ් අඩවිය IE7 යනාදිය සඳහා සහය දැක්වීමට අවශ්‍ය නොවන බවට වග බලා ගන්න, මෙය නම් ශරීර පන්තිය එක් කිරීමට jQuery භාවිතා කරන්න. ඉන්පසු IE7 ශරීර පන්තිය හරහා මූලද්‍රව්‍යය සොයා ගන්න. නව වැනි ළමා ශෛලිය තුලට.


3

එය ක්‍රියාත්මක කිරීම සඳහා ඔබේ කේතය මේ වගේ දෙයකට වෙනස් කළ හැකිය

<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

මෙය ඔබ වෙනුවෙන් කාර්යය ඉටු කරයි

.home span + .red{
      border:3px solid green;
    }

මෙන්න ඒ ගැන SnoopCode වෙතින් CSS යොමු කිරීමක් .


2

කිසියම් හේතුවක් නිසා ඉහත පිළිතුරු කිසිවක් දෙමව්පියන්ගේ සැබෑ පළමු සහ එකම දරුවාගේ සිද්ධියට ආමන්ත්‍රණය කරන බවක් නොපෙනුණි.

#element_id > .class_name:first-child

මෙම කේතය තුළ පළමු පන්තියේ දරුවාට පමණක් ශෛලිය යෙදීමට අවශ්‍ය නම් ඉහත සඳහන් සියලු පිළිතුරු අසාර්ථක වනු ඇත.

<aside id="element_id">
  Content
  <div class="class_name">First content that need to be styled</div>
  <div class="class_name">
    Second content that don't need to be styled
    <div>
      <div>
        <div class="class_name">deep content - no style</div>
        <div class="class_name">deep content - no style</div>
        <div>
          <div class="class_name">deep content - no style</div>
        </div>
      </div>
    </div>
  </div>
</aside>

1
ඔබගේ පිළිතුර මෙම ප්‍රශ්නයට ඉහළම පිළිතුරු දෙකෙහි දැනටමත් අඩංගු වන අතර කිසිවක් එකතු නොකරයි. එසේම, ඔබ :first-childව්‍යාජ පංතිය භාවිතා කිරීම නොමඟ යවන බැවින් .class_nameඑය වැඩ කරන ආකාරය වෙනස් නොවන අතර එය පෙරනයක් ලෙස ක්‍රියා කරයි. ඔබට මීට පෙර දික්කසාදයක් ඇත්නම් <div class="class_name">First content that need to be styled</div>ඔබේ තේරීම්කරු පළමු දරුවා නොවන බැවින් එය නොගැලපේ.
j08691

තොරතුරු අවශ්‍ය කෙනෙකුට එය කෙළින්ම ඉදිරියට යා හැකි යැයි මම නොසිතමි. ඔව්, ඔබ නඩුව ගැන හරි. මෙය වඩාත් විශේෂිත අවස්ථාවකට සේවය කරයි. මේ නිසා එය ප්‍රයෝජනවත් යැයි මම සිතුවෙමි.
යාවෝර් ඉවානොව්

මෙය මට අවශ්‍ය දේ, නිරවද්‍ය හා සංක්ෂිප්ත ය. ස්තූතියි avYavorIvanov
quantme

1

මෙය සරල හා .ලදායී ලෙස උත්සාහ කරන්න

 .home > span + .red{
      border:1px solid red;
    }

-1

+වහාම ස්ථානගත කර ඇති මූලද්‍රව්‍ය තෝරා ගැනීම සඳහා සාපේක්ෂ තේරීම් යන්ත්‍රයක් භාවිතා කිරීම මෙහි හොඳම දේ බව මම විශ්වාස කරමි (පෙර යෝජනා කළ පරිදි ස්වල්පයක්).

මෙම නඩුව සඳහා මෙම තේරීම භාවිතා කළ හැකිය

.home p:first-of-type

නමුත් මෙය මූලද්‍රව්‍ය තේරීම් පන්තිය නොවේ.

මෙන්න ඔබට CSS තේරීම්කරුවන්ගේ හොඳ ලැයිස්තුවක් ඇත: https://kolosek.com/css-selectors/


-2

මෙම විසඳුම උත්සාහ කරන්න:

 .home p:first-of-type {
  border:5px solid red;
  width:100%;
  display:block;
}
<div class="home">
  <span>blah</span>
  <p class="red">first</p>
  <p class="red">second</p>
  <p class="red">third</p>
  <p class="red">fourth</p>
</div>

කෝඩ්පෙන් සබැඳිය


1
ප්‍රශ්නය වන්නේ " පංතිය සහිත පළමු මූලද්‍රව්‍යය සඳහා CSS තේරීම් කාරකය " මිස " ටැග් නම සහිත පළමු මූලද්‍රව්‍යය සඳහා CSS තේරීම " නොවේ.
ජෙරොල්ඩ් බ්‍රොසර්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.