CSS Sprite là gì ?
Gần đây trong 1 lần làm ví dụ cái “fake login” cho Facebook tôi mới phát hiện ra tất cả hình ảnh đều nằm trong 1 file ảnh duy nhất (ok, tôi biết lạc hậu rồi). Sau 1 hồi google thì tôi biết đó là kỹ thuật “CSS Sprites” do Dave Shea đề nghị lần đầu năm 2004. Thuật ngữ “Sprites” thực ra là kỹ thuật đã được dùng từ trước trong các video games và sau này là trong các website. Tất cả các hình ảnh được đặt vào 1 file hình duy nhất, sau đó dùng thuộc tính background-position của CSS để hiện ra đúng vị trí cần thiết. Cách này cũng được áp dụng với các hiệu ứng hover, active hay focus để tạo các nút bấm động một cách mượt mà hơn.
Tại sao dùng CSS Sprite ?
Với kỹ thuật này thì chỉ có 1 file hình lớn duy nhất được load thay vì hàng loạt hình nhỏ được load lần lượt. Nhiều người cho rằng, load những hình nhỏ thì nhanh hơn load 1 hình lớn. Điều này không chính xác. Mỗi hình khi load sẽ tạo 1 HTTP-Request, mỗi request như vậy sẽ phải “open” và “close” 1 socket mới, càng nhiều hình thì càng nhiều request, và điều này ảnh hưởng lớn tới tốc độ của website (Yahoo! User Interface Blog). Ngoài ra dễ thấy hơn là khi đặt tất cả hình ảnh vào trong 1 file thì kích thước file giảm đi đáng kể.
Lợi thế của việc dùng duy nhất 1 hình lớn mang lại ngoài việc tăng tốc độ thực thi của website còn giảm chi phí cho bandwith.
Nó phổ biến như thế nào (không phải ở VN ?!)?
youtube
Apple
Yahoo
OK, nguyên tắc hoạt động như thế nào ?
Sử dụng hình backgound lớn đã chuẩn bị để làm background, kết hợp với thuộc tính background-position trong css để hiển thị chính xác phần hình ảnh mong muốn. Giá trị được tính theo pixel và có thể xác định dễ dàng bằng photoshop như hình sau:
Cách thực hiện
Cách thứ nhất: Lên kế hoạch ngay từ đầu quá trình cắt layout. Tạo mới 1 file PSD và đặt từng hình vào từng vị trí thích hợp, thông thường ta đặt theo chiều dọc tại các vị trí thuận lợi cho việc tạo CSS sau này. Bạn có thể ghi lại ngay lúc này để sau này khỏi cần mở file ra canh lại.
Cách thứ 2: Thực hiện mọi thứ như bạn vẫn thường làm. Sau đó dùng CSS Sprite Generator nào đó để ghép các hình vào 1 hình và tạo CSS thích hợp cho bạn. Có 1 website thực hiện việc này khá tốt là www.spriteme.org.
Cách này cũng có thể áp dụng để nâng cấp các website hiện có của bạn.
Vấn đề tồn tại
Trong 1 số trường hợp không thể dùng sprite để thực hiện được, như cần repeat background chẳng hạn. Một số khác thì khiến bạn tốn thời gian nhiều hơn thay vì sử dụng các hình ảnh riêng lẻ.
Vấn đề nữa là khó khăn trong việc bảo trì, cập nhật hoặc chỉnh sửa hình ảnh. Việc thêm hình đôi khi khiến bạn phải thay đổi cả những thông số CSS cũ.
Lựa chọn của bạn
Nếu thử xem background của blog này, bạn sẽ thấy nó đang sử dụng CSS Sprite! Tuy nhiên xem kỹ hơn, bạn sẽ thấy nó không hoàn toàn chỉ có 1 hình background duy nhất. Đó là lựa chọn của tôi.
Với những vị trí phức tạp, khó dùng sprite thì tôi dùng 1 hình riêng. Thật sự không gì là không có giá của nó cả, vấn đề là sự lựa chọn của bạn.
Links đã tham khảo:
- http://css-tricks.com/css-sprites/
- http://css-tricks.com/video-screencasts/43-how-to-use-css-sprites/











Cái này em để ý lâu rồi, giờ mới biết tên của nó là Sprites.
và có một bài viết tương đối về nó
Cám ơn anh
Thanks Niên, mấy topic như vầy cho dân gà mờ như tui update kịp thông tin, có gì seo này bị sort thì đi làm cái khác được
Khi tôi đi fv, người fv hỏi tôi có biết về css sptite k? Thực sự cái css sprite này nó khá mới đối với tôi và tôi k hiểu nhiều về nó lắm, nhưng qua bài biết của bạn tôi đã hiểu dc fần nào. Thanks so much!
Sao ông anh làm Gameloft mà lại có nhã hứng quan tâm tới CSS hay rứa
Làm GL nhưng mình không phải là lập trình game. Mình làm ở team E-commerce
GL nhiều bộ phận rứa hả anh ! Em mới ra trường, tưởng GL chỉ có mỗi bộ phận code game thôi chứ ^^
Anh ơi em đang dự định làm đồ án về css sprite nhưng không hiểu nhiều về nó lắm và không có nhiều tài liệu . Anh có thể cho em xin tài liệu về css sprite được không. Thanks anh nhiều !!!!
Cuối bài viết anh có đưa 2 link về css sprite đấy. Ngoài ra em cũng có thể tìm thấy rất nhiều tài liệu trên google với từ khóa “css sprite”, đương nhiên là tiếng Anh. Còn nếu em muốn hỏi anh tài liệu về tiếng Việt thì ngoài bài viết này ra anh không còn tài liệu nào khác
kỹ thuật này thực ra rất bất tiện, vì mục đích cũng chỉ là để giảm thiểu HTTP request song song, có nhiều cách giải quyết, trong đó có cách hay dùng nhất là đặt toàn bộ nội dung tĩnh lên subdomain không set cookies…
)
theo tôi nghĩ ở mức độ site vừa phải thì cũng ko cần thiết, chỉ có ở mức độ “đua” tốc độ của site nào đó, nhằm đạt đỉnh cao thì mời bon chen đến