חיפוש ]

מספר מילים על התכונה :has ב-CSS

הפסאודו-קלאס :has ב-CSS הוא סלקטור מאד עוצמתי שהוצג בCSS Selectors Level 4. סלקטור זה מאפשר למפתחים להחיל עיצוב (CSS) על אלמנט בהתבסס על ננוכחות של צאצאיו או של אלמנטים קשורים אחרים, תכונה שנדרשה זמן רב ב-CSS יש לציין.

מהו מאפיין :has?

:has הוא פסאודו-קלאס יחסי המטרגט אלמנטים בעלי אלמנטים שעומדים בקריטריונים מסוימים. סלקטור זה שימושי במיוחד לעיצוב אלמנט אם הוא מכיל Child Elements מסוימים או אם תנאים מסוימים בתת-העץ (Subtree) שלו מתקיימים.

תחביר – Syntax

התחביר הבסיסי של הפסאודו-קלאס :has הוא:

element:has(selector) {
    /* styles */
}

בתחביר זה, element מייצג את אלמנט ההורה, ו-selector מייצג את האלמנטים הילדים או הצאצאים שנבדקים.

דוגמאות מעשיות

ניתן מבט בכמה דוגמאות מעשיות בכדי להבין כיצד עובד הסלקטור :has:

דוגמה 1: הדגשת אלמנט אב בהתבסס על Child Element

נניח שאנחנו רוצים להדגיש div כלשהו במידה והוא מכיל אלמנט מסוג img. נוכל לעשות זאת באופן הבא:

<div>
    <p>This div contains an image.</p>
    <img src="https://via.placeholder.com/150" alt="Placeholder Image">
</div>
<div>
    <p>This div does not contain an image.</p>
</div>
div:has(img) {
    border: 2px solid green;
    padding: 10px;
}

דוגמה 2: עיצוב אלמנט הורה של פריט רשימה בהתבסס על אלמנט ילד

אם נרצה לעצב אלמנט מסוג ul בצורה שונה כאשר הוא מכיל אלמנט li עם מחלקה (class) ספציפית, נוכל להשתמש בסלקטור :hasבאופן הבא:

<ul>
    <li>Item 1</li>
    <li class="highlight">Item 2</li>
    <li>Item 3</li>
</ul>
<ul>
    <li>Item A</li>
    <li>Item B</li>
    <li>Item C</li>
</ul>
ul:has(li.highlight) {
    background-color: lightyellow;
    padding: 10px;
}

דוגמה 3: עיצוב אימות טפסים

נוכל גם להשתמש בפסאודו-קלאס :has עבור אימות טפסים. לדוגמה, בכדי לעצב את div האב של input במידה וה input אינו חוקי נשתמש ב CSS הבא:

<form>
    <div class="form-group">
        <label for="email">Email:</label>
        <input type="email" id="email" required>
    </div>
    <button type="submit">Submit</button>
</form>
.form-group:has(input:invalid) {
    border: 2px solid red;
    padding: 10px;
}

השוואה עם JavaScript

בכדי להשיג אפקטים דומים לפסאודו-קלאס :has בעבר היה צורך להשתמש ב-JavaScript. לדוגמה, בדיקת נוכחות של Child Element ולאחר מכן החלת העיצוב דינמית. בעוד ש-JavaScript מספקת גמישות, השימוש ב-CSS למשימות כאלה יכול להיות יעיל יותר ולהפחית את מורכבות הקוד.

לצורך ההשוואה, כך ניתן להשיג את התוצאה של דוגמה מספר 1 באמצעות JavaScript:

document.addEventListener("DOMContentLoaded", function() {
    const divs = document.querySelectorAll('div');

    divs.forEach(div => {
        if (div.querySelector('img')) {
            div.style.border = '2px solid green';
            div.style.padding = '10px';
        }
    });
});

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

תמיכה בדפדפנים

נכון לעכשיו, הפסאודו-קלאס :has עדיין לא נתמך בכל הדפדפנים. חשוב לבדוק את תאימות הדפדפנים הנוכחית ולשקול שימוש ב Polyfills עבור דפדפנים שלא תומכים בסלקטור זה.

Data on support for the css-has feature across the major browsers from caniuse.com

סיכום

ניתן לומר שהפסאודו-קלאס :has ב-CSS משנה את כללי המשחק עבור מפתחים ומאפשר יצירת עיצובים מורכבים ודינמיים יותר. על ידי הבנה ושימוש בסלקטור זה תוכלו ליצור עמודי אינטרנט אינטראקטיביים ו״מושכים״ יותר בקלות.

רועי יוסף
רועי יוסף

מפתח אתרים ותבניות וורדפרס. מספק אתרים עם ביצועים גבוהים, מותאמים למנועי חיפוש ובעלי קוד ולידי, סמנטי ונקי. צריכים עזרה? צרו איתי קשר.

0 תגובות...

תגובה חדשה

הוסיפו קוד באמצעות הכפתורים מטה. למשל, בכדי להוסיף PHP לחצו על הכפתור PHP והוסיפו את הקוד בתוך השורטקוד. מצאתם שגיאה בפוסט? עדכנו אותנו...