חיפוש

קסטומיזציה של underlines בעזרת text-decoration

המודול CSS Text Decoration Module Level 3 נותן לנו כמה דרכים חדשות לעצב קווים תחתונים וקישוטי טקסט מעבר ל-underline / line-through הבסיסיים. תמיכת הדפדפנים עומדת היום על מעל 94% גלובלית, כך שאפשר להשתמש בתכונות האלו בפרודקשן בלי חשש.

תכונות כמו text-decoration-thickness ו-text-decoration-color נותנות שליטה על עובי הקו התחתון וצבעו בנפרד – דברים שבעבר דרשו מעקפים (workarounds). אם אתם עדיין מתחילים עם CSS, שווה לעבור קודם על המדריך המקיף ל-CSS למתחילים.

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

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

התכונה text-decoration

במקור, התכונה text-decoration קיבלה רק את הערכים none, underline, overline או line-through.

עם ה-Level 3 spec היא הפכה ל-shorthand שמשלב בין text-decoration-line, text-decoration-style ו-text-decoration-color בהצהרה אחת. הנה קו תחתון כפול בצבע ורוד לוהט:

קו תחתון מדליק

הנה שורת ה-CSS שבה השתמשנו:

text-decoration: #ff00d3 double underline;

בגרסאות ישנות של Safari ה-shorthand לא עבד כשהוא כלל text-decoration-style. הפתרון: להוסיף -webkit-text-decoration מיד אחרי התכונה הסטנדרטית, או לרשום כל תת-תכונה בשורה נפרדת.

כל תת-התכונות הזמינות היום:

4 דוגמאות לתכונות ה decoration וה underline

בואו נעבור על כל תכונה עם דוגמה חיה. כל הדפדפנים המודרניים תומכים בתכונות האלה (מעל 94% כיסוי גלובלי):

א. text-decoration-thickness

text-decoration-thickness קובעת את עובי הקו. אפשר להשתמש בכל ערך אורך – px, em, ואפילו from-font שנותן לפונט עצמו להחליט:

קו תחתון מדליק

ב. text-decoration-color

text-decoration-color מגדירה את צבע הקו התחתון בנפרד מצבע הטקסט. כל ערך צבע CSS תקני עובד כאן – hex, rgb(), hsl() או צבעים בשם:

קו תחתון מדליק

ג. text-underline-offset

text-underline-offset מזיזה את הקו התחתון למעלה או למטה ביחס למיקום ברירת המחדל. ערכים חיוביים מרחיקים את הקו מהטקסט, שליליים מקרבים:

קו תחתון מדליק

ד. text-decoration-skip-ink

שימו לב שבדוגמאות הקודמות הקו התחתון נשבר סביב החלקים של גליפים שיורדים מתחת לקו הבסיס (descenders) – כמו בזנבות של האותיות g, p, q, y, j באנגלית, או הצ׳ופצ׳יקים של אותיות כמו ׳ק׳ ו-׳ן׳ בעברית.

השבירה הזו היא התנהגות ברירת המחדל. הדפדפן מגדיר את text-decoration-skip-ink ל-auto, מה שגורם לו לדלג על הדיו במקומות שבהם הקו מתנגש עם גליף. הגדרת הערך ל-none מציירת את הקו ישר דרך כל אות:

קו תחתון מדליק

בטיפוגרפיה, החלק של אות שיורד מתחת לקו הבסיס נקרא Descender (באנגלית: g, p, q, y, j). החלק שעולה מעל גובה ה-x נקרא Ascender (באנגלית: b, d, h, k, l).

הנה סרטון של Jen Simmons (כיום ב-Apple, לשעבר ב-Mozilla) שמכסה את התכונות בפירוט:

שאלות נפוצות

איך משנים את צבע הקו התחתון ב-CSS בלי לשנות את צבע הטקסט?
משתמשים ב-text-decoration-color. למשל, text-decoration-color: #ff00d3; מגדירה קו תחתון ורוד בזמן שהטקסט נשאר בצבע שהגדרתם ב-color. לפני שהתכונה הזו הגיעה, האפשרות היחידה הייתה לזייף קו תחתון עם border-bottom.
מה ההבדל בין text-decoration-thickness לבין border-bottom לקווים תחתונים?
text-decoration-thickness שולטת על הקו התחתון האמיתי שהדפדפן מרנדר. הוא נשבר יפה בטקסט מרובה שורות ומכבד את text-decoration-skip-ink. לעומת זאת, border-bottom הוא גבול של box-model שיושב מתחת ל-padding של האלמנט - הוא לא עוקב אחרי שורות טקסט בודדות ולא יכול לדלג על descenders.
מה עושה text-decoration-skip-ink?
text-decoration-skip-ink קובעת אם הקו התחתון נשבר סביב descenders ו-ascenders של גליפים. ערך ברירת המחדל הוא auto, שגורם לדפדפן לדלג על הדיו במקומות שהקו מתנגש עם אותיות כמו g, p או y. הגדרה ל-none מציירת את הקו ישר דרך כל אות. הערך all כופה דילוג גם בכתבים (כמו CJK) שבהם auto לא בהכרח ידלג.
אפשר לעשות אנימציה לתכונות text-decoration עם CSS transitions?
כן. text-decoration-color, text-decoration-thickness ו-text-underline-offset כולן ניתנות לאנימציה. אפשר להוסיף transition: text-decoration-color 0.3s, text-underline-offset 0.3s; ולשנות את הערכים ב-:hover לאפקטים חלקים.
האם ה-shorthand של text-decoration כולל את כל תת-התכונות?
לא. ה-text-decoration shorthand מגדיר רק את text-decoration-line, text-decoration-style ו-text-decoration-color. תכונות כמו text-decoration-thickness, text-underline-offset ו-text-decoration-skip-ink צריכות להיות מוגדרות בנפרד.
מהו הערך from-font ב-text-decoration-thickness?
הערך from-font אומר לדפדפן להשתמש בערך העובי שמוגדר בקובץ הפונט עצמו, אם קיים. אם הפונט לא כולל את המטריקה הזו, הדפדפן חוזר ל-auto. זה שימושי כשרוצים שהקו התחתון יתאים לעובי שמעצב הפונט התכוון אליו.

סיכום

תכונות ה-CSS Text Decoration Level 3 נותנות שליטה אמיתית על עיצוב קווים תחתונים – עובי, צבע, היסט והתנהגות דילוג דיו – בלי הפתרונות הישנים של border-bottom. שילוב של text-underline-offset עדין עם text-decoration-color בהיר נותן ללינקים מראה מלוטש בלי markup נוסף.

לטכניקת עיצוב טקסט נוספת ששווה להכיר, ראו את הפוסט שלי על אפקטים עם text-shadow ב-CSS.

דיון ותגובות
1 תגובות  ]
  • ברק 19 ינואר 2022, 15:05

    נראה מגניב ממש! איישם באתר שלי

השאירו תגובה

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

Savvy WordPress Development official logo