קל לארגן דפים בעזרת אוספים
אפשר לשמור ולסווג תוכן על סמך ההעדפות שלך.
גלישת תוכן סביב נתיבים מותאמים אישית
Razvan Caliman
במשך תקופה ארוכה, מעצבי אתרים נאלצו ליצור במסגרת אילוצי המלבן. רוב התוכן באינטרנט עדיין נלכד בתיבות פשוטות, מאחר שרוב היוזמות היצירתיות לפריסה לא מלבנית מסתיימות בתסכול. זה עומד להשתנות עם ההשקה של צורות CSS, שזמינות החל מ-Chrome 37.
צורות CSS מאפשרות למעצבי אינטרנט לעטוף תוכן סביב נתיבים מותאמים אישית, כגון מעגלים, אליפסות ופוליגונים, וכך להשתחרר מאילוצי המלבן.
ניתן להגדיר צורות באופן ידני או להסיק אותן מתמונות.
נבחן דוגמה פשוטה מאוד.
אולי הייתם תמימים כמוני כשהצפתם לראשונה תמונה עם חלקים שקופים מצפים שהתוכן יעטוף וימלא את הפערים, והתאכזבת מצורת העטיפה המלבנית שנשארה מסביב לאלמנט. ניתן להשתמש בצורות CSS כדי לפתור את הבעיה הזו.
הצהרת CSS shape-outside: url(image.png) מנחה את הדפדפן לחלץ צורה מהתמונה.
המאפיין shape-image-threshold מגדיר את רמת האטימות המינימלית של פיקסלים שישמשו ליצירת הצורה. הערך שלו חייב להיות בטווח שבין 0.0 (שקיפות מלאה) לבין 1.0 (אטום לחלוטין). לכן, המשמעות של shape-image-threshold: 0.5 היא שרק פיקסלים עם שקיפות של 50% ומעלה ישמשו ליצירת הצורה.
המאפיין float הוא המפתח כאן. המאפיין shape-outside מגדיר את צורת האזור שמסביב לתוכן הדף, אבל בלי הצף, לא תראו את השפעות הצורה.
לרכיבים יש אזור צף בצד הנגדי לערך שלהם מסוג float. לדוגמה, אם רכיב עם תמונה של ספל קפה צף שמאלה, האזור הצפה ייווצר מימין לספל. למרות שניתן להנדס תמונה עם פערים בשני הצדדים, התוכן יקיף את הצורה רק בצד הנגדי שצוין על ידי המאפיין הצף, משמאל או מימין, אף פעם לא בשניהם.
בעתיד, ניתן יהיה להשתמש ב-shape-outside באלמנטים שאינם צפים עם המבוא להחרגות CSS.
יצירת צורות באופן ידני
מעבר לחילוץ צורות מתמונות, אפשר גם לתכנת אותן באופן ידני. אפשר לבחור מבין כמה ערכים פונקציונליים כדי ליצור צורות: circle(), ellipse(), inset() ו-polygon(). כל פונקציית צורה מקבלת קבוצת קואורדינטות והיא מותאמת לתיבת הפניה שיוצרת את מערכת הקואורדינטות. עוד מעט מידע על תיבות הפניה.
הפונקציה מעגלים()
הסימון המלא של ערך צורת עיגול הוא circle(r at cx cy), כאשר r הוא רדיוס העיגול, בעוד ש-cx ו-cy הן קואורדינטות של מרכז המעגל על ציר ה-X וציר ה-Y. הקואורדינטות של מרכז המעגל הן אופציונליות. אם משמיטים אותם, מרכז הרכיב (הצטלבות האלכסונים) ישמש כברירת המחדל.
בדוגמה שלמעלה, התוכן יכסה את החלק החיצוני של נתיב מעגלי. הארגומנט היחיד 50% מציין את רדיוס המעגל, שבמקרה הזה הוא מחצית מהרוחב או הגובה של הרכיב. שינוי מידות האלמנט ישפיע על הרדיוס של צורת העיגול. זוהי דוגמה בסיסית לאופן שבו צורות CSS יכולות להיות רספונסיביות.
לפני שנמשיך, יש מעבר למה שחשוב לזכור: חשוב לזכור שצורות CSS משפיעות רק על צורת השטח הצף שמסביב לאלמנט. אם לרכיב יש רקע, הוא לא ייחתך על ידי הצורה. כדי להשיג את האפקט הזה, צריך להשתמש במאפיינים מ-CSS Masking (הוספת מסיכות CSS) – clip-path או mask-image המאפיין clip-path מועיל מאוד כי הוא מופיע באותו סימון כמו צורות CSS, כך שאפשר לעשות שימוש חוזר בערכים.
באיורים שבמסמך הזה נעשה שימוש בחיתוך כדי להדגיש את הצורה ולעזור לך להבין את האפקטים.
חזרה לצורת העיגול.
כשמשתמשים באחוזים עבור רדיוס המעגל, הערך מחושב למעשה באמצעות נוסחה קצת יותר מורכבת: sqrt(width^2 + גובה^2) / sqrt(2). כדאי להבין זאת כי כך אפשר לדמיין מה תהיה צורת העיגול שתתקבל אם מידות הרכיב לא זהות.
ניתן להשתמש בכל הסוגים של יחידות ה-CSS בקואורדינטות של פונקציות צורה – px, em, rem, vw, vh וכן הלאה. אפשר לבחור בשיטה גמישה או קשיחה מספיק כדי להתאים לצרכים שלכם.
אפשר לשנות את מיקום המעגל על ידי הגדרת ערכים מפורשים לקואורדינטות של המרכז שלו.
.element{
shape-outside: circle(50% at 0 0);
}
פעולה זו ממקמת את מרכז המעגל במקור של מערכת הקואורדינטות. מהי מערכת הקואורדינטות? כאן אנחנו משיקים את תיבות העזר.
תיבות הפניה לצורות CSS
תיבת ההפניה היא תיבה וירטואלית מסביב לאלמנט, שקובעת את מערכת הקואורדינטות שמשמשת לשרטט ולמיקום הצורה. נקודת המוצא של מערכת הקואורדינטות נמצאת בפינה השמאלית העליונה, כאשר ציר ה-X מפנה ימינה וציר ה-Y מצביע מטה.
חשוב לזכור: shape-outside משנה את הצורה של האזור הצף שמסביב לתוכן. האזור הצף משתרע על הקצוות החיצוניים של התיבה שהוגדרה על ידי המאפיין margin. התווית הזו נקראת margin-box, וכאן היא תיבת ברירת המחדל להפניה לצורה אם לא צוין אחרת באופן מפורש.
שתי ההצהרות הבאות על שירותי CSS מניבות תוצאות זהות:
.element{
shape-outside: circle(50% at 0 0);
/* identical to: */
shape-outside: circle(50% at 0 0) margin-box;
}
עדיין לא הגדרנו שוליים לרכיב. בשלב זה ניתן להניח שמקור מערכת הקואורדינטות ומרכז המעגל נמצאים בפינה השמאלית העליונה של אזור התוכן של הרכיב. השינוי הזה משתנה כאשר מגדירים שוליים:
.element{
shape-outside: circle(50% at 0 0) margin-box;
margin: 100px;
}
המקור של מערכת הקואורדינטות נמצא עכשיו מחוץ לשטח התוכן של האלמנט (100 פיקסלים למעלה ו-100 פיקסלים משמאל), וגם מרכז המעגל. הערך המחושב של רדיוס המעגל גדל גם הוא, עקב השטח המוגדל של מערכת הקואורדינטות שנוצרה על ידי תיבת ההפניה margin-box.