מסננים מראש קבוצה של רכיבי צאצא לפני שמחילים עליהם את הלוגיקה של A+B.
הבוררים של פסאודו-מחלקות :nth-child()
ו-:nth-last-child()
באמצעות הבורר :nth-child()
של פסאודו-מחלקות אפשר לבחור רכיבים ב-DOM לפי האינדקס שלהם. באמצעות An+B
מיקרו-תחביר, אתם יכולים לשלוט במדויק באלמנטים שאתם רוצים לבחור.
-
:nth-child(2)
: בוחרים את הילד או הילדה השני/ה. -
:nth-child(2n)
: בוחרים את כל הילדים הזוגיים (השני, הרביעי, השישי, השמיני וכן הלאה). -
:nth-child(2n+1)
: בוחרים את כל הילדים האי-זוגיים (1, 3, 5, 7 וכן הלאה). -
:nth-child(5n+1)
: בוחרים את הצאצא הראשון (=(5×0)+1), השישי (=(5×1)+1), האחד-עשר (=(5×2)+1) וכן הלאה. -
:nth-child(5n+2)
: בוחרים את הילד השני (=(5×0)+2), השביעי (=(5×1)+2), ה-12 (=(5×2)+2) וכן הלאה.
אבל אם לא תציינו את הפרמטר A
, תוכלו לבחור עוד קריאייטיבים. לדוגמה:
-
:nth-child(n+3)
: בוחרים כל צאצא החל מהצאצא השלישי (השלישי, הרביעי, החמישי וכן הלאה). -
:nth-child(-n+5)
: בחירה של כל צאצא עד הצאצא החמישי (הראשון, השני, השלישי, הרביעי והחמישי).
אפשר לשלב כמה מהאפשרויות האלה :nth-child()
כדי לבחור טווחים של רכיבים:
-
:nth-child(n+3):nth-child(-n+5)
: בחירה של כל צאצא החל מהצאצא השלישי ועד הצאצא החמישי (3rd, 4th, 5th).
באמצעות :nth-last-child()
אפשר לבצע בחירות דומות, אבל במקום להתחיל לספור מההתחלה, מתחילים לספור מהסוף.
בחירת סינון מראש באמצעות התחביר of S
ב-CSS Selectors Level 4 (סלקטורים ב-CSS רמה 4) יש אפשרות להעביר רשימת סלקטורים ל-:nth-child()
ול-:nth-last-child()
.
:nth-child(An+B [of S]?)
:nth-last-child(An+B [of S]?)
אם מציינים את of S
, הלוגיקה של An+B
חלה רק על רכיבים שתואמים לרשימת הבוררים שצוינה S
. המשמעות היא שאתם יכולים לסנן מראש את הילדים לפני ש-An+B
מבצע את הפעולה שלו.
Browser Support
דוגמאות
לדוגמה, :nth-child(2 of .highlight)
בוחר את הרכיב התואם השני שיש לו את המחלקה .highlight
. במילים אחרות: מתוך כל הילדים עם הכיתה .highlight
, בוחרים את הילד השני.
לעומת זאת, .highlight:nth-child(2)
בוחר את הרכיב שיש לו המחלקה .highlight
וגם הוא רכיב הצאצא השני.
בהדגמה שלמטה אפשר לראות את ההבדל הזה:
- הרכיב שתואם ל-
:nth-child(2 of .highlight)
מוקף בקו מתאר ורוד. - הרכיב שתואם ל-
.highlight:nth-child(2)
מודגש בקו מתאר ירוק.
שימו לב ש-S
היא רשימת סלקטורים, כלומר היא מקבלת כמה סלקטורים שמופרדים בפסיק. לדוגמה, :nth-child(4 of .highlight, .sale)
בוחר את הרכיב הרביעי שהוא .highlight
או .sale
מתוך קבוצה של רכיבים באותה רמה.
בהדגמה שלמטה, האלמנט שתואם ל-:nth-child(4 of .highlight, .sale)
מודגש בקו מתאר כתום.
הצגת נתונים בפסים, גרסה מחודשת
דוגמה קלאסית לשימוש ב-:nth-child()
היא כשיוצרים טבלה עם פסים לסירוגין. זו טכניקה ויזואלית שבה הצבעים של השורות בטבלה מתחלפים. בדרך כלל, הגישה תהיה כזו:
tr:nth-child(even) {
background-color: lightgrey;
}
השיטה הזו עובדת מצוין בטבלאות סטטיות, אבל היא בעייתית כשמתחילים לסנן את תוכן הטבלה באופן דינמי. לדוגמה, אם שורה 2 מוסתרת, שורות 1 ו-3 יהיו גלויות, וכל אחת מהן תהיה עם אותו צבע רקע.
כדי לפתור את הבעיה, אפשר להשתמש ב-:nth-child(An+B [of S]?)
ולהחריג את השורות המוסתרות מהלוגיקה של An+B
:
tr:nth-child(even of :not([hidden])) {
background-color: lightgrey;
}
מגניב, נכון?
תמונה מאת Markus Spiske ב-Unsplash