Menu

פסאודו-קלאסים ב-CSS: nth-child, not, first-child, focus

פסאודו-קלאסים בוחרים אלמנטים לפי מיקום או מצב: :nth-child(), :first-child, :not(), :focus, :checked, :has() ועוד. למדו את התחביר, את הנוסחה an+b עם בודק חי, ואת ההבדל בין nth-child ל-nth-of-type.

בדף הזה יש עורכים שאפשר להריץ - לערוך, להריץ ולראות את הפלט מיד.

מה זה פסאודו-קלאס

פסאודו-קלאס הוא מילת מפתח אחרי נקודתיים שבוחרת אלמנטים לפי המיקום שלהם במסמך או לפי המצב שלהם. מצמידים אותו לסלקטור רגיל: li:first-child, input:focus, a:hover.

לפסאודו-קלאסים של מצב לקישורים ולעכבר (:hover, :active, :visited) יש דף משלהם, CSS hover.

:nth-child() והנוסחה an+b

:nth-child() מקבל מספר, מילת מפתח או נוסחה an+b. הדפדפן מנסה n = 0, 1, 2, ... ותואם כל מיקום שהנוסחה מייצרת (המיקומים מתחילים ב-1).

נוסחהתואמת מיקומיםמשמעות
33הילד השלישי
odd או 2n+11, 3, 5, ...שורות אי-זוגיות
even או 2n2, 4, 6, ...שורות זוגיות
3n3, 6, 9, ...כל שלישי
n+44, 5, 6, ...הרביעי וכל מה שאחריו
-n+31, 2, 3שלושת הראשונים
3n+11, 4, 7, ...כל שלישי, החל מהראשון

הקלידו נוסחה וראו אילו פריטים תואמים:

נסו odd, even, 4, n+7, -n+5 ו-2n+3. נוסחה לא תקינה לא תואמת כלום.

התאום שסופר מהסוף הוא :nth-last-child(): li:nth-last-child(-n+2) בוחר את שני הפריטים האחרונים.

nth-child מול nth-of-type

:nth-child() סופר כל אלמנט אח, מכל תגית, ורק אז בודק את שאר הסלקטור. :nth-of-type() סופר רק אחים עם אותה תגית. ההבדל מופיע ברגע שהאחים מעורבבים:

אותם זוגות קיימים גם לקצוות: :first-child / :first-of-type, :last-child / :last-of-type, :only-child / :only-of-type.

:not(), :is() ו-:where()

פסאודו-קלאסדוגמהתואם
:not(X)li:not(.done)אלמנטים שלא תואמים את X
:is(X, Y):is(h1, h2, h3) aאלמנטים שתואמים כל אחד מהרשימה
:where(X, Y):where(ul, ol) liכמו :is(), עם ספציפיות אפס
:has(X)li:has(> input:checked)אלמנטים שמכילים התאמה ל-X

:not() הוא זה שמשתמשים בו כל יום, למשל כדי לשים מפריד בין פריטים אבל לא אחרי האחרון:

פסאודו-קלאסים של מצב: focus, checked, disabled, invalid

פסאודו-קלאסתואם
:focusהאלמנט שיש עליו פוקוס מקלדת או עכבר
:focus-visibleבפוקוס, והדפדפן מחליט שצריך להציג טבעת (בדרך כלל בפוקוס מקלדת)
:focus-withinאלמנט שמכיל את האלמנט שבפוקוס
:checkedתיבת סימון או כפתור רדיו מסומנים, או <option> שנבחר
:disabled / :enabledפקדי טופס מושבתים (או לא)
:required / :optionalשדות קלט עם required או בלעדיו
:invalid / :validשדות קלט שהערך שלהם נכשל בבדיקת התקינות או עובר אותה
:user-invalidלא תקין, אבל רק אחרי שהמשתמש התעסק איתו
:placeholder-shownשדה קלט שמציג כרגע את ה-placeholder שלו
:emptyאלמנט בלי ילדים, אפילו לא טקסט
:targetהאלמנט שה-id שלו תואם את #fragment שבכתובת

לחצו בתוך שדה האימייל: התווית שלו הופכת לכחולה בזכות :focus-within. הקלידו משהו שאינו אימייל וצאו מהשדה: :user-invalid הופך את הגבול לענברי. :invalid רגיל היה מסמן בענברי את השדה הריק והחובה עוד לפני שנגעתם בו.

מה שלא תעשו עם :focus, שמרו על סגנון פוקוס גלוי. הסרת קו המתאר בלי תחליף משאירה משתמשי מקלדת בלי יכולת לראות איפה הם נמצאים.

:has(), סלקטור ההורה

:has() תואם אלמנט לפי מה שהוא מכיל. זה "סלקטור ההורה" שביקשו כבר זמן רב, והוא עובד בגרסאות הנוכחיות של Chrome, Firefox ו-Safari.

בחרו את התוכנית האחרת: כל הכרטיס עוקב אחרי כפתור הרדיו, בלי JavaScript.

טעויות נפוצות

  • רווח לפני הנקודתיים. li :first-child פירושו "ילד ראשון בתוך li". כתבו li:first-child.
  • לצפות ש-p:nth-child(1) יהיה "ה-p הראשון". פירושו "הילד הראשון, אם הוא p". השתמשו ב-:first-of-type בשביל ה-p הראשון.
  • ספירה מ-0. המיקומים מתחילים ב-1: :nth-child(0) לא תואם כלום.
  • הסרת קווי מתאר של פוקוס. :focus { outline: none } בלי תחליף שובר ניווט במקלדת.
  • בלבול בין : ל-::. :before הוא כתיב ישן של הפסאודו-אלמנט ::before; פסאודו-קלאסים תמיד משתמשים בנקודתיים אחת.

שאלות נפוצות

מה זה פסאודו-קלאס ב-CSS?

מילת מפתח אחרי נקודתיים שבוחרת אלמנטים לפי מצב או מיקום ולא לפי שם, כמו a:hover, li:first-child או input:focus. מוסיפים אותה לסלקטור רגיל, ורוב הפסאודו-קלאסים נספרים כמו מחלקה בספציפיות (:where() נספר אפס).

איך nth-child עובד ב-CSS?

:nth-child(an+b) תואם אלמנטים שהמיקום שלהם בין האחים שלהם הוא a×n+b עבור n = 0, 1, 2 וכן הלאה, כשהספירה מתחילה מ-1. :nth-child(3) הוא הילד השלישי, :nth-child(odd) או 2n+1 כל ילד במקום אי-זוגי, ו-:nth-child(n+4) הרביעי וכל מה שאחריו.

מה ההבדל בין nth-child ל-nth-of-type?

:nth-child() סופר את כל האלמנטים האחים, ואז בודק את שאר הסלקטור; :nth-of-type() סופר רק אחים מאותו סוג אלמנט. ברשימה של h2 ואחריו פסקאות, p:nth-child(1) לא תואם כלום, בעוד ש-p:nth-of-type(1) תואם את הפסקה הראשונה.

איך משתמשים ב-:not() ב-CSS?

שימו בתוך הסוגריים את הסלקטור שרוצים להוציא: li:not(.done) תואם כל פריט רשימה בלי המחלקה done. הוא מקבל גם רשימה, input:not([type="checkbox"], [type="radio"]).

מה ההבדל בין פסאודו-קלאס לפסאודו-אלמנט?

פסאודו-קלאס (נקודתיים אחת, :hover) בוחר אלמנט קיים שלם במצב מסוים. פסאודו-אלמנט (נקודתיים כפולות, ::before) פונה לחלק של אלמנט או יוצר תוכן מחולל.

איור של שפות התכנות ב-Coddy

ללמוד תכנות עם Coddy

להתחיל