טיפ CSS: המאפיין display: contents
שני מאפייני ה Layout המתקדמים של CSS, פלקסבוקס וגריד, כוללים מגבלה קצת מעצבנת: הם מכילים את הגדרות העיצוב על הילדים הבלוקים הישירים שלהם.
במילים אחרות אם יש לי פס עליון באתר ובו 6 לינקים, וה HTML שלי נראה ככה:
<div class="topbar">
<a href="#">link #1</a>
<a href="#">link #2</a>
<a href="#">link #3</a>
<a href="#">link #4</a>
<a href="#">link #5</a>
<a href="#">link #6</a>
</div>
אז אין בעיה להשתמש ב CSS כזה כדי לסדר את כל הלינקים בתוך פלקסבוקס ולחלק להם את המקום שווה בשווה:
.topbar {
display: flex;
}
.topbar a {
padding: 0.2rem;
flex: 1;
}
אבל אם במקרה החלטתי לחלק את הלינקים ב HTML למספר "בלוקים", רק מבחינה סמנטית או כי היה לי יותר נוח לייצר HTML כזה:
<div class="topbar">
<div class="part1">
<a href="#">link #1</a>
<a href="#">link #2</a>
<a href="#">link #3</a>
</div>
<div class="part2">
<a href="#">link #4</a>
<a href="#">link #5</a>
</div>
<div class="part3">
<a href="#">link #6</a>
</div>
</div>
אז פתאום כל הפלקסבוקס שלי נשבר. יותר מדויק להגיד שהוא לא נשבר פשוט האלמנטים שמסודרים בפלקסבוקס הם עכשיו הדיבים part1, part2 ו part3, ולא הלינקים המקוריים.
הערך contents למאפיין display, שנתמך ברוב הדפדפנים (חוץ מ IE כמובן), מספק דרך קלה "לדלג" על אלמנטים כשמסדרים אותם בתוך פלקסבוקס או גריד. ה CSS הבא יגרום גם ל HTML השני להציג את הלינקים בצורה יפה בתוך פלקסבוקס:
.topbar {
display: flex;
}
.topbar > div {
display: contents;
}
.topbar a {
padding: 0.2rem;
flex: 1;
}
וככה זה נראה לייב בקודפן: