אז יכול להיות ששמעתם את השם פעם או פעמיים, אבל לא הבנתם מה זה אומר ואיך זה קשור לעיצוב css.
sprite זו טכניקה לייעול טעינת תמונות רקע ללחצנים וכפתורים.
לפני שנכיר את הטכניקה אנחנו צריכים להכיר את המאפיין background ב css.
CSS - Background
השימוש ב background לא תמיד נובע מהצורך להציג תמונה, לוגו או כותרת לאתר - הרבה פעמים נשתמש במאפייני רקע כדי להתגבר על המגבלות העיצוביות שמציב בפנינו הhtml ולהציג לחצנים ותפריטים יפים יותר.
נוכל כמובן להשתמש בתמונות כדי ליצור קישורים (נעטוף תגיות img עם תגיות a), אבל לינקים לא תמיד יספקו פיתרון לבעיות עיצוביות - ומציבים בפנינו בעיות נוספות.
השימוש במאפייני הרקע פשוט מאוד - הנה כל המאפיינים הקשורים לcss:
- background-color - קביעת צבע רקע
- background-image - קביעת תמונת רקע
- background-repeat - שכפול תמונת הרקע למילוי האלמנט
- background-attachment - התנהגות תמונת רקע
- background-position - מיקום הרקע ביחד לאלמנט
כמה מילים על כל אחד מהמאפיינים -
background-color - מגדיר כמובן את צבע הרקע של האלמנט. נוכל להגדיר צבע רקע ותמונת רקע ביחד - צבע הרקע יופיע במידה ותמונת הרקע אינה זמינה וישלים את האזורים שתמונת הרקע אינה מכסה.
background-color - מגדיר כמובן את צבע הרקע של האלמנט. נוכל להגדיר צבע רקע ותמונת רקע ביחד - צבע הרקע יופיע במידה ותמונת הרקע אינה זמינה וישלים את האזורים שתמונת הרקע אינה מכסה.
background-image מגדיר את תמונת הרקע של האלמנט, מאפיין זה מקבל כתובת לתמונה (כתובת מקומית או באינטרנט)
background-repeat קובע האם יש לשכפל את התמונה במידה וגודלה קטן מגודל האלמנט אותו היא מכסה וכיצד יש לשכפל - האם לאורכו של הציר האופקי או הציר האנכי, הנה דוגמאות לכל אחד מהמקרים:
div { width: 200px; height: 200px; border: solid 1px black; margin: 20px auto; background-image: url('bg_rep.jpg'); } #repX { background-repeat: repeat-x; } #repY { background-repeat: repeat-y; } #no-repeat { background-repeat:no-repeat; }

background-attachment קובע כיצד יש להציג את תמונת הרקע - ניתן להגדיר את מיקומה של תמונת הרקע במיקום קבוע ביחס לחלון הדפדפן כך כשנגלול את החלון האלמנט המכיל את התמונה ישמש כמעין חלון לתמונה (הדרך הכי טובה להבין היא לנסות ולהשתמש במאפיין זה)
background-position קובע היכן תהיה ממוקמת התמונה ביחס לפינה השמאלית העליונה של האלמנט (מרחק x ומרחק y ביחס לאותה נקודה). - מאפיין זה הוא המפתח להבנת נושא ה sprites בהמשך ננצל את התכונה הזו כדי לייעל את העבודה עם רקעים.
כדי לעבוד עם תמונת רקע, נציין קואורדינטות - כלומר מרחק אופקי ואנכי מהנקודה השמאלית העליונה של האלמנט בעל תמונת הרקע (x ו y), למשל (עם שינוי בקוד הקודם):
#no-repeat { background-repeat:no-repeat; background-position: 40px 100px; }
יביא לתוצאה הבאה (המידות להמחשה):
ניתן לשלב את כל מאפייני הרקע על ידי שימוש בתכונה background, בצורה הזו:
div { background: #D8DEED url('bg_rep.jpg') no-repeat fixed 10px 20px; }
Sprite
עכשיו כשאנחנו יודעים איך לשחק עם הרקע, נוכל להשתמש בטכניקה די פשוטה לשילוב כמה תמונות בתמונה אחת - נניח שאני רוצה לתת תמונת רקע ללינקים באתר, תמונת רקע אחת רגילה, ותמונת רקע אחרת בעת מעבר עכבר:
input[type="button"] { background: transparent url('glossy_blue_button.png') no-repeat; width: 250px; height: 250px; } input[type="button"]:hover { background-image: url('glossy_red_button.png'); }

למדנו כבר לבנות משהו כזה - באמצעות הסלקטור המתאים ובאמצעות background-image - אבל לא למדנו מה הבעיה בשימוש בשיטה הזו.
ובכן, אם אנחנו באמת משתמשים בשתי תמונות (כפתור כחול וכפתור אדום) הדפדפן או הלקוח יוצר שתי בקשות http נפרדות. את הלחצן הכחול המשתמש יוריד לאחר טעינת הדף ואת הלחצן האדום המשתמש יוריד בעת מעבר עכבר מעל הלחצן.
ככל הנראה, בקשות http מאטות את טעינת התמונות - מה קורה כשיש לנו המון תמונות קטנות - בעת מעבר עכבר, בעת לחיצה ולעשרות קישורים ולחצנים שונים באותו הדף?
אם נשתמש בשיטה הקונבנציונאלית לשימוש בתמונות רקע, נשלם ברוחב פס ובזמן טעינה.
דרך אחרת לנצל את התכונה background-position תהיה לחבר את כל התמונות הקטנות, לתמונה אחת גדולה ולשנות את מיקום תמונת הרקע עבור כל אלמנט, הנה כמה דוגמאות:


כן כן, אלה דוגמאות אמיתיות (של Apple, Amazon ו Youtube).
את השימוש ב Sprite עושים בשני שלבים:
- משנים את הגודל של הלחצנים או האלמנטים עם תמונות הרקע
- משחקים עם background-position כך שיוצג החלק המתאים בתמונת הרקע
נחזור לדוגמה עם שני הלחצנים - אדום וכחול - עכשיו, במקום להשתמש בשתי תמונות נשתמש בתמונה אחת (הרקע הוא שקוף ולא כהה כמו בתמונה למטה):

עכשיו נוכל להגדיר את ה css מחדש, וכל פעם לציין את הקואורדינטות המתאימות:
input[type="button"] { background: transparent url('all.png') no-repeat 0 0; width: 250px; height: 250px; } input[type="button"]:hover { background-position: 0 -260px; }
הקוד למעלה יביא לנו את אותה התוצאה שקיבלנו בדוגמה הראשונה ויבצע אותה בצורה הרבה יותר יעילה ומהירה.
על ידי שימוש בטכניקת ה Sprites אנחנו יכולים לחסוך אלפי קריאות http שהיו נשלחות לשרת אלמלא היינו מורידים את כל תמונות הרקע ביחד.
הנה הדוגמה במאמר זה:
http://dl.dropbox.com/u/16278595/webmaster_files/css/sprite_hover.html
ישנם כלים רבים ליצירת sprite מאחר ולא כל כך נוח לחבר עשרות תמונות קטנות יחדיו ולמצוא את הקואורדינטות לכל אחד מתתי התמונות, הנה כמה דוגמאות:
http://csssprites.com/
http://spritegen.website-performance.org/
http://www.spritebox.net/