Menu

CSS Display: block, inline, inline-block, none ו-flex

המאפיין display קובע איך אלמנט משתתף בפריסה. למדו את block, inline ו-inline-block עם תיבות מדודות זו לצד זו, display none מול visibility hidden, ואיפה flex, grid, flow-root ו-contents משתלבים.

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

מה display עושה

לכל אלמנט יש ערך display שקובע איך הוא נפרס. שלושת הערכים שפוגשים ראשונים הם block, inline ו-inline-block. הנה שלוש תיבות זהות, עם אותם width, height, padding ו-margin, ורק ה-display שונה:

blockinlineinline-block
מתחיל בשורה חדשהכןלאלא
רוחב כברירת מחדלממלא את המכלמתאים לתוכןמתאים לתוכן
width ו-heightחליםמתעלמים מהםחלים
margin אנכיחלמתעלמים ממנוחל
padding אנכידוחף את התוכןמצויר, אבל לא מרחיק שורות זו מזודוחף את התוכן
אלמנטים טיפוסייםdiv, p, h1, ul, sectionspan, a, strong, embutton, input, img (אלמנטים מוחלפים מתנהגים כך)

בתצוגה המקדימה, תיבת ה-block יושבת בשורה משלה ברוחב 120px. תיבת ה-inline מתעלמת מהרוחב ומהגובה ועוטפת רק את המילה שלה, וה-padding והגבול האנכיים שלה בולטים מעל השורה ומתחתיה בלי להגביה את השורה. תיבת ה-inline-block נשארת בשורת הטקסט אבל שומרת על הגודל המלא שלה.

display: block

אלמנט block תופס את כל הרוחב הזמין ודוחף את מה שבא אחריו לשורה חדשה. הפיכת קישור ל-block היא הדרך להפוך שורה שלמה ללחיצה:

.menu a {
  display: block;       /* the full row is the link */
  padding: 10px 16px;
}

לבלוק אפשר לקבוע רוחב, ו-margin: 0 auto ממרכז אותו ברגע שיש לו רוחב, כמו שמראה עמוד מרכוז div.

display: inline-block

inline-block הוא דרך האמצע: הוא זורם בשורה כמו מילה, אבל אפשר לקבוע לו גודל. הוא שימושי לתגיות, לכפתורים ולאייקונים בתוך טקסט:

כמה תיבות inline-block בשורה מקבלות רווח קטן ביניהן מהרווח הלבן ב-HTML. לשורות של תיבות, display: flex על ההורה הוא הכלי הטוב יותר.

display: none מול visibility: hidden

שניהם הופכים אלמנט לבלתי נראה. ההבדל הוא אם הוא שומר את המקום שלו:

display: nonevisibility: hiddenopacity: 0
תופס מקוםלאכןכן
אפשר ללחוץ עליולאלאכן
נקרא על ידי קוראי מסךלאלאכן
אפשר להנפיש אותו בצורה חלקהלאלאכן

התכונה hidden של HTML עושה את אותו הדבר כמו display: none דרך גיליון הסגנונות של הדפדפן, ולכן כל כלל CSS שקובע display על האלמנט (למשל .card { display: flex; }) דורס אותה, והאלמנט מופיע שוב. הוסיפו [hidden] { display: none !important; } אם זה פוגע בכם.

כדי להסתיר משהו חזותית אבל להשאיר אותו לקוראי מסך (למשל תווית לכפתור אייקון), השתמשו במחלקה מסוג "visually hidden" במקום display: none.

display: flex ו-display: grid

שני אלה הופכים אלמנט למכל פריסה בשביל הילדים שלו:

  • display: flex מסדר את הילדים בשורה או בעמודה אחת, עם שליטה ביישור ובמרווחים. ראו flexbox.
  • display: grid מציב את הילדים בשורות ובעמודות בו זמנית.

המכל עצמו נשאר block. inline-flex ו-inline-grid עושים את אותו הדבר לילדים, אבל גורמים למכל לזרום בשורה, כמו inline-block.

שאר הערכים

ערךמה הוא עושה
flow-rootבלוק שמכיל את ה-floats שלו ומונע מ-margin של ילדים לדלוף החוצה; ה-"clearfix" המודרני
contentsהתיבה של האלמנט עצמו נעלמת, והילדים שלו מתנהגים כילדים של ההורה שלו. הימנעו מזה בכפתורים, ברשימות ובטבלאות: חלק מהדפדפנים מאבדים את המשמעות של האלמנט בשביל קוראי מסך
list-itemבלוק עם סימן רשימה, ברירת המחדל של li
table, table-row, table-cellפריסת טבלה על אלמנטים שאינם טבלה
inline-flex, inline-gridמכל flex או grid שיושב בשורה

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

  • הגדרת width או height על span או a. אלמנטי inline מתעלמים מהם. השתמשו ב-inline-block או ב-block.
  • margin אנכי על אלמנט inline. גם ממנו מתעלמים. אותו פתרון.
  • שימוש ב-display: none כדי להסתיר טקסט שמיועד לקוראי מסך. הוא מסתיר אותו גם מהם.
  • ציפייה שילד יופיע בתוך הורה עם display: none. שום דבר בתוך הורה מוסתר לא מוצג.
  • כלל display שדורס את התכונה hidden. כלל ה-CSS מנצח.
  • ניסיון להנפיש את display. הגדרת display: none מסתירה את האלמנט מיד, בלי דהייה; הנפישו את opacity והחליפו את display (או את visibility) בסוף.

שאלות נפוצות

מה ההבדל בין block, inline ו-inline-block?

אלמנט block מתחיל בשורה חדשה וממלא את הרוחב הזמין. אלמנט inline זורם בתוך טקסט ומתעלם מ-width, מ-height ומ-margin אנכי. inline-block זורם בתוך טקסט כמו inline, אבל מקבל רוחב, גובה, padding ו-margin כמו block.

מה עושה display: none?

הוא מסיר את האלמנט מהעמוד לגמרי: הוא לא תופס מקום, לא מוצג, ומוסתר מקוראי מסך. הילדים שלו מוסתרים יחד איתו, ואי אפשר להציג אותם עם ערך display משלהם.

מה ההבדל בין display: none ל-visibility: hidden?

display: none מסיר את האלמנט ואת המקום שלו. visibility: hidden הופך אותו לבלתי נראה אבל שומר את המקום שלו בפריסה, כך ששום דבר לא זז.

האם div הוא block או inline כברירת מחדל?

Block. div, p, כותרות, ul, section ו-form הם block כברירת מחדל; span, a, strong, em, img, input ו-button הם inline או inline-block.

למה יש רווח בין אלמנטי inline-block?

הרווח הלבן בין התגיות ב-HTML מוצג כרווח, בדיוק כמו בין מילים. השתמשו במקום זאת ב-display: flex עם gap על ההורה, או הסירו את הרווח הלבן.

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

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

להתחיל