תחילת העבודה עם צורות CSS

גלישת תוכן בנתיב בהתאמה אישית

Razvan Caliman
Razvan Caliman

במשך תקופה ארוכה מעצבי האתרים נאלצו ליצור בתוך המגבלות של המלבן. רוב התוכן באינטרנט עדיין נלכד בתיבות פשוטות, כי רוב הכוונות היצירתיות שלו בפריסה לא מלבנית מסתיימות בתסכול. המצב הזה עומד להשתנות עם ההשקה של CSS Shapes, שזמין החל מגרסה 37 של Chrome. בעזרת צורות CSS, מעצבים יכולים לעטוף תוכן בנתיב מותאם אישית, כמו עיגולים, אליפסות ומרובעים, וכך להתנתק מהמגבלות של ריבוע.

אפשר להגדיר צורות באופן ידני או להסיק אותן מתמונות.

נבחן דוגמה פשוטה מאוד.

אולי גם אתם הייתם תמימים כמוני כשהצבתם לראשונה תמונה עם חלקים שקופים, וציפיתם שהתוכן יתעגל וימלא את הפערים, רק כדי להתאכזב מהצורה המלבנית של התמונה שממשיכה להופיע סביב הרכיב. ניתן להשתמש בצורות CSS כדי לפתור את הבעיה הזו.

חילוץ צורה מתמונה
<img class="element" src="image.png" />
<p>Lorem ipsum…</p>

<style>
.element{
  shape-outside: url(image.png);
  shape-image-threshold: 0.5;
  float: left;
}
</style>

ההצהרה shape-outside: url(image.png) ב-CSS מורה לדפדפן לחלץ צורה מהתמונה.

המאפיין shape-image-threshold מגדיר את רמת השקיפות המינימלית של הפיקסלים שישמשו ליצירת הצורה. הערך שלו חייב להיות בטווח שבין 0.0 (שקוף לחלוטין) לבין 1.0 (אטום מלא). לכן, המשמעות של shape-image-threshold: 0.5 היא שרק פיקסלים עם שקיפות של 50% ומעלה ישמשו ליצירת הצורה.

המפתח כאן הוא המאפיין float. המאפיין shape-outside מגדיר את הצורה של האזור שסביבו התוכן יתגלגל, אבל בלי ה-float לא תראו את ההשפעות של הצורה.

לרכיבים יש אזור צף בצד הנגדי לערך float שלהם. לדוגמה, אם רכיב עם תמונה של ספל קפה צף שמאלה, האזור הצף ייווצר מימין לספל. אפשר ליצור תמונה עם פערים משני הצדדים, אבל התוכן יתעגל סביב הצורה רק בצד הנגדי שצוין על ידי מאפיין ה-float, ימין או שמאל, אבל אף פעם לא בשניהם.

בעתיד, תוכלו להשתמש ב-shape-outside ברכיבים שלא מרחפים, בעזרת ההכללות וההחרגות של CSS.

יצירת צורות באופן ידני

מעבר לחילוץ צורות מתמונות, אפשר גם לקודד אותן באופן ידני. אפשר לבחור מבין כמה ערכים פונקציונליים כדי ליצור צורות: circle(),‏ ellipse(),‏ inset() ו-polygon(). כל פונקציית צורה מקבלת קבוצת קואורדינטות, והיא מותאמת לתיבת עזר שמגדירה את מערכת הקואורדינטות. בקרוב נסביר על תיבות העזר.

הפונקציה circle()

איור של ערך הצורה circle()

הסימון המלא של ערך של צורה עגולה הוא circle(r at cx cy), כאשר r הוא הרדיוס של המעגל, ו-cx ו-cy הן הקואורדינטות של מרכז המעגל בציר X ובציר Y. הקואורדינטות של מרכז המעגל הן אופציונליות. אם משמיטים אותם, מרכז הרכיב (חיתוך האלכסונים שלו) ישמש כברירת המחדל.

.element{
  shape-outside: circle(50%);
  width: 300px;
  height: 300px;
  float: left;
}

בדוגמה שלמעלה, התוכן יהיה כרוך סביב החלק החיצוני של נתיב עגול. הארגומנט היחיד 50% מציין את רדיוס המעגל, שבמקרה הספציפי הזה שווה לחצי מהרוחב או מהגובה של הרכיב. שינוי מידות האלמנט ישפיע על הרדיוס של צורת המעגל. זוהי דוגמה בסיסית לאופן שבו אפשר ליצור צורות רספונסיביות ב-CSS.

לפני שנמשיך, חשוב לזכור ש-CSS Shapes משפיע רק על צורת אזור הציפה סביב רכיב. אם לאלמנט יש רקע, הוא לא ייחתוך על ידי הצורה. כדי להשיג את האפקט הזה, צריך להשתמש במאפיינים מתוך אנונימיזציה של שירותי CSSclip-path או מסכה-תמונה. הנכס clip-path מאוד שימושי כי הוא פועל לפי אותו סימון כמו צורות CSS, כך שאפשר לעשות שימוש חוזר בערכים.

איור של צורה circle()‎ + clip-path

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

חזרה לצורת העיגול.

כשמשתמשים באחוזים לחישוב רדיוס המעגל, הערך מחושב בפועל באמצעות נוסחה מורכבת יותר: sqrt(width^2 + height^2) / sqrt(2). כדאי להבין זאת מכיוון שהדבר יעזור לך לדמיין מה תהיה צורת העיגול שתתקבל אם מימדי הרכיב לא שווים.

אפשר להשתמש בכל סוגי היחידות של CSS בקואורדינטות של פונקציית הצורה – px,‏ em,‏ rem,‏ vw,‏ vh וכו'. אתם יכולים לבחור את האפשרות הכי גמישה או הכי קשיחה שמתאימה לצרכים שלכם.

כדי לשנות את המיקום של המעגל, מגדירים ערכים מפורשים לקווי הרוחב והאורך של מרכז המעגל.

.element{
  shape-outside: circle(50% at 0 0);
}

כך ממקמים את מרכז המעגל במקור של מערכת הקואורדינטות. מהי מערכת הקואורדינטות? כאן אנחנו משיקים את תיבות העזר.

תיבות עזרה לצורות CSS

תיבת העזר היא תיבה וירטואלית מסביב לאלמנט, שיוצרת את מערכת הקואורדינטות שמשמשת לשרטוט ולמיקום של הצורה. מקור מערכת הקואורדינטות נמצא בפינה השמאלית העליונה שלה, כאשר ציר X מצביע ימינה וציר Y מצביע למטה.

מערכת קואורדינטות עבור צורות CSS

חשוב לזכור ש-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.

מערכת קואורדינטות של Margin-box עם שוליים וללא שוליים
יש כמה אפשרויות לתיבת העזרה שאפשר לבחור מתוכן: margin-box,‏ border-box,‏ padding-box ו-content-box. השמות שלהן מרמזים על הגבולות שלהן. הסברנו קודם על 'margin-box'. 'border-box' מוגבל על ידי הקצוות החיצוניים של גבולות הרכיב, 'padding-box' מוגבל על ידי הרווח של הרכיב, ואילו 'content-box' זהה לשטח הפנים בפועל שבו נעשה שימוש בתוכן בתוך הרכיב.
איור של כל התיבות של קובצי העזר

ניתן להשתמש רק בתיבת עזר אחת בכל רגע נתון עם הצהרת shape-outside. כל תיבת עזרה תשפיע על הצורה באופן שונה, ולפעמים באופן עדין. יש מאמר נוסף שמספק הסבר מעמיק יותר ועוזר להבין תיבות עזרה לגבי צורות CSS.

הפונקציה ellipse()‎

איור של ערך הצורה ellipse()

אליפסות נראות כמו עיגולים מכווצים. הם מוגדרים כ-ellipse(rx ry at cx cy), כאשר rx ו-ry הם הרדיוס של האליפסה בציר X ובציר Y, ו-cx ו-cy הן הקואורדינטות של מרכז האליפסה.

.element{
  shape-outside: ellipse(150px 300px at 50% 50%);
  width: 300px;
  height: 600px;
}

ערכי האחוזים יחושבו מהמאפיינים של מערכת הקואורדינטות. אין צורך במתמטיקה מורכבת. ניתן להשמיט את הקואורדינטות של מרכז האליפסה, והן יחושבו ממרכז מערכת הקואורדינטות.

אפשר גם להגדיר את הרדיוס בצירים X ו-Y באמצעות מילות מפתח: הערך farthest-side מניב רדיוס שווה למרחק בין מרכז האליפסה לצד של תיבת העזר הרחוק ממנו ביותר, ואילו הערך closest-side מניב את הערך ההפוך – המרחק הקצר ביותר בין המרכז לצד.

.element{
  shape-outside: ellipse(closest-side farthest-side at 50% 50%);
  /* identical to: */
  shape-outside: ellipse(150px 300px at 50% 50%);
  width: 300px;
  height: 600px;
}

האפשרות הזו שימושית כשהמידות של הרכיב (או של תיבת העזר) עשויות להשתנות באופן בלתי צפוי, אבל רוצים שצורת האובליסק תתאים את עצמה.

אפשר להשתמש באותן מילות מפתח farthest-side ו-closest-side גם לקוטר בפונקציית הצורה circle().

הפונקציה segment()

איור של ערך הצורה של הפוליגון

אם עיגולים ואליפסות מגבילים מדי, פונקציית הצורה של הפוליגון פותחת עולם של אפשרויות. הפורמט הוא polygon(x1 y1, x2 y2, ...), שבו מציינים זוגות של קואורדינטות x ו-y לכל קודקוד (נקודה) של פוליגון. מספר הזוגות המינימלי שצריך לציין כדי לציין פוליגון הוא שלושה, משולש.

.element{
  shape-outside: polygon(0 0, 0 300px, 300px 600px);
  width: 300px;
  height: 600px;
}

הקודקודים ממוקמים במערכת הקואורדינטות. בפוליגונים רספונסיביים, אפשר להשתמש בערכי אחוזים לחלק מהקואורדינטות או לכולן.

.element{
  /* polygon responsive to font-size*/
  shape-outside: polygon(0 0, 0 100%, 100% 100%);
  width: 20em;
  height: 40em;
}

יש פרמטר fill-rule אופציונלי, שמיובא מ-SVG. הפרמטר הזה מורה לדפדפן איך להתייחס ל'פנים' של פוליגון במקרה של נתיבים או צורות סגורות, אם יש כאלה. ג'וני טרית'ל מסביר בצורה טובה מאוד איך פועל נכס כלל המילוי ב-SVG. אם לא מגדירים את הפרמטר, fill-rule בברירת המחדל הוא nonzero.

.element{
  shape-outside: polygon(0 0, 0 100%, 100% 100%);
  /* identical to: */
  shape-outside: polygon(nonzero, 0 0, 0 100%, 100% 100%);
}

הפונקציה inset()‎

פונקציית הצורה inset() מאפשרת ליצור צורות מלבניות שתוכלו לעטוף בהן תוכן. זה אולי נשמע לא הגיוני, בהתחשב בהנחה הראשונית ש-CSS Shapes משחרר את תוכן האינטרנט מתיבות פשוטות. יכול להיות מאוד. עדיין לא מצאתי תרחיש לדוגמה לשימוש ב-inset() שלא ניתן להשיג באמצעות רכיבי float ורכיבי שוליים או באמצעות polygon(). עם זאת, inset() מספק ביטוי קריא יותר לצורות מלבניות מאשר polygon().

הסימון המלא של פונקציית צורה מוכנסת הוא inset(top right bottom left border-radius). ארבעת הארגומנטים הראשונים של המיקום הם סטיות פנימה מהקצוות של הרכיב. הארגומנט האחרון הוא רדיוס הגבול של הצורה המלבנית. השדה הזה הוא אופציונלי, כך שאפשר להשאיר אותו ריק. היא תואמת לרישום המקוצר border-radius שבו אתם כבר משתמשים ב-CSS.

.element{
  shape-outside: inset(100px 100px 100px 100px);
  /* yields a rectangular shape which is 100px inset on all sides */
  float: left;
}

יצירת צורות מתיבת עזר

אם לא מציינים פונקציית צורה למאפיין shape-outside, אפשר לאפשר לדפדפן להסיק צורה מתיבת העזר של הרכיב. תיבת העזרה שמופיעה כברירת מחדל היא margin-box. עד עכשיו לא קרה שום דבר יוצא דופן, זה כבר האופן שבו פועלים ערכים צפים. אבל בעזרת השיטה הזו אפשר לעשות שימוש חוזר בגיאומטריה של רכיב. בואו נבחן את הנכס border-radius.

אם משתמשים בו כדי לעגל את הפינות של רכיב צף, מתקבל אפקט חיתוך, אבל אזור הציפה נשאר מלבני. מוסיפים את shape-outside: border-box כדי לעטוף את הקווים שנוצרו על ידי border-radius.

חילוץ צורה מרדיוס גבול של רכיב באמצעות תיבת ההפניה של תיבת הגבולות
.element{
  border-radius: 50%;
  shape-outside: border-box;
  float: left;
}

כמובן, אפשר להשתמש בכל תיבות העזרה בדרך הזו. זוהי שימוש נוסף בצורות נגזרות – ציטוטים מוטים.

יצירת ציטוט מושך של היסט באמצעות תיבת העזר של תיבת התוכן

אפשר ליצור את האפקט של ציטוט מוטעה באמצעות מאפייני float ו-margin בלבד. אבל כדי לעשות זאת, צריך למקם את רכיב הציטוט בעץ ה-HTML בנקודה שבה רוצים שהוא יופיע.

כך יוצרים את אותו אפקט של ציטוט שליפת היסט עם יותר גמישות:

.pull-quote{
  shape-outside: content-box;
  margin-top: 200px;
  float: left;
}

אנחנו מגדירים במפורש את תיבת העזר content-box עבור מערכת הקואורדינטות של הצורה. במקרה כזה, כמות התוכן בציטוטים מגדירה את הצורה שסביבה התוכן החיצוני יתעגל. המאפיין margin-top משמש כאן למיקום (קיזוז) של הציטוט המשיכה, בלי קשר למיקום שלו בעץ ה-HTML.

שוליים של צורה

תוכלו לראות שעיבוד התוכן סביב צורה יכול לגרום לכך שהוא ייגע באלמנט בצורה קרובה מדי. אפשר להוסיף ריווח מסביב לצורה באמצעות התכונה shape-margin.

.element{
  shape-outside: circle(40%);
  shape-margin: 1em;
  float: left;
}

האפקט דומה לאפקט שאתם רגילים לראות כשמשתמשים במאפיין margin הרגיל, אבל shape-margin משפיע רק על המרחב סביב הערך של shape-outside. המערכת תוסיף רווח סביב הצורה רק אם יש לה מקום במערכת הקואורדינטות. לכן בדוגמה שלמעלה, הרדיוס של המעגל מוגדר ל-40% ולא ל-50%. אם הרדיוס היה מוגדר ל-50%, המעגל היה תופס את כל המרחב במערכת הקואורדינטות ולא יישאר מקום לאפקט של shape-margin. חשוב לזכור שהצורה מוגבלת בסופו של דבר ל-margin-box של הרכיב (הרכיב ו-margin שמקיף אותו). אם הצורה גדולה יותר ומחרוזת, היא תוחתוך ל-margin-box ותקבלו צורה מלבנית.

חשוב להבין שאפשר להזין ב-shape-margin רק ערך חיובי אחד. אין לו סימון בכתב יד ארוך. מהו shape-margin-top של עיגול?

אנימציה של צורות

אפשר לשלב צורות CSS עם תכונות CSS רבות אחרות, כמו מעברים והנפשות. עם זאת, חשוב להדגיש שמשתמשים מתרגזים מאוד כשפריסת הטקסט משתנה בזמן הקריאה. אם תחליטו לטובת האנימציה של צורות, כדאי לשים לב לחוויה.

אפשר להוסיף אנימציה לרדיוסים ולמרכזים של הצורות circle() ו-ellipse(), כל עוד הם מוגדרים בערכים שהדפדפן יכול לבצע אינטרפולציה. אפשר לעבור מ-circle(30%) ל-circle(50%). עם זאת, אנימציה בין circle(closest-side) ל-circle(farthest-side) תגרום ללחץ על הדפדפן.

.element{
  shape-outside: circle(30%);
  transition: shape-outside 1s;
  float: left;
}

.element:hover{
  shape-outside: circle(50%);
}
GIF של מעגל מונפש

אפשר ליצור אפקטים מעניינים יותר כשמפעילים אנימציה של צורות polygon(). חשוב לזכור שלפוליגון צריך להיות אותו מספר קודקודים בשני מצבי האנימציה. הדפדפן לא יכול לבצע אינטרפולציה אם מוסיפים או מסירים קודקודים.

טיפ אחד הוא להוסיף את מספר הנקודות המקסימלי הנדרש ולמקם אותן בצבירה במצב האנימציה שבו רוצים פחות קצוות גלויים בצורך.

.element{
  /* four vertices (looks like rectangle) */
  shape-outside: polygon(0 0, 100% 0, 100% 100%, 0 100%);
  transition: shape-outside 1s;
}

.element:hover{
  /* four vertices, but second and third overlap (looks like triangle) */
  shape-outside: polygon(0 0, 100% 50%, 100% 50%, 0 100%);
}
קובץ GIF של משולש מונפש

הכנסת תוכן לתוך צורה

צילום מסך של ההדגמה של אליס בארץ הפלאות שמשתמשת בצורות CSS כדי לארוז תוכן

טיוטת המפרט הראשונית של צורות CSS כללה את המאפיין shape-inside, שמאפשר לעטוף תוכן בתוך צורה. במשך זמן מה היו הטמעות גם ב-Chrome וגם ב-WebKit. עם זאת, כדי לעטוף תוכן שממוקם באופן שרירותי בתוך נתיב מותאם אישית, נדרשים הרבה יותר מאמץ ומחקר כדי לכסות את כל התרחישים האפשריים ולהימנע מבאגים. לכן העברנו את הנכס shape-inside לצורות CSS ברמה 2 והסרתנו את ההטמעות שלו.

עם זאת, עם קצת מאמץ וקצת פשרה, עדיין אפשר להשיג את האפקט של גיבוב תוכן בתוך צורה מותאמת אישית. הטריק הוא להשתמש בשני רכיבים צפים עם shape-outside, שממוקמים בצדדים מנוגדים של קונטיינר. הפשרה היא שצריך להשתמש ברכיב אחד או שניים ריקים שאין להם משמעות סמנטית, אבל הם משמשים כעמודים כדי ליצור את האשליה של צורה בתוך התמונה.

<div>
  <div class='left-shape'></div>
  <div class='right-shape'></div>

  Lorem ipsum...
</div>

המיקום של רכיבי היציבות .left-shape ו-.right-shape בחלק העליון של הקונטיינר חשוב כי הם יצופו שמאלה וימינה כדי להוסיף את התוכן לאגף.

.left-shape{
  shape-outside: polygon(0 0, ...);
  float: left;
  width: 50%;
  height: 100%;
}

.right-shape{
  shape-outside: polygon(50% 0, ...);
  float: right;
  width: 50%;
  height: 100%;
}
איור של פתרון עקיף ל-shape-inside להדגמה של Alice

בזכות הסגנון הזה, שתי הרמות הצפות תופסות את כל השטח באלמנט, אבל המאפיינים של shape-outside מושכים את השטח לשאר התוכן.

אם הדפדפן לא תומך ב-CSS Shapes, כל התוכן יוסט למטה ויגרום לאפקטים מכוערים. לכן חשוב להשתמש בתכונה באופן משופר ומתקדם יותר.

בדוגמאות הקודמות של אנימציית הצורה, אתם שמים לב ששינוי המיקום של הטקסט עלול להיות מטריד. לא כל התרחישים לדוגמה מחייבים שימוש בצורה מונפשת. עם זאת, אפשר להוסיף אנימציה למאפיינים אחרים שמקיימים אינטראקציה עם צורות CSS כדי להוסיף אפקטים במקומות שבהם זה הגיוני.

בהדגמה של אליס בארץ הפלאות של צורות CSS, השתמשנו במיקום הגלילה כדי לשנות את השוליים העליונים של התוכן. הטקסט נדחס בין שני אלמנטים צפים. כשהיא נעה למטה, היא צריכה לבצע סידור מחדש בהתאם ל-shape-outside של שני הרכיבים הצפים. כך נוצרת התחושה שהטקסט נכנס לבור עכברים, והוא מוסיף לחוויית הסיפור. תוכן גבולי ללא צורך? אולי. אבל זה נראה מגניב.

מאחר שהדפדפן מבצע את הפריסה של הטקסט באופן מקורי, הביצועים טובים יותר מאשר בפתרון של JavaScript. עם זאת, שינוי של margin-top בזמן גלילה גורם להפעלה של הרבה אירועי פריסה מחדש וצבע, וזה עלול להוביל לירידה משמעותית בביצועים. חשוב להשתמש באפשרות הזו בזהירות. עם זאת, שימוש בצורות CSS מבלי להוסיף להן אנימציה לא מוביל להשפעה על הביצועים בפועל.

שיפור הדרגתי

מתחילים מהנחה שהדפדפן לא תומך ב-CSS Shapes, וממשיכים ממנה כשאתם מזהים את התכונה. הפתרון Modernizr הוא פתרון טוב לזיהוי תכונות, ויש בדיקה של צורות CSS בקטע זיהוי ללא ליבה.

בדפדפנים מסוימים יש זיהוי תכונות ב-CSS באמצעות הכלל @supports, בלי צורך בספריות חיצוניות. Google Chrome, שתומך גם בצורות CSS, מבין את הכלל @supports. כך משתמשים בו כדי לשפר בהדרגה:

.element{
  /* styles for all browsers */
}

@supports (shape-outside: circle(50%)){
  /* styles only for browsers which support CSS Shapes */
  .element{
    shape-outside: circle(50%);
  }
}

לאה ורו כתבה יותר על איך להשתמש בכלל @supports של CSS.

הסרת עמימות באמצעות החרגות CSS

מה שאנחנו מכירים היום בתור צורות CSS, נקרא בעבר 'חרגות וצורות CSS' בימים הראשונים של המפרט. השינוי בשם עשוי להיראות כניואנסים, אבל הוא חשוב מאוד. החרגות של שירותי CSS, שידועות עכשיו במפרט נפרד, מאפשרות גלישת תוכן סביב רכיבים שממוקמים באופן שרירותי, ללא צורך בנכס צף. נניח שרוצים לעטוף תוכן סביב רכיב שמוגדר למיקום מוחלט. זהו תרחיש לדוגמה לשימוש בהחרגות CSS. צורות CSS רק מגדירות את הנתיב שסביבו התוכן יקיף.

לכן, צורות והחרגות הן לא אותו הדבר, אבל הן משלימים זו את זו. צורות CSS זמינות בדפדפנים היום, אבל החרגות CSS עדיין לא מוטמעות עם אינטראקציה של צורות.

כלים לעבודה עם צורות CSS

אפשר ליצור נתיבים בכלים הקלאסיים ליצירת תמונות, אבל בזמן הכתיבה אף אחד מהם לא מייצא את התחביר הנדרש של ערכים של צורות CSS. גם אם כן, עבודה כזו לא תהיה מעשית במיוחד.

צורות CSS מיועדות לשימוש בדפדפן, כאשר הן מגיבות לרכיבים אחרים בדף. כדאי מאוד לראות את ההשפעה של עריכת הצורה על התוכן שמקיף אותה. יש כמה כלים שיעזרו לכם בתהליך העבודה הזה:

Brackets: התוסף CSS Shapes Editor ל-Brackets משתמש במצב התצוגה המקדימה בזמן אמת של עורך הקוד כדי להציג שכבת-על של עורך אינטראקטיבי לעריכת ערכי הצורות.

Google Chrome: התוסף CSS Forms Editor ל-Google Chrome מרחיב את הכלים למפתחים בדפדפן וכולל פקדים ליצירה ולעריכה של צורות. המערכת תציב עורך אינטראקטיבי מעל הרכיב שנבחר.

ב-Google Chrome יש תמיכה מובנית בהדגשת צורות. מעבירים את העכבר מעל רכיב עם מאפיין shape-outside והוא יידלק כדי להמחיש את הצורה.

צורות מתמונות: אם אתם מעדיפים ליצור תמונות ולאפשר לדפדפן לחלץ מהן צורות, Rebecca Hauck כתבה מדריך טוב ל-Photoshop.

Polyfill: Google Chrome הוא הדפדפן הראשי הראשון שמציע את CSS Shapes. בקרוב תהיה תמיכה בתכונה ב-iOS 8 וב-Safari 8 של Apple. יצרני דפדפנים אחרים עשויים להביא זאת בחשבון בעתיד. עד אז, ישנו polyfill של צורות CSS שמספק תמיכה בסיסית.

סיכום

באינטרנט שבו התוכן נמצא בעיקר בקופסאות פשוטות, צורות CSS מספקות דרך ליצור פריסה דרמטית, וסוגרות את הפער באיכות בין עיצוב לאינטרנט לעיצוב להדפסה. כמובן, אפשר להשתמש בצורות בצורה לא נכונה וליצור הסחות דעת. עם זאת, אם משתמשים בצורות עם טעם ועם שיקול דעת, הן יכולות לשפר את הצגת התוכן ולרכז את תשומת הלב של המשתמש בדרך ייחודית לו.

רציתי להשאיר לכם אוסף של עבודות של יוצרים אחרים, בעיקר מהדפסה, שממחישות שימושים מעניינים בפריסה לא ריבועית. אני מקווה שהתשובה תיתן לך השראה לנסות צורות של CSS ולהתנסות ברעיונות לעיצוב חדשים.

תודה רבה לפרל צ'ן, אלן סטרנס וזולטן הורוואט (Zoltan Harvath) שעיינו במאמר הזה וסיפקו תובנות חשובות.