סלקטור המחלקה
סלקטור מחלקה הוא נקודה ואחריה שם מחלקה. הוא מעצב כל אלמנט שתכונת ה-class שלו מכילה את השם הזה, לא משנה מאיזה סוג האלמנט.
הנקודה מופיעה רק ב-CSS. ב-HTML התכונה היא class="badge", בלי נקודה. שמות מחלקות רגישים לאותיות גדולות וקטנות: .Badge לא מתאים ל-class="badge".
כמה מחלקות על אלמנט אחד
אלמנט יכול לשאת כל מספר של מחלקות, מופרדות ברווחים. כל אחת מביאה את הכללים שלה, וכך בונים גרסאות מחלקים קטנים:
.btn.danger, בלי רווח, מתאים לאלמנטים שיש להם את שתי המחלקות. ל-span האחרון יש danger אבל אין btn, ולכן הכלל המשורשר מדלג עליו.
גרסאות של סלקטור מחלקה
| סלקטור | מתאים ל |
|---|---|
.note | כל אלמנט עם המחלקה note |
p.note | רק אלמנטי <p> עם המחלקה note |
.btn.primary | אלמנטים עם btn וגם primary |
.card .title | .title בכל מקום בתוך .card |
.card > .title | .title שההורה שלו הוא .card |
.a, .b | אלמנטים עם a או b |
ההבדל בין רווח לבלי רווח מוסבר, יחד עם צירופים נוספים, בעמוד סלקטורי ה-CSS.
סלקטור ה-ID
סלקטור ID הוא סולמית ואחריה ה-id: #site-header מעצב את האלמנט עם id="site-header". id חייב להיות ייחודי בעמוד, ולכן סלקטור ID מכוון לאלמנט אחד בדיוק.
ל-id יש תפקידים מעבר לעיצוב: href="#details" גולל אל האלמנט, <label for="email"> מצביע על ה-id של שדה קלט, ו-JavaScript מוצא אותו עם document.getElementById('details'). זו הסיבה הרגילה לתת לאלמנט id; לעיצוב, class הוא הכלי הטוב יותר.
Class מול ID
Class .name | ID #name | |
|---|---|---|
| בכל עמוד | הרבה אלמנטים | אלמנט אחד |
| בכל אלמנט | כמה, מופרדים ברווח | אחד |
| ספציפיות | (0,1,0) | (1,0,0) |
יעד לקישור (#name בכתובת) | לא | כן |
| הכי מתאים ל | עיצוב | עוגנים, תוויות, נקודות חיבור ל-JavaScript |
פער הספציפיות הוא הסיבה המעשית לעצב עם מחלקות. ID אחד מנצח כל מספר של מחלקות, ולכן כלל שנכתב עם ID אפשר לדרוס רק עם ID אחר, סגנון inline או !important:
הוספה והסרה של מחלקות עם JavaScript
מחלקות הן הדרך הרגילה של JavaScript לשנות איך משהו נראה: ה-CSS מגדיר את המצבים, והסקריפט רק מחליף ביניהם.
ל-classList יש גם add, remove, contains ו-replace. הימנעו מהשמה ישירה ל-className: היא מחליפה את כל המחלקות שהיו לאלמנט.
מתן שמות למחלקות
- אותיות, ספרות, מקפים וקווים תחתונים בטוחים:
card,card-title,card__title,is-open. - אל תתחילו סלקטור בספרה או במקף שאחריו ספרה.
.2colהוא CSS לא תקין. התחילו באות (.cols-2) או עשו escape לספרה (.\32 col). - תנו שמות לפי מטרה, לא לפי מראה:
.errorשורד עיצוב מחדש,.red-textלא. - מוסכמת שמות עוזרת בפרויקטים גדולים יותר. BEM כותב
block__element--modifier, למשל.card__title--large.
טעויות נפוצות
- נקודה ב-HTML.
class=".badge"אף פעם לא מתאים ל-.badge. - שתי תכונות
class.<p class="a" class="b">שומר רק אתa. השתמשו ב-class="a b". - רווח כשהתכוונתם לשתי המחלקות.
.btn .primaryמחפש אלמנט מקונן;.btn.primaryהוא אותו אלמנט. - שימוש חוזר ב-id. id כפולים שוברים את
getElementById, קישורי עוגן וקישור של תוויות, גם אם ה-CSS נראה עובד. - עיצוב של הכול עם id. הספציפיות שלהם הופכת דריסות מאוחרות יותר לכואבות; השתמשו במחלקות.
שאלות נפוצות
איך בוחרים מחלקה ב-CSS?
כותבים נקודה ואחריה את שם המחלקה: .card { ... } מעצב כל אלמנט עם class="card". הנקודה נמצאת רק ב-CSS; בתכונה ב-HTML אין נקודה.
מה ההבדל בין class ל-id ב-CSS?
class אפשר להשתמש בו על כל מספר של אלמנטים, ולאלמנט יכולות להיות כמה מחלקות; id חייב להיות ייחודי בעמוד, ולאלמנט יש לכל היותר אחד. ב-CSS, ל-#id יש ספציפיות גבוהה בהרבה מ-.class, ולכן קשה יותר לדרוס כללי ID.
איך נותנים לאלמנט שתי מחלקות?
מפרידים את השמות ברווח בתוך תכונה אחת: class="btn primary". כתיבה של class פעמיים על אלמנט לא עובדת; הדפדפן שומר רק את התכונה הראשונה.
איך בוחרים אלמנט שיש לו שתי מחלקות?
משרשרים את סלקטורי המחלקה בלי רווח: .btn.primary מתאים לאלמנטים שיש להם את שתי המחלקות. עם רווח, .btn .primary פירושו אלמנט .primary בתוך אלמנט .btn.
האם שם מחלקה ב-CSS יכול להתחיל במספר?
ב-HTML כן, אבל סלקטור לא יכול להתחיל בספרה בלי escape, ולכן .1col הוא CSS לא תקין. עשו escape לספרה (.\31 col) או, עדיף, התחילו שמות מחלקות באות.