css спрайты (css sprite)

( 0 - user rating )
В этой статье я подробно расскажу, что же такое css спрайты, каким образом ними пользоваться и в чем Вы от этого выиграете при создании своего сайта.
css спрайт (css sprite) - одно изображение, которое включает в себя несколько логически связанных изображений, используемых для создания эффекта анимации при наведении курсора на элемент.
Существует два способа для создания эффекта анимации при наведении курсора на ссылку:

Первый способ известен всем и заключается в том, что для ссылки устанавливается фоновое изображение, а при наведении, для псевдокласса :hover это изображение меняется на другое. Тем самым создаётся эффект анимации.

Суть второго способа заключается в том, что используется одно фоновое изображение вместо двух. И эффект анимации создаётся путем изменения положения фонового изображения.

Преимущества css спрайтов

На первый взгляд может показаться, что страница грузится быстрей, если изображения загружаются только тогда, когда они нужны, но это не так, потому что для каждой загрузки создаются дополнительные HTTP запросы, а это ухудшает эффективность вашей страницы. Одно изображение, конечно же, весит больше чем два, но не на столько, что это может ускорить загрузку страницы.
Исходя из этого можно сформулировать первое преимущество использования css спрайтов над двумя разными изображениями:

Использование css спрайтов ускоряет загрузку страницы.

Использование css спрайтов создает дополнительное удобство для управления эффектом, так как намного легче изменить с помощью css положение фона, чем использовать новое изображения.
Второе преимущество:

Простота использования css спрайтов

css спрайты в действии

css спрайты используются чаще всего для ссылок, а чаще именно для меню, и для элементов, которым нужно придать различное оформления для разных ситуаций. Далее я подробно распишу эти два случая.

css спрайты для ссылок

В качестве примера я буду использовать следующее изображение для создания спрайтов. Как Вы могли заметить, исходное изображение состоит из двух изображений: для обычной ссылки и для активной ссылки.

css спрайт
  1. a.sample-spite {
  2. background:url('/images/sprite_sample.jpg') 0 0 repeat-x;
  3. width:246px;
  4. height:29px;
  5. display:block;
  6. font-size:10px;
  7. line-height:29px;
  8. color:#FFFFFF;
  9. font-weight:bold;
  10. text-transform:uppercase;
  11. text-align:center;
  12. text-decoration:none;
  13. }
  14. a.sample-spite:hover {
  15. background-position:0 -30px;
  16. }
Выше я привел пример css стилей для ссылки, в которой используется css спрайт. Как видите стили очень простые, но нас больше всего интересует код, описынный в строках 2 и 15.
Во второй строке прописывается путь к фоновому изображению, а в 15 строке указано, как должно изменятся положение фона при наведении курсора на ссылку. В этом и состоит весь принцип работы css спрайтов - изменение положения фона.

Теперь можно в html документе для любой ссылки поставить класс sample-spite
<a href="#" class="sample-spite">Пример css спрайта</a>
и в результате в браузере вы увидите следующее:

Различное оформление элементов с помощью css спрайта

Этот способ тоже очень часто используется как и для ссылок. Он заключается в том, чтоб придать различное оформление для элемента в зависимости от его местоположения. Я покажу на примере, как с помощью css спрайтов это можно сделать. В качестве примера я буду использовать следующее изображение:
css спрайт
Как видите здесь я включил в "спрайтовое изображение" три изображения. Далее я создам таблицу с тремя колонками и покажу, как можно с помощью css спрайтов сделать разное оформление для заголовков разных колонок.
  1. .sample-sprites-table td h6
  2. background:url('/images/sprite_sample_2.gif') 0 0 no-repeat;
  3. padding:0 0 0 25px;
  4. font-size:10px;
  5. line-height:18px;
  6. color:#000000;
  7. font-weight:bold;
  8. text-transform:uppercase;
  9. }
  10. #sample-column-2 h6
  11. background-position:0 -19px;
  12. }
  13. #sample-column-2 h6
  14. background-position:0 -38px;
  15. }
  1. <table class="sample-sprites-table">
  2. <tr>
  3. <td><h6>Заголовок css спрайта</h6></td>
  4. <td id="sample-column-2"><h6>Заголовок css спрайта 2</h6></td>
  5. <td id="sample-column-3"><h6>Заголовок css спрайта 3</h6></td>
  6. </tr>
  7. </table>
Как видите, здесь код тоже очень простой для понимания, большинство стилей используется для оформления стилей заголовков. По умолчанию, для всех заголовков шестого уровня я установил фоновое изображение, показанное выше. И далее с помощью id для колонок и изменения положения фона, я изменил оформление заголовков в зависимости от того, в какой колонке он находится.
Заголовок css спрайта
Заголовок css спрайта 2
Заголовок css спрайта 3
Этот способ применения css спрайтов отличается от предидущего тем, что в первом примере изменяется положение фонового изображения в зависимости от действия (в нашем случае наведение курсора на ссылку), а во втором - в зависимости от расположения заголовка.

Комментарии  

 
+5 # Андрей 2009-05-28 15:39 спасибо, очень полезная статья Ответить | Ответить с цитатой | Цитировать
 
 
0 # Максим 2009-06-02 05:12 Эти спрайты каг бы заменяют onmouseover ? Ответить | Ответить с цитатой | Цитировать
 
 
+3 # ni_x 2009-06-02 13:27 Да, они кагбэ говорят нам, что можно сделать вот такое не используя скрипты. Ответить | Ответить с цитатой | Цитировать
 
 
-5 # Hattab 2009-09-01 17:14 Вообще то это можно сделать и не на скриптах, а просто указывая в псевдоклассе а:hover в качестве баграунда другую картинку, а не менять положение фона как в данном примере. Так-то. ИМХО полезность сомнительная, а гемора с расчетом положения баграунда много. Проще загрузить 2 картинки и не париться. Актуально для диал-апщиков, которых сейчас 3 с половиной на всю страну… Ответить | Ответить с цитатой | Цитировать
 
 
-1 # SolnceWeb 2010-07-11 18:02 перечитай статью, nfv написано про подгрузку двух картинок Ответить | Ответить с цитатой | Цитировать
 
 
0 # Игорь 2009-06-04 19:11 Огромнейшее спасибо! Автор просто супер! Ответить | Ответить с цитатой | Цитировать
 
 
-3 # ni_x 2009-06-04 19:51 спасибо. радует :)

Заходите на cssclub.ru будем делать сеть для верстальщиков.
Ответить | Ответить с цитатой | Цитировать
 
 
-7 # Xarakiry 2009-06-26 14:00 Спасибо АФТАР! буду применять на своем блоге stroimsayt.com Ответить | Ответить с цитатой | Цитировать
 
 
-1 # Павел 2009-08-22 21:26 Автору спасибо)
з.ы. В листинге стилей sample-column-2 напсано два раза
Ответить | Ответить с цитатой | Цитировать
 
 
-1 # BOTOKILLER 2010-07-19 21:17 хорошая статейка, но в ASP.NET это сделать гораздо легче
автору спс
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Alex 2010-08-18 14:45 Метод хороший, но мне больше нравится скриптами (имхо удобнее и быстрее).
Например код для jQuery.
$(document).ready(function( ){
$.preloadImages = function(){
var preload = [
'/images/img_2.png',
'/imgaes/img_3.png',

];
$(document.createElement('img')).bind('load', function(){
if(preload[0]) this.src = preload.shift();
}).trigger('load');
}
$.preloadImages() ;
});
Ответить | Ответить с цитатой | Цитировать
 
 
-3 # Антошка 2010-08-26 20:46 Исправьте "Этот способ применения css спрайтов отличается от предидущего тем, что в первом примере изменяется положение фонового изображения в зависимости от действия (в нашем"
Цитирую Alex:
Метод хороший, но мне больше нравится скриптами (имхо удобнее и быстрее).

не смешите меня и учите матчасть: ваши скрипты весят не один десяток кб, это раз, во-вторых не забываем про косяки со скриптами, в третьих, есть такая вещь для background-position: как left, right и тд, что позволяет обьединять по 2-3 картинки в одну, дописывать пару строк в css, и не париться с позиционировани ем. э-эх
Ответить | Ответить с цитатой | Цитировать
 
 
-1 # Alex 2010-08-28 17:12 jQuery - 50 кбайт + пару килобайт на сам скрипт. У вас модем, что вы не можете это себе позволить?

Ну а в целом если вы такой упоротый, то извращайтесь спрайтами дальше, мне то что. :)
Ответить | Ответить с цитатой | Цитировать
 
 
-3 # О_о 2010-08-30 08:48 А вы еще через 5 лет зайдите на эту статью и еще какую нибудь умную мысль напишите. Этой статьей 100 лет в обед будет ;) Ответить | Ответить с цитатой | Цитировать
 
 
-2 # Антошка 2010-08-30 20:24 Цитирую Alex:
jQuery - 50 кбайт + пару килобайт на сам скрипт. У вас модем, что вы не можете это себе позволить?

Ну а в целом если вы такой упоротый, то извращайтесь спрайтами дальше, мне то что. :)

Ммм, отнюдь не диалап. Но Вы внимательно посмотрите в статистику Google.Analitycs например, и заметите, что большое количество людей - используют медленное соединение, а если спросить пользователей Yota, как у них со скоростью - тоже иногда говорят, что как диалап. И зачем мне jQuery, если я сделаю за пару минут тот же функционал без скриптов и так далее? И ещё, посетите проект webo.in, там вам всё расскажут и покажут)
Ответить | Ответить с цитатой | Цитировать
 
 
0 # Alex 2010-09-01 20:05 Очень рад, что вы мыслите конструктивно. У самого была Yota с 30 кбайт\сек. Больше не пользуюсь. Что касается ga, то на моих сайтах dial-up ~2,5%. Дело в том, что вам jq не нужен, а другим нужен, да и на jq я сделаю это быстрее, чем вы со спрайтами : ). Что касается webo.in - сомнительный сервис. Ответить | Ответить с цитатой | Цитировать
 
 
-1 # Антошка 2010-09-02 18:05 Я думаю нам не обязательно меряться пиписьками Быстрее, медленнее…
Представьте просто такую ситуацию: сидит в городе n-ск клиент Вашего заказчика, и вот заходит он на сайт Ваш, с использует диалап( ну нет у них выделенки, нет) и ждёт, пока страница загрузится…Хотя впрочем это Вам решать. Но вообще, я противник использования скриптов без большой необходимости, даже все менюшки выпадающие делаю на css.

По поводу webo.in - ну кто говорит, что это последняя инстанция, есть FireBug+Yslow, там ставят "двойки" сайтам
Да и ссылку я давал скорее для того, чтобы Вы изучили статьи, находящиеся там, а в частности утверждение о большой конверсии при бОльшей скорости загрузки, а не предлагал Вам пользоваться данным сервисом. Хотя как правило, дизайнерам "пофигу" на верстальщиков, верстальщикам "пофигу" на маркетологов, пытающихся выжать из сайта все соки, чтобы он принёс максимальную прибыль.
Ответить | Ответить с цитатой | Цитировать
 
 
-1 # Антошка 2010-09-02 18:05 А вообще, наша дискуссия в какой-то мере всё же бесполезна, Вы лучше попробуйте провести эксперимент: снимите статистику с одного из своих сайтов посредством GA, а потом примените к нему все рекомендации с webo.in (при необходимости могу помочь) , и посмотрите, как изменится трафик и посещаемость. Да, чуть не забыл очень важный момент, берёг до конца: Google при ранжировании учитывает скорость загрузки сайта, правда пока только в англоязычном, но недолго и до нас. Ответить | Ответить с цитатой | Цитировать
 
 
0 # Alex 2010-09-02 18:45 Если вы из кожи вон лезете, что бы меня чем то удивить, чему-то научить, то увы ничего нового для себя не открыл. А дискуссия и вправду бесполезна, используйте что хотите и как хотите, но не надо навязывать своё мнение. Моё мнение - 100 кб скриптов для современного сайта норма, даже мало я бы сказал. Даже на этом джумловском сайте, на котором вы отписываетесь скрипты весят 156 кб… Ответить | Ответить с цитатой | Цитировать
 
 
0 # Антошка 2010-09-02 18:51 Цитирую Alex:
Если вы из кожи вон лезете, что бы меня чем то удивить, чему-то научить, то увы ничего нового для себя не открыл. .

Я рад, что Вы так образованны Да я не навязываю, просто попробуйте)
Ответить | Ответить с цитатой | Цитировать
 

Добавить комментарий


Защитный код
Обновить

Переводы


Selectutorial

Селекторы в действии

listutorial

Изображения для маркеров списка

css screencast