כשמדובר בפריסות CSS, שני הכלים העיקריים העומדים לרשותכם הם Grid ו-Flexbox. בעוד ששניהם מדהימים ביצירת פריסות, הם משרתים מטרות שונות ויש להם חוזקות וחולשות שונות.
סרטון היום של MUO גלול כדי להמשיך עם התוכן
למד כיצד שתי שיטות הפריסה מתנהגות ומתי להשתמש באחת על פני השנייה.
ההתנהגות השונה של CSS Flexbox ו-Grid
כדי לעזור לדמיין דברים, צור א index.html קובץ בתיקייה המועדפת עליך והדבק בסימון הבא:
<!DOCTYPE html>
<html lang="en">
<head>
<link rel="stylesheet" href="style.css">
</head>
<body>
<h1>Flexbox vs Grid</h1>
<h2>Flexbox:</h2>
<div class="flex-container">
<div>Lorem.</div>
<div>Lorem ipsum dolor sit amet.</div>
<div>Lorem ipsum dolor sit amet consectetur.</div>
<div>Lorem ipsum dolor sit.</div>
<div>Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
<div>Lorem ipsum dolor sit amet.</div>
<div>Lorem ipsum dolor sit amet consectetur.</div>
<div>Lorem ipsum dolor sit.</div>
</div>
<h2>Grid:</h2>
<div class="grid-container">
<div>Lorem.</div>
<div>Lorem ipsum dolor sit amet.</div>
<div>Lorem ipsum dolor sit amet consectetur.</div>
<div>Lorem ipsum dolor sit.</div>
<div>Lorem ipsum dolor sit amet consectetur adipisicing elit.</div>
<div>Lorem ipsum dolor sit amet.</div>
<div>Lorem ipsum dolor sit amet consectetur.</div>
<div>Lorem ipsum dolor sit.</div>
</div>
</body>
</html>
שני ה-divs מכילים את אותם ילדים בדיוק כך שתוכל להחיל מערכת שונה על כל אחד מהם ולהשוות ביניהם.
אתה יכול גם לראות שה-HTML מייבא קובץ גיליון סגנונות בשם style.css . צור את הקובץ הזה באותה תיקיה כמו index.html והדבק בו את הסגנונות הבאים:
body {
padding: 30px;
}
h1 {
color: #A52A2A;
}
h2 {
font-size: large;
}
div:not([class]) {
outline: 2px solid black;
padding: 0.5em;
}
הדף שלך אמור להיראות כך:
עכשיו, להפוך את הראשון זו התוצאה: ה מיכל flex div מציג כעת את רכיבי הצאצא שלו בעמודות. עמודות אלה גמישות ומגוונות - הן מתאימות את הרוחב שלהן על סמך השטח הזמין בנקודת התצוגה. התנהגות זו היא אחת העיקריות מושגים בסיסיים מאחורי Flexbox . כדי למנוע הצפת עמודים ב מיכל flex , אתה יכול להשתמש ב גמיש-עטיפה תכונה: אם אין מספיק מקום לרכיבי הילדים להתאים על קו אחד, כעת הם יתעטפו וימשיכו בשורה הבאה. כעת החל פריסת רשת על השני שום דבר לא יקרה עם ההצהרה שלעיל בלבד מכיוון שהתנהגות ברירת המחדל של Grid יוצרת שורות הנערמות זו על גבי זו. כדי לעבור לתצוגת עמודות, עליך לשנות את ה רשת-זרימה אוטומטית רכוש (שהוא שׁוּרָה כברירת מחדל): עכשיו הנה התוצאה: כדי לציין את המספר המדויק של העמודות הרצויות בכל שורה, השתמש עמודות-תבנית-רשת : ערך זה יוצר חמש עמודות ברוחב שווה. כדי לקבל התנהגות עטיפה דומה ל-Flexbox, אתה יכול להשתמש במאפיינים רספונסיביים כמו התאמה אוטומטית ו מינימום מקסימום : לעתים קרובות תשמעו את Flexbox ו-Grid המכונים חד-ממדיים ודו-מימדיים, בהתאמה. עם זאת, זו לא האמת המלאה, מכיוון שגם Flexbox וגם Grid יכולים ליצור א מערכת פריסה דו מימדית . הם פשוט עושים את זה בדרכים שונות, עם אילוצים שונים. מה שהכי חשוב הוא הדרך שבה אתה יכול לשלוט בהיבט החד-ממדי של הפריסה. קחו למשל את התמונה הבאה: שים לב עד כמה עקבית העמודה Grid וכמה לא אחידה כל עמודה ב-Flexbox. כל שורה/עמודה במיכל flex עצמאית מהאחרת. אז חלקם עשויים להיות גדולים יותר מאחרים, תלוי בגודל התוכן שלהם. אלה פחות כמו עמודות ויותר כמו בלוקים עצמאיים. הרשת פועלת אחרת, על ידי הגדרת רשת דו-ממדית עם עמודות נעולות כברירת מחדל. עמודה עם טקסט קצר תהיה באותו גודל כמו עמודה עם טקסט ארוך בהרבה, כפי שמדגימה התמונה למעלה. לסיכום, CSS Grid הוא קצת יותר מובנה, בעוד Flexbox הוא יותר מערכת פריסה גמישה ומגיבה . מערכות פריסה חלופיות אלו נקראות היטב! האם אתה רוצה להסתמך על הגודל הפנימי של כל עמודה/שורה, כפי שהוגדר על ידי התוכן שלהם? או האם ברצונך לקבל שליטה מובנית מנקודת המבט של ההורה? אם התשובה שלך היא הראשונה, אז Flexbox הוא הפתרון המושלם עבורך. כדי להדגים זאת, שקול תפריט ניווט אופקי. החלף את הסימון בתוך <גוף> תגיות עם זה: החלף את הסימון בקובץ ה-CSS בזה: הנה התוצאה: כעת, הפוך את הניווט הראשון לפריסה גמישה ואת השני לפריסת רשת על ידי הוספת ה-CSS הבא: השווה את התוצאות כדי לראות מה מתאים יותר: מהתמונה לעיל, אתה יכול לראות כי Flexbox הוא הפתרון המושלם במקרה זה. יש לך פריטים שאתה רוצה ללכת זה ליד זה ולשמור על הגודל הפנימי שלהם (גדול או קטן תלוי באורך הטקסט). עם Grid, לכל תא יש רוחב קבוע, והוא לא נראה טוב - לפחות עם קישורי טקסט רגיל. מקום אחד ש-Grid באמת מצטיין הוא כאשר אתה רוצה ליצור מערכת קשיחה מההורה. דוגמה לכך היא סט של רכיבי כרטיס שצריכים להיות רחבים באותה מידה, גם אם הם מכילים כמויות שונות של תוכן. החלף את הסימון בתוך <גוף> תגיות עם זה: הוסף את ה-CSS הזה: אתה מתחיל עם תצוגת Flexbox כדי לראות איך היא נראית, כך שתוכל להשוות אותה לתצוגת הרשת. הנה הפלט: שימו לב שהעמודה האחרונה גדולה יותר מאחרות בגלל הגודל המהותי שלה, וזה מה ש-Flexbox מתמודד היטב. אבל כדי להפוך אותם לאותו רוחב באמצעות Flexbox, תצטרך ללכת נגד הגודל המהותי הזה על ידי הוספת הדברים הבאים: זה עושה את העבודה. אבל Grid מתאימה יותר למקרים כאלה. אתה רק מציין את מספר העמודות, ואתה מוכן: הנה התוצאה: יתרון נוסף בשימוש ב-Grid הוא שההורה שולט בפריסה של הילדים. כך שתוכל להוסיף ולהסיר אלמנטים צאצאים מבלי לדאוג לשבירת הפריסה. לסיכום, CSS Grid הוא נהדר כאשר אתה רוצה שליטה מובנית מנקודת מבטו של ההורה, עם גודל שווה של עמודות ללא קשר לגודל התוכן האישי שלה. Flexbox, לעומת זאת, היא אידיאלית כאשר אתה רוצה מערכת גמישה יותר המבוססת על הגודל הפנימי של האלמנטים.
.flex-container {
display: flex;
}
.flex-container {
display: flex;
flex-wrap: wrap;
} .grid-container {
display: grid;
} .grid-container {
display: grid;
grid-auto-flow: column;
} .grid-container {
display: grid;
grid-template-columns: repeat(5, 1fr);
} .grid-container {
display: grid;
grid-template-columns: repeat(auto-fit, min-max(300px, 1fr));
} אפליקציה שעוזרת לך למצוא בגדים
לצרוב קובץ iso לאתחול לכונן הבזק מסוג usb ולהפעיל אותו
מתי להשתמש ב-Flexbox
<h1>Flexbox vs. Grid</h1>
<header class="flex">
<h2>Flexbox</h2>
<nav>
<ul class="nav-list">
<li><a href="">Home</a></li>
<li><a href="">About Us</a></li>
<li><a href="">Service Information Goes Here</a></li>
<li><a href="">Blog Contact</a></li>
<li><a href=""></a></li>
</ul>
</nav>
</header>
<header class="grid">
<h2>Grid</h2>
<nav>
<ul class="nav-list">
<li><a href="">Home</a></li>
<li><a href="">About Us</a></li>
<li><a href="">Service Information Goes Here</a></li>
<li><a href="">Blog Contact</a></li>
<li><a href=""></a></li>
</ul>
</nav>
</header> .nav-list {
list-style: none;
margin: 0;
padding: 0;
}
header {
--border-width: 5px;
border: var(--border-width) solid black;
margin-bottom: 30px;
}
header > *:first-child {
border: var(--border-width) solid #FFC0CB;
margin: 0;
}
li {
border: var(--border-width) solid #90EE90;
} .flex .nav-list {
display: flex;
gap: 1em;
flex-wrap: wrap;
}
.grid .nav-list {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(150px, 1fr));
} מתי להשתמש ברשת CSS
<h1>Flexbox vs. Grids</h1>
<section class="cards">
<h2>Some cards</h2>
<div class="columns">
<article class="card">
<h3 class="card__title">Fun Stuff</h3>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit.</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Excavate</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">Fun Stuff</h3>
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit.</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Excavate</li>
</ul>
</article>
<article class="card">
<h3 class="card__title">A Longer Title Than Others</h3>
<p>Lorem ipsum, dolor sit amet consectetur adipisicing elit. Facere
excepturi sit ea dolores totam veniam qui voluptates commodi,
perferendis et!</p>
<ul>
<li>Lorem</li>
<li>Ipsum</li>
<li>Excavate</li>
</ul>
</article>
</div>
</section> .columns {
display: flex;
gap: 1em;
}
article {
background-color: #90EE90;
color: black;
padding: 15px;
}
ul {
background-color: white;
padding: 2px;
list-style: none;
} .columns > * {
flex: 1;
} .columns {
display: grid;
grid-template-columns: 1fr 1fr 1fr;
gap: 1em;
} אז מתי כדאי להשתמש ברשת או ב-Flexbox?