שימוש בפונטים בלתי רגילים, הפעם: cufon
כתבתי באתר הזה, הרבה מאוד מאמרים על טכניקה של שימוש בפונטים בלתי רגילים – פונטים שלא מותקנים לכולם על המחשב ולכן אי אפשר להשתמש בהם בטקסט פשוט לאתר. בעוד אנחנו קרובים מאוד להשקת CSS3, בו יהיה אפשר להשתמש בכל פונט איזוטרי שתעלו על דעתכם, אני רוצה להסביר לכם על טכניקה מאוד פשוטה, שמה cufon, להצגת פונטים בלתי רגילים כתמונות. למה דווקא עכשיו? כי, CSS3 לא נתמך ולא יתמך ברוב הדפדנים שקיימים היום בעולם (יקח זמן עד שהוא יתפוס את השוק) ובנתיים צריכים למצוא פתרון להצגת פונטים.
האמת שהמאמר הזה היה צריך להיות על טכניקה אחרת, FLIR, גם טכניקה שמחליפה כותרות בתמונות, כמו בדוגמא הזאת:
איזה כיף לכתוב בכל פונט שמתחשק לי.
הסיבה שבחרתי להציג לכם דווקא את cufon ולא את FLIR היא מכיוון ו-cufon לא תלויה בשפת שרת (PHP במקרה של FLIR), והמימוש שלה ממש ממש פשוט. (לא התנסיתי בFLIR אבל אתם מוזמנים לספר לי בתגובות).
עכשיו לפני שניגש לעניין ואני אתחיל להסביר לכם איך מממשים את cufon, אני אציג לכם את היתרונות והחסרונות של טכניקה זו:
יתרונות
- מימוש פשוט מאוד (הרבה יותר פשוט מ-sIFR למשל)
- טכניקה שלא תלויה בצד שרת (בניגוד לFLIR) או בפלאש (בניגוד ל-sIFR)
- פועלת במהירות
חסרונות
- תלויה ב-javascript
- אי אפשר לסמן טקסט (חסרון משמעותי לפעמים)
- אין אפשרות להציג צבע שונה כאשר העכבר נמצא על הטקטס
אני רוצה להוסיף על החסרון הראשון שאם הדפדפן לא מפעיל JS אז לא יוצג הפונט המיוחד, ויוצג הטקסט הרגיל שזה לא כל-כך נורא.
טוב עכשיו אחרי שעברנו על כל היתרונות והחסרונות של cufon, נעבור לאופן המימוש.
הורדת הקבצים
כמו תמיד נתחיל בהורדת הקבצים, ניכנס לאתר cufon ונוריד את קובץ ה-JS שנמצא תחת הכפתור "download" (או ישירות מהלינק הזה)
כעת אנחנו צריכים להמיר את הפונט אותו אנו רוצים להציג בקובץ JS נוסף, את הפעולה הזאת עושים דרך אתר cufon. ההסבר המלא בסרטון הבא:
כעת שסיימנו ויצרנו את קובץ ה-JS לפונט שלנו, כל מה שנותר לנו הוא להגדיר בקובץ הHTML הרצוי להשתמש בפונט המיוחד.
אתחול הגדרות לקובץ
דבר ראשון שנעשה הוא להכניס בין תגיות ה-HEAD קישור לקבצי ה-JS שהורדנו:
1 2 | <script type="text/javascript" src="js/cufon-yui.js"></script> <script type="text/javascript" src="js/example-Font_500.font.js"></script> |
הקובץ השני צריך להיות לפי השם של הפונט שאתם בחרתם.
כעת נוסיף קוד JS נוסף על מנת להפעיל את cufon:
1 2 3 4 5 | <script type="text/javascript"> $(function(){ Cufon.replace('h3'); }); </script> |
במקום h3 רשמו את שם האלמנט בו אתם רוצים להחיל את הפונט המיוחד.
ככה צריך להיראות בסופו של דבר הHTML שלכם:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <html> <head> ... <script type="text/javascript" src="js/cufon-yui.js"></script> <script type="text/javascript" src="js/BN_Traktor_400.font.js"></script> <script type="text/javascript"> $(function(){ Cufon.replace('h3'); }); </script> ... </head> <body> ... <h3>אני פסקה עם פונט מיוחד</h3> ... </body> </html> |
כל זה טוב ויפה אבל אם תנסו את זה בעצמכם תראו שיש בעיה חמורה, אם כי לא מפתיעה- כל הטקסט בעברית מהופך :/
אל דאגה תרתי ברשת אחר פתרון ובבלוג של האתר ספסל מצאתי פתרון לבעיית העברית (תודות לשירה).
עברית שפה קשה
הפתרון הוא דיי פשוט, מריצים סקריפט (cufonRTL.js) שעובר על המחרוזת בתוך האובייקט הנבחר (בדוגמא שלנו H3), הסקריפט מוסיף למחרוזת תגית<bdo> והופכת את כיוון (Direction) הטקסט למשמאל-לימין. אח"כ הסקריפט מפריד בין כל התווים במחרוזת הופך את הסדר שלהם ומחבר בחזרה, אתם מוזמנים לצפות בקוד ולהבין.
הסקריפט הזה נתמך ע"י jQuery ולכן צריך גם להוסיף את הספרייה הזו לHTML שלנו. היתרון בהוספת jQuery היא שכעת במקום שכתבנו H3 אנחנו יכולים לכתוב כל אלמנט לפי הסינטקס של jQuery. (לדוגמא: H3.niceFont יבחר את כל אלמנטי ה-H3 בעלי class ששמו 'niceFont').
וכמובן אנחנו צריכים להוסיף קוד שיפעיל את הסקריפט שלנו, בואו נראה איך יראה הHTML שלנו אחרי השינויים להצגת עברית:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <html> <head> ... <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script> <script type="text/javascript" src="js/cufon-yui.js"></script> <script type="text/javascript" src="js/CufonRTL.js"></script> <script type="text/javascript" src="js/BN_Traktor_400.font.js"></script> <script type="text/javascript"> $(function(){ Cufon.replace('h3'); CufonRTL.RTL('h3'); }); </script> ... </head> <body> ... <h3>אני פסקה עם פונט מיוחד שעובד גם בעברית.</h3> ... </body> </html> |
שתי התוספות הראשונה הן קישור לקבצי ה-JS של jQuery והיפוך העברית (שורות 4 ו-6 בהתאמה). התוספת השלישית היא הפעלה של סקריפט ההיפוך (שורה 11) שימו לב שהיא מקבלת כפרמטר את אותה מחרוזת (בדוגמא שלנו H3) ש-cufon מקבל.
זהו זה, זה עובד!
מה חשוב לזכור?
למרות שפתרנו את בעיית העברית, הסקריפט לא יעבוד טוב עם מחרוזת מרובות שורות ולכן אני ממליץ להשתמש בסקריפט רק לכותרות. בנוסף שימוש בסקריפט על טקסטים גדולים יגרום לטעינת הדף להיות איטית יותר, אז תשתמשו בפונטים מיוחדים בכותרות והסקריפט יעבוד כמו שצריך.
דרך אגב, אם שמתם לב או לא כל הכותרות המשניות במאמר הזה הוחלפו באמצעות cufon.









סיכום מפגש מפתחים מס’ 3 – W3C ישראל
מפגש #3 בסדרת מפגשי פורום המפתחים של ה-W3C בישראל – עיצוב אתרים מבוסס CSS
בגוגל כרום העברית עדיין מופיעה במהופך…
[תגובה]
אורן רוט
14 בפברואר
האמת שלא ממש נכון..
את מוזמנת לבקר באתר שלי בכרום:
http://decor-d.com/pages/%D7%90%D7%A4%D7%99%D7%95%D7%9F-%D7%90%D7%AA%D7%A8
הכותרת שם נבנתה עם cufon, העברית לא הפוכה.
[תגובה]
אורן רוט
14 בפברואר
הייתה בעיה בדוגמה שהייתה כאן באתר,
אבל תיקנתי
[תגובה]
מצויין,
חשוב לציין יתרון באופטמיזציה במנוע החיפוש שלא מאפשרים Javascript ככה ש-cufon יראה כ-Header רגיל.
[תגובה]
אורן רוט
17 בפברואר
חשוב מאוד לציין, תודה ניסן.
[תגובה]
הי אורן, ראשית יישר כח על ההשקעה במאמר ובהפיכת הכלי הזה לשמיש גם בעברית. בעיה קטנה שנתקלתי בה נוגעת להצגת העמוד בדפדפני IE: בהצגת עמודי RTL יש גלילה אופקית משמעותית שנובעת מהגדרות הרכיב (גם כאן). כדי לתקן את הנושא, צריך לשנות את הגדרות ה-position בקובץ cufon-yui.js וליתר פירוט, היכן שמופיע left:-10000in צ"ל right:-10000in. אפשר לראות את השימוש באתר שלנו (מבוסס ג'ומלה) ב-gisight.co.il בעמודים הפנימיים (כותרות המודולים)
[תגובה]
אבישי תודה על ההערה.
אני לא נתקלתי בבעיה בIE – גם באתר שלי (http://decor-d.com) אני משתמש בcufon ולא ציפיתי בבעיה בIE. אולי תציין איזה גרסה של IE צפית בבעיה.
כמו כן אני פיתחתי פתרון לסימון טקסט עם cufon. אחד הבעיות השכיחות בשימוש בפונטים מיוחדים (אי-אפשר לסמן טקסט) צפה לפוסט בנושא בקרוב.
[תגובה]
אבישי
5 באפריל
לגבי סימון הטקסטים, מצוין (אני עובד על הסתרת הפונט המקורי לפני שהפונט החדש נכנס לפעולה). בכל מקרה, זה קורה ב-IE8 במצב תאימות לכן אני מעריך שבדפדפנים מוקדמים יותר זה גם קורה.
[תגובה]
אורן רוט
5 באפריל
לגביי הסתרת הפונט – למה שלא תן לו שקיפות של 100 אחוז בCSS?
[תגובה]
ניסן
15 באפריל
absolute:right עדיין עושה לי בעיות, בכל אופן אבישי הגיע עם הפתרון הכי יעיל.
cufon cufontext{position:absolute;font-size:1px;color:#ffffff;}
להתעסק עם שקיפות זה עניין של בעיות compliant עבור כל הדפדפנים.
שלום,
רציתי לדעת אם מישהו מצא דרך לגרום ל cufon להשתמש בשתי פונטים בשפות שונות (לדוג' עברית אנגלית) באותו Header (H1 H2 H3 ) אני צריך את זה לוורדפרס שיש לי כדי לגרום לקופון לעבוד גם על כותרות בעברית וגם באנגלית
[תגובה]
אורן רוט
27 ביולי
תסתכל מה עשיתי באתר meirlaw.co.il
הסקריפט שאתה ביקשת הוא דיי מסובך – מה שעשיתי באתר הזה זה במקרה שיש עברית הוא הופך את האותיות, במקרה שיש אנגלית הוא לא הופך ואם יש גם עברית וגם אנגלית הוא פשוט לא מפעיל את הcufon.
זה לא פתרון מלא אבל זה משהו…
[תגובה]
מה לגבי זכויות היוצרים של הפונט? האם קובץ הפונט עצמו לא יורד לקאש בעת הצפייה בדף?
אם כן – אז אנחנו בבעיה, אף חברת עיצוב פונטים בעברית לא מסכימה לכך והם דורשים הון עתק לרכישת הזכויות על הפונט באופן חופשי באתר שלך – כלומר כל מי שיראה את הדף למעשה יקבל חינם פונט שעולה כסף…פתרון?
[תגובה]
אורן רוט
8 באוגוסט
אתה צודק בהחלט. cufon הוא פתרון שאינו עונה על דרישות זכוריות היוצרים של יוצרי הפונטים.
הפונט מומר אומנם ל.JS אבל המידע הפונטי יורד למשתמש ואכן פוגע בזכויות היוצרים של הפונטים.
ישנם שני פתרונות אפשריים:
1. שימוש בפונטים חופשיים או חינמיים
2. שימוש בטכניקת הצעת פונטים אחרת (sIFR,FLIR,CSS3)
הרצאתי בנושא הזה ואתה מוזמן לשמוע עוד בהרצאה המצולמת בכתובת:
http://www.htm.co.il/2010/04/29/מצגות-וקטעי-וידאו-ממפגש-המפתחים-השליש/
[תגובה]
מישהו הצליח להכניס את הסקריפט לוורדפרס?
אני ממש מסתבך עם זה משום מה…
עשיתי כל מה שכתוב כאן,
אני מעברת תבנית(במקור LTR) , ולכן אני לא צריך את הקטע בסקריפט של "ספסל" שמדבר על סימון הטאגים ב BDO(לא עובד הסימון במילא).
Cufon.replace('h1, h2, h3', { fontFamily: 'ChunkFive' });
עובד ומחליף לי את הפונט לפונט העברי הרצוי.
אולם כשאני מנסה לכתוב בסקריפט RTL,
$('h1, h2, h3').each(function() {
var word = $(this).text();
var splittext = word.split("");
var reversedtext = splittext.reverse();
var newtext = reversedtext.join("");
$(this).text(newtext);
});
זה לא מגיב/ או מחליף .
ואכן מקפיץ לי טעות של S function.
אשמח לקצת עזרה…
[תגובה]
אתה יכול לתת לינק ואז נראה מה הבעיה…
אתה מבין בjQuery? כי יכול להיות מאוד שהבעיה מגיעה מהכיוון הזה.
[תגובה]
כמה חבל שאתר ספסל כבר לא און ליין.
אני משתמש וורדפרס, עם קופון.
אני ממש אשמח להשתמש ב cufonRTL.js.
הם יש אפשרות להוריד את הסקריפט ממקום אחר או שתציאו אותו להורדה כאן?
תודה.
[תגובה]
אלון רוט
31 באוגוסט
תוכל למצוא את הסקריפט בקובץ הRAR שניתן להורדה בתחילת המאמר (כפתור ה< קוד>).
[תגובה]
omer
1 בספטמבר
תודה
דרך אגב, יש בעיה להצטרף לקהילת הפייסבוק שלך.
תבדוק את זה. הוא לא מאשר הצטרפות.
[תגובה]
לינק שבור לאתר של ספסל ("תודות לשירה").
[תגובה]
אלון רוט
6 בספטמבר
אתה יכול למצוא את הקובץ cufonRTL.js פה:
http://www.htm.co.il/lab/cufon/cufon.rar
[תגובה]
הי אורן
האם תוכל לעזור לי להבין איך אני משתמש בפלאג WP-Cufon עם פונט בעברית?
[תגובה]
אורן רוט
9 בפברואר
האמת שבחיים לא השתמשתי בו, אז אלא אם כן יש לך שאלה קונקרטית אני לא אהיה יותר מוצלח ממך.
[תגובה]
באנגלית זה פועל מעולה אבל בעברית, במידה שמשתמשים במשפט בעל יותר ממילה אחת, הטקסט יוצא האחד על השני.
תוכל להסביר ביתר פירוט איך גורמים לכל הסיפור הזה לפעול טוב גם בעברית בוורדפרס?
המון תודה!!
[תגובה]
אורן רוט
9 בפברואר
אין שום סיבה שהטקסט יצא אחד על השני, אתה יכול לראות אפילו בעמוד הזה למעלה שזה לא קורה.
כנראה שהבעיה שלך מיוחדת, תן לינק ונראה מה קרה שם.
לגביי וורדפקס וקופון, לא התנסיתי בכך אבל הבחור מהתגובה מעלייך כתב על זה משהו, אולי תנסה לדבר איתו…
[תגובה]
אחלה מאמר.
חיפשתי בכל הטקסטים בוויקי של cufon ולא מצאתי תשובה לשאלה אחת -
אני חייב להעלות קוד של פונט? אין לו דיפולט של פונטי מערכת?
אם אני צריך אותו רק כדי להחיל אפקט מסויים באקספלורר על פונט אריאל רגיל, אני חייב להמיר את אריאל לקוד?
[תגובה]
אורן רוט
9 בפברואר
התשובה היא כן! חייבים לעלות פונט אין פונטי מערכת.
אין טעם לעלות פונט אריאל מכיוון והוא קיים כדיפולט בכל המחשבים.
[תגובה]
שלום,
הייתי רוצה לדעת איך הופכים כותרת שמשתמשים בה בCUFON ללינק שעובד:
הזמנה
תודה מראש
דורון שקד
[תגובה]
אורן רוט
9 בפברואר
מצטער אבל לא הבנתי את השאלה. לינק שעובד? מה הכוונה?
[תגובה]
כתבת בחסרונות "אין אפשרות להציג צבע שונה כאשר העכבר נמצא על הטקטס"
כל מה שצריך זה לשנות את הקוד:
Cufon.replace('h1', {hover: true });
וכמובן להוסיף את הcss המתאים.
ניסיתי cufon בכמה הזדמנויות והקוד עובד לי בוורדפרס, אבל ההפיכה של הכיוון לא עובדת. מישהו ניסה ויודע איך לפתור את זה?
[תגובה]
אורן רוט
9 בפברואר
אתה צודק ב100%, גיליתי את זה מאוחר יותר.
לגביי הוורדפרס כמו שכבר הזכרתי אינני התנסיתי בכך ולכן לא אוכל לתרום מנסיוני.
אם מישהו יודע או גילה עד כה משהו הוא מוזמן לשתף כאן.
[תגובה]
היי
הצלחתי עם הקוד תודה.
כשיש מספרים בטקסט הם גם הופכים כיוון.
יש לך פטרון אולי להכניס קוד יש יהפוך אותם שיראו בסדר.
ועוד שאלה. כשיש אותיות או מילים באנגלית באמצה הם גם הפוכים.
כמו שאמרת עברית היא שפה קשה.
בברכה
כל עזרה יהיה טוב
[תגובה]
אורן רוט
9 בפברואר
אתה יותר מצודק –
האמת היא שפיתחתי סקריפט שמשפר קצת את הבעיתיות של מספרים ושפה שנייה. מה שעשיתי זה שעשיתי בדיקה אם יש מספרים או אנגלית בטקסט או פשוט לא מפעיל cufon, אני בטוח שיש פתרון יותר טוב אבל זה מה שמצאתי זמן להשקיע בו..
אם תרצה אחפש את הקוד ואשלח לך.
[תגובה]
adva
24 בפברואר
הי,
ישמתי את כל הקוד שציינת באתר סטטי והוא עבד מעולה,
בוורד פאס, אני לא מצליחה, הכנסתי את הסקריפט של ההיפוך של הstring בדיוק אחרי ההפיכה לקופון, הקופון עובד אבל לא ההיפוך. יש למישהו תובנות לגבי זה?
תודה רבה רבה.
אדוה.
[תגובה]
אורן רוט
26 בפברואר
אולי תשלחי כאן לינק שנוכל להביט בקוד…?
הי אורן,
האם יש לך פתרון למצב בו יש בstring אחד עברית ואנגלית ביחד?
תודה רבה
אדוה.
[תגובה]
אורן רוט
28 בפברואר
האמת היא שלא. הפתרון שבו אני השתמשתי הוא לבדוק ובמידה ויש גם אנגלית וגם עברית הוא פשוט לא משתמש בCUFON.
אני יותר מאשמח לראות מישהו מממש פתרון שיפתור את העניין של עברית ואנגלית יחד.
הבעיתיות פה היא גדולה.
[תגובה]
השיטה באתר לא עובדת עם jQuery מעבר ל 1.4 אצלי.
הנה הקוד שלי – יש להחליף את התגיות בתגיות שלכם. אצלי התפריט נמצא בתוך UL
HTML
גליונות עד הבית
מדריך לימודים
פוש פרסום
מכללת ארטפוש
Javascript
var myArr = $("#menu ul li a"),
n = myArr.length;
for (i=0 ; i<n ; i++) {
var contents = $("#menu ul li a").eq(i).html();
var newStr = contents.split('').reverse().join('');
myArr.eq(i).html(newStr);
replacetext();
function replacetext() {
Cufon.replace('#menu ul li');
}
שימו לב יש לשים את הקוד למטה ולא בכותרת – אחרת יכול לא לעבוד.
בהצלחה
[תגובה]
היי,
ניסיתי את השיטה המתוארת כאן, אך מקבל הודעת שגיאה של jquery
Uncaught TypeError: Cannot call method 'each' of null
בשורה 8 של cufonRTL.js
מישהו אולי יכול להעיף מבט ולראות למה זה קורה ?
http://www.iupgrade.co.il
זה טמפלייט של ג'ומלה.
[תגובה]
אורן רוט
21 בדצמבר
ממבט קצר לדעתי מדובר בבעיה בשליחת הנתונים לקובץ cufonRTL.תנסה להוריד את הדוגמא מהאתר ולראות מה אתה עושה שונה.
בכל מקרה הייתי ממליץ לך לוותר על Cufon ולממש את הצגת הפונטים באמצעות @font-face ב-CSS.
[תגובה]
תודה, השתמשתי בקבצים מהאתר מלכתחילה.
נחמד לגבי ה font-face@
אבל איך מגנים על פונטים מפני הורדות מתוך ה CSS ?
תודה
[תגובה]
אורן רוט
21 בדצמבר
שאלה טובה. בגדול קשה מאוד להגן.
האמת שהנושא הזה היה ממש בדיונים בW3C בפעם האחרונה שבדקתי.
דיברתי על זה בהרצאה שנתתי (זה לא ממש מעודכן אבל זה שם יש הרחבה עלה עניין ההגנה):
http://www.htm.co.il/2010/04/29/מצגות-וקטעי-וידאו-ממפגש-המפתחים-השליש/
[תגובה]
מישהו נותן פה פתרון דרך הפנייה מוסתרת בעזרת PHP אבל זה לא מספק פתרון מלא אם מכירים את הקוד ניתן להבין כיצד לעקוף אותו
http://subjectiveobject.com/2009/10/28/securing-font-face/
גם לגבי ההערה של ברק מ ה 8 אוגוסט, קופון נותן אופציה להתנות את השימוש פר דומיין, האם זה לא מגן משימוש באתרים אחרים ?
חזרה לדוגמא מהאתר, אני עושה בדיוק כמו בדוגמא, באתר הזה
http://www.iupgrade.co.il/
בכל זאת מקבל את השגיאה:
Uncaught TypeError: Cannot call method 'each' of null
מתחיל להתייאש…יש למישהו רעיון ?
[תגובה]
אורן רוט
22 בדצמבר
הבעיתיות היא שתמיד אפשר להוריד את הפונט מהאתר שלך ולשכפל אותו (בגלל זה גם אם קופון לא מאפשרים טעינה של הפונט מאתר אחר, פלוני יכול פשוט לגשת לאתר שלך להוריד את הפונט ולעלות מחדש לאתר שלו).
לגביי הבעיה באתר שלך הצעתי לך להוריד את קבצי הדוגמא לראות שהם פועלים לך על המחשב ולהתחיל לראות מה עשית שונה (יכול להיות הרבה מאוד אפשרויות, גרסא JQUERY לא נכונה, סינטסט מוטעה וכ"ו). בקיצור תדבג את עצמך…
[תגובה]
הבעיה הייתה שהיו עוד פונקציות של jquery
שרצו והייתה התנגשות איתם.
אם זה עוזר למישהו, הפתרון הוא בלהוסיף לפונקציה את ההקדמה של var $i = jQuery.noConflict(); למניעת
התנגשויות. זה good practice בכל מקרה לשים את השורה הזאת.
var CufonRTLClass=(function(){
this.RTL = RTL;
function RTL(tagName) {
// alert(tagName);
var $i = jQuery.noConflict();
$i(tagName)/*.css('font-size', '19px')*/.wrapInner(");
$i('bdo.cufon').each(function() {
var word = $i(this).text();
var splittext = word.split("");
var reversedtext = splittext.reverse();
var newtext = reversedtext.join("");
$i(this).text(newtext);
});
}
});
CufonRTL = new CufonRTLClass;
תודה על הקוד
[תגובה]
אורן רוט
25 בדצמבר
כן אם יש לך יותר מסיפריה אחת זה הפתרון אי-אפשר להשתמש ישר ב$ צריך לכתוב נו-קונפליקטס ולהשתמש בתחילית שונה.
אני שמח שהסתדרת
[תגובה]