Оптимизация: используем одно изображение вместо двух

6 ноября 2006 г.

Нашел в сети ссылку на пост буржуйского блога, опубликовавшего заметку “Using Fewer Images” (использование меньшего количества изображений).

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

Итак…

Для получения эффекта изменения изображения при наведении на него курсора обычно используется две картинки: одна – для положения «по умолчанию», вторая – для положения “hover”, когда курсор наведен на изображение. Тем не менее, есть один способ с применением всего лишь одного изображения, который имеет некоторые преимущества.

Вот как данный эффект реализуется обычно.

HTML-код может выглядеть примерно следующим образом:

  1. <a href="#" id="yaprak"> </a>

Соответствующий CSS будет содержать следующие стили:

  1. a#yaprak {
  2.   width: 64px;
  3.   height: 64px;
  4.   background-image: url('yaprak_bw.png');
  5.   display: block;
  6.   text-decoration: none;
  7. }
  8. a#yaprak:hover {
  9.   background-image: url('yaprak_color.png');
  10. }

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

Конечный результат будет следующим:

Дефолтовое изображение, видимое пользователю – это черное-белое изображение (файл yaprak_bw.png). При наведении курсора оно меняется на полноцветное изображение yaprak_color.png.

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

Существует несколько методов предзагрузки альтернативных изображений для предотвращения этого неудобства, но есть совсем другой, не менее эффективный способ – вообще не использовать отдельные альтернативные изображения.

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

Как это будет реализовано.

HTML-код остается тем же, меняется только CSS, который на этот раз будет выглядеть следующим образом:

  1. a#yaprak {
  2.   width: 64px;
  3.   height: 64px;
  4.   background-image: url('yaprak_bw_color.png');
  5.   display: block;
  6.   text-decoration: none;
  7. }
  8.  
  9. a#yaprak:hover {
  10.   background-position: -64px 0;
  11. }

Используется всего лишь одно изображение:

Конечный результат получается следующим:

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

автор: Dimox | рубрика CSS-верстка | TrackBack

Комментарии (12): »

  1. Давно пользуюсь этим приемом, но есть и недостатки
    замечал что в ФФ какой то версии и в Safari такие ссылки могут вести себя не коректно, например изображение в hover двигается не нужное расстояние, это в Safari, а в ФФ отображалось изображение hover а другой строке.
    Так что нужно проверять

  2. Да, несомненно, все, что сотворено с помощью CSS, нужно проверять на кроссбраузерность.

  3. Отличный прием, спасибо - беру на вооружение..
    Код нормально работает в Firefox 2.0.0.6, Opera 9.23, Safari 3.0.3 (522.15.5) под Windows XP, на других версиях не смотрел. В бесплатных браузерах (за исключением IE) по-моему достойны внимания только последние версии

    @
  4. 4
    Константин ( 1 год назад ) Ответить

    Тоже пользуюсь этим приемом.

    Артемий Лебедев пошел дальше - он предлагает все мелкие иконки сайта запихивать в одно большое изображение и позиционировать нужную иконку с помощью CSS.

    Кажется на Яндексе так и сделано.

    @
  5. Константин, да, все иконки в одно изображение - это очень разумно. Тоже где-то читал об этом.

  6. А чем плохо использование той же явы для этой же цели ?
    Вроде там onmouseover и т.п

  7. Mons, зачем загружать сайт лишними скриптами, если это легко реализуется через CSS?

  8. на некоторых сайтах использую подрузгу картинок через js и смену через onmouseover — много писанины, надо убирать. в метод через css раньше не вникал, но тепер вижу как все просто
    все иконки в одном файле видел и где-то на сервисах гугля

    @
  9. В дизайне моего блога http://asemenov.ru/ используется такой прием. Тема разработана не мной, автор http://ericulous.com/. Вроди во всех моих браузерах отображается корректно.
    Метод мне показался забавным, но сам пока не использовал.

    @
  10. для данного случая неплохо работает почти такой же вариант, НО…
    если разместить over картинку не сбоку, а снизу, тогда можно написать проще

    1. a.yaprak {
    2.         width: 64px;
    3.         height: 64px;
    4.         background-image: url('yaprak_bw_color.png');
    5.         display: block;
    6.         text-indent: -999em;
    7.         text-decoration: none;
    8.       }
    9.        
    10.       a.yaprak:hover {
    11.         background-position: bottom;
    12.       }

    а на странице оформить как

    1. <a class="yaprak">Yaprak.net</a>
    @
  11. интересная статья, хоть это все и так знаю, но расписано все очень ясно! respect тому кто ведет сайт!

  12. Да, тоже встречал много раз использование данного приема. Очень пригождается)

Оставьте комментарий

Помощь по добавлению кода и форматированию текста в комментарии:
  1. Как отформатировать текст комментария?

    Для этого необходимо использовать HTML-теги, например, <blockquote>, <a>, <strong>, <em> и другие.

  2. Как вывести в комментарии HTML-тег?

    Для этого необходимо заменить угловые скобки < и > на их ASCII-код - соответственно &lt; и &gt;.

    Например, чтобы вывести в комментарии тег <br />, используйте следующую запись: &lt;br /&gt;

  3. Как вставить пример кода без подсветки синтаксиса?

    Для этого используйте запись вида <code>ваш код</code>. При этом для визуального переноса строк кода необходимо задействовать соответствующий HTML-тег. Угловые скобки в коде НУЖНО заменять (см. пункт 2).

  4. Как вставить пример кода с подсветкой синтаксиса?

    Для этого используйте запись вида <code lang="html">ваш код</code>, где в параметре lang указывается нужный язык. Поддерживаемые языки: html, css, php, javascript и другие. Угловые скобки в коде в данном случае НЕ НУЖНО заменять.

Отправляя комментарий, Вы автоматически принимаете правила комментирования на этом блоге.

Правила комментирования на блоге dimox.name:

  1. Первый комментарий всегда проходит премодерацию.
  2. В поле "URL блога" можно указывать только ссылку на главную страницу Вашего блога. Ссылки на прочие веб-ресурсы (в том числе блоги/сплоги, созданные не для людей) будут удалены.
  3. Запрещается использовать в качестве имени комментатора слоганы/названия сайтов, рекламные фразы, ключевые и т.п. слова. В случае несоблюдения этого условия имя изменяется по усмотрению владельца блога. Просьба указывать нормальное имя или ник.
  4. Весьма вероятно, что короткий и неинформативный комментарий вида "Спасибо!", "Интересная статья", будет удален. Исключение составляют знакомые автору блога комментаторы.

Подписаться, не комментируя