CSS спрайты, что это?
В этой заметке расскажу вам о такой полезной вещи в верстке страниц, как css спрайты (css sprite).
CSS спрайты — это представление большого количества мелких картинок, путем создания одной большой картинки, что существенно экономит время загрузки и ресурсы хостинга (запрос идет всего-лишь на одну картинку, вместо всех).
Что такое css спрайты и как их делать, лучше всего показать на примере.
Технология создания css спрайта
Расскажу вам пример из личного опыта, как спрайт помог съэкономить на картинках около 170(!) килобайт и убрать порядка 80ти(!) лишних запросов к серверу.
Итак, дизайн сайта предполагал такое меню:
![]()
Как вы видите, около каждого пункта меню стоит своя иконка. Таких пунктов насчитывалось 78 штук и каждый со своей иконкой. И я из-за своей ленивости пошел обычным путем, нарезал 78 картинок и сделал меню такого вида:
1 2 3 4 5 6 7 | <ul> ... <li><a href="#"><img src="images/menu1.png" alt="" /> Холодильные машины</a></li> <li><a href="#"><img src="images/menu2.png" alt="" /> Выносной холод</a></li> <li><a href="#"><img src="images/menu3.png" alt="" /> Встроенный холод</a></li> ... </ul> |
Как вы догадались, решение это было не самым лучшим. Сайт долго грузился, картинки в сумме весили более двухсот килобайт и к каждой шел отдельный запрос. Выходом из этой ситуации было создание спрайта.
Процесс создания спрайта заключается в составлении одной большой картинки из мелких. Немного поработав в фотошопе, вышел такой спрайт:
![]()
Главное при составлении спрайта, делайте кратные расстояния между картинками, чтобы потом было легче высчитывать позицию фона.
В итоге, мой спрайт вышел весом 55кб. Сохранил я его джепегом (в этом я наверно сгрешил), т.к. png выдавал размеры более 100 кб. Съэкономлено около 170кб! И всё представлено одной картинкой!
Теперь настает второй не сложный, но муторный этап создания css спрайта.
Вместо тега img задаем какой-либо тег, я выбрал короткий тег <i>, делаем его блочным, задаем размеры, ставим на фон спрайт-картинку, и каждому тегу <i> задаем свое соответствующее смещение фона. Вышел примерно такой код:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | <style type="text/css"> ul li i{ display:block; width:45px; height:45px; background:url(images/sprite.jpg); } </style> <ul> ... <li><a href="#"><i style="background-position:0px 0px"></i> Холодильные машины</a></li> <li><a href="#"><i style="background-position:-45px 0px"></i> Выносной холод</a></li> <li><a href="#"><i style="background-position:-90px 0px"></i> Встроенный холод</a></li> ... </ul> |
Загрузка сайта существенно возросла, убита куча ненужных запросов. Я довольный пошел домой
Комментарии (7) на “CSS спрайты, что это?”
Оставить комментарий
Для вставки кода используйте <code> ... </code>.
неплохая статья, вот тут тоже очень интересно про спрайты рассказано css спрайты
Интересное решение, буду знать.
Интересный конечно вариант, но для сайтов, работающих на CMS (а сейчас большинство сайтов таких), это очень неудобно, сам клиент через CMS никогда не сможет поменять картинку или добавить раздел в меню с новой картинкой.
ну по поводу того что cms… для этого и нужны кодеры. Не зря же существуют веб дизайнеры
Увидел спрайты я первый раз на ютубе (http://s.ytimg.com/yt/imgbin/www-master-vflai4i-q.png). по началу показалось странной идеей, но потом оценил полезность.
А еще полезность спрайтов не только в том что экономите килобайты или запросов меньше делаете, а мгновенное появление изображения (к примеру скрытого, когда раскрываешь). Уже картинка загружена давно и из неё куски берутся мгновенно, нежели делать запрос а потом выводить в картинку.
p.s.
Кому нужен тег img — сделайте gif 1×1 прозрачный. делайте ему src, а все остальное так же как и для остальных тегов;)
Вычислять background-position совсем не обязательно вручную. Для этого есть специальные сервисы, например http://spritecow.com