Оптимизация: используем одно изображение вместо двух
Нашел в сети ссылку на пост буржуйского блога, опубликовавшего заметку “Using Fewer Images” (использование меньшего количества изображений).
Данный способ оптимизации для меня, как веб-мастера, явился весьма оригинальным и интересным, в связи с чем хочу поделиться информацией с читателями моего блога. Не отрицаю, что найдутся те, кто данную фишку уже давно используют, поэтому такие могут смело пропускать данный пост. Остальным же читать и брать на вооружение.
Итак…
Для получения эффекта изменения изображения при наведении на него курсора обычно используется две картинки: одна – для положения «по умолчанию», вторая – для положения “hover”, когда курсор наведен на изображение. Тем не менее, есть один способ с применением всего лишь одного изображения, который имеет некоторые преимущества.
Вот как данный эффект реализуется обычно.
HTML-код может выглядеть примерно следующим образом:
<a href="#" id="yaprak"> </a>
Соответствующий CSS будет содержать следующие стили:
a#yaprak {
width: 64px;
height: 64px;
background-image: url('yaprak_bw.png');
display: block;
text-decoration: none;
}
a#yaprak:hover {
background-image: url('yaprak_color.png');
}
Два отдельных изображения для двух соответствующих состояний должны быть загружены на сервер и могут выглядеть, например, так:
Конечный результат будет следующим:
Дефолтовое изображение, видимое пользователю – это черное-белое изображение (файл yaprak_bw.png). При наведении курсора оно меняется на полноцветное изображение yaprak_color.png.
Однако, если пользователь впервые посещает страницу, на которой используется данный эффект, цветное изображение у него еще не закешировалось, в связи с чем может возникнуть заметная задержка при переключении с черно-белого на цветное изображение. Задержка может зависеть от скорости интернет-соединения и загрузки сервера.
Существует несколько методов предзагрузки альтернативных изображений для предотвращения этого неудобства, но есть совсем другой, не менее эффективный способ – вообще не использовать отдельные альтернативные изображения.
Вы можете использовать одно единственное изображение, на котором совмещены картинки в обоих состояниях: дефолтовое и при наведении курсора.
Как это будет реализовано.
HTML-код остается тем же, меняется только CSS, который на этот раз будет выглядеть следующим образом:
a#yaprak {
width: 64px;
height: 64px;
background-image: url('yaprak_bw_color.png');
display: block;
text-decoration: none;
}
a#yaprak:hover {
background-position: -64px 0;
}
Используется всего лишь одно изображение:
Конечный результат получается следующим:
Таким образом, использование меньшего количества изображений может незначительно ускорить время загрузки Вашего сайта, одновременно уменьшая нагрузку на сервер. Другое, менее значимое преимущество заключается в том, что требуется меньшее число изображений, которые необходимо обслуживать и загружать на сервер.
* * *
Хочешь выделиться из “серой” толпы людей? Это очень просто – прикольные футболки с надписям по любому заставят окружающих обратить на тебя внимание =) Выбери одну из множества готовых или создай свою.
Комментарии (34)
Константин, да, все иконки в одно изображение – это очень разумно. Тоже где-то читал об этом.
А чем плохо использование той же явы для этой же цели ?
Вроде там onmouseover и т.п
Mons, зачем загружать сайт лишними скриптами, если это легко реализуется через CSS?
на некоторых сайтах использую подрузгу картинок через js и смену через onmouseover — много писанины, надо убирать. в метод через css раньше не вникал, но тепер вижу как все просто
все иконки в одном файле видел и где-то на сервисах гугля
В дизайне моего блога http://asemenov.ru/ используется такой прием. Тема разработана не мной, автор http://ericulous.com/. Вроди во всех моих браузерах отображается корректно.
Метод мне показался забавным, но сам пока не использовал.
для данного случая неплохо работает почти такой же вариант, НО…
если разместить over картинку не сбоку, а снизу, тогда можно написать проще
а на странице оформить как
интересная статья, хоть это все и так знаю, но расписано все очень ясно! respect тому кто ведет сайт!
Да, тоже встречал много раз использование данного приема. Очень пригождается)
Понравился аналогичный прием от Vodka… в этом случае хотябы при отключенных стилях остаются просто текстовые ссылки! Интересно… поисковые системы не зачтут этот метод за “черный”???! Там ведь текст наглым образом стилями скрывается… как это обычно делают с ключевыми словами ;))
Что можно сделать, чтобы при отключенных картинках там хоть что-нибудь было (название ссылки), а не пустое место??
Блин а вариант с пред загрузкой картинок как?
Тот что описан очень неподходит, для смены картинок особенно если картинка бешенных размеров.
Куда интересней вариант, загрузки стандартных картинок, и как только сайт полностью подгрузился и человек думает куда мышь навести, в это время в тихую подгружаются картинки на замену.
Почему у меня это не работает ? Увидел на другом сайте где это работает..
<input id="enter_button" value=" " type="submit">
Возможно потому, что Ваша картинка для hover расположена снизу, а не справа
У меня этот код прекрасно работает. Может быть вы смотрите в IE6, который не поддерживает
:hover
для не ссылок.Не понимаю в чем дело.. В опере работает, IE у меня седьмой.
Сделал тестовый файл
На сайте http://reformal.ru/ эта фишка у меня срабатывает! Что то дополнительно нужно наверно
Неправильный доктайп используете, поэтому и не работает в ИЕ.
Нужен вот такой:
Я ничего не менял в коде, взял с сайта (http://reformal.ru) как есть.
Такое чувство что просто не срабатывает событие hover . Может для input та что то дополнительно надо писать?
Код в этой статье у меня работает.
Где вы видели на этом (http://reformal.ru) сайте инпут сабмит с меняющимся бекграундом? Если имеете ввиду оранжевую кнопку “создать” то она сделана не инпутом а ссылкой
<a href="#">создать</a>
Используйте доктайп “современный”
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
ну или Transitional и все будет работать в ие7+, в ие6 псевдоклас ховер работает только на ссылки
Нажмите ссылки “Регистрация” или “Войти” там это инпутом сделано.
Доктайп я поменял, все работает теперь. До недавнего времени я вообще без него обходился ) Версткой профессионально не увлекаюсь, но сейчас наверно буду :)
Я использую простой HTML а не XHTML, такой доктайп на валидность наверно повлияет?
Вот, теперь увидел что вы имели ввиду, но на том сайте применяется XHTML, конечно повлияет на валидность. Но я например верстаю недавно (около года), и естесственно сразу начал верстать XHTML в стрикте. И когда иногда приходится верстать HTML, то проблем невозникает, разве теги по привычке позакрываю
<input type="submit" value="submit" />
но после проверки на валидность быстренько поправляю ситуацию
Можете использовать и XTML, в ие7 все прекрасно работает, только указывайте полный доктайп
прогуглите и вы обязательно найдете полные доктайпы на все случаи
http://wp-themes.com/mystique/?TB_iframe=true&width=1162&height=567 (справа внизу в блогролле синяя ссылка с серой стрелочкой при наведени стрелка менят цвет)Как это сдлеать обьясниет пожалуйста.
Вот так делается.
Респект автору поста, как раз у меня появился поврос, а тут и решение рядом :) спасибо!
Здравствуйте. Корректен ли способ Vodka. Чтото у меня не получается – картинка остается статичной.
и php код
Можете обьяснить что не так?
Ошибка здесь:
Должно быть так:
Огромное спасибо все вышло. Отличный сайт и помощь оперативна))
Спасибо автору, все ясно, доступно и с примерами как раз для чайника вроде меня :) У себя в блоге на блоггере только и пользуюсь теперь таким методом все работает без проблем. Еще раз спасибо.
Отличный урок и фишка хоть и я знал об этой фишке но как сделать)точно не знал)..спасибо очень нужен был этот эффект
ну и в добавок не забывать в css свойство a (decoration) сделать none чтобы выделения не было)..ато стремно выглядит,ну не суть но просто в добавок)…
Здравствуйте! Все получилось,но у меня вот такая проблемка. Мне нужно разместить на одной странице сайта несколько таких изображений. А при размещении скрипта на Style.css показывается только первое изображение. Очень прошу помогите пож-та.Спасибо!
Первый способ лучше если используется анимация css3 transition !
При использовании css3 transition в первом случаем будет transition: background 0.6s;, картинка плавно меняется при наведении и наоборот. А вот во втором случае transition: background-position 0.6s;, картинка плавно приезжает со стороны в сторону, смотря как склеены.