אבל ביקשתי לשים את זה באמצע
נתבונן על הגדרת ה CSS הבאה:
body, html {
height: 100vh;
padding: 0;
margin: 0;
}
main {
display: flex;
place-items: center;
background: #a0a0a0;
}
וה HTML שבתוך ה body כולל בסך הכל:
<main>hello world</main>
קצת מפתיע לגלות שהטקסט לא מופיע באמצע המסך, לא אופקית ולא אנכית. מה קורה כאן?
אלמנט ה body אכן מוגדר לתפוס את כל הגובה של המסך, אבל אין הגדרת גובה על ה main ולכן גובהו ייקבע לפי התוכן. מאחר והתוכן הוא שורה בודדת זה יהיה גובה האלמנט.
הפקודה
place-items: center
באמת קובעת לmain
למקם את הילדים שלו באמצע שלו. אבל שימו לב שכל גובהו הוא שורה אחת ולכן השורה הבודדת תופסת את כל הגובה.ומה לגבי הרוחב? אלמנט main תופס בברירת מחדל את כל רוחב העמוד, ולכן כשמנסים לשים אותו "באמצע" הוא עדיין תופס את כל רוחב העמוד.
איך בכל זאת נשים את הטקסט באמצע המסך, גם אופקית וגם אנכית? ברגע שמבינים את הבעיה התיקונים הם פשוטים:
נקבע את הגובה של main למספר קבוע או לגובה של המיכל שלו, במקום לגובה של התוכן שלו, על ידי הגדרת
height: 100%
.אם אנחנו רוצים שהטקסט יהיה באמצע ה main נוכל להגדיר מאפיין
text-align
על הmain
. הגדרת text align קובעת את יישור הטקסט בתוך בלוק בתצוגה.אם אנחנו רוצים להגדיר מאפייני בלוק נוספים לטקסט נוכל להגדיר סביבו
p
ולקבוע את רוחב הפיסקה להיות בדיוק רוחב התוכן. כך אפשר יהיה להוסיף עוד פיסקאות ולקבל מספר אלמנטים באמצע.
סך הכל הדוגמה עם היישור בקודפן:
ובקישור: https://codepen.io/ynonp/pen/WbeeQqm