Войти на сайт
Регистрация
Обратная связьНаш магазинБлог администрации
Российская школа CSS
Оптимизатор CSS Конструктор CSS
Российская школа CSS » Статьи по CSS » Статья по CSS 6. CSS Sprites (CSS Спрайты)
87
2-08-2008, 02:55 - Razer (Статьи по CSS)
Статья по CSS 6. CSS Sprites (CSS Спрайты)

Здравствуйте уважаемые посетители! С сожалением, должен сообщить о переносе старта первого специального проекта как минимум на неделю. Вмешался человеческий фактор… но, не волнуйтесь, от идей, предложенных на форуме, мы не отказались.
Итак, наша сегодняшняя статья, как и обещалось, будет посвящена элементам, называемым «CSS Sprites» (или CSS Спрайты)…

Итак, в начале, разберёмся, сто же такое спрайт.
В принципе, спрайт – одно изображение, в состав которого включено некоторое количество более мелких изображений. По структуре, спрайт можно сравнить с мозаикой или пазлом. С помощью специального атрибута, для каждого объекта выбирается часть этой картинки, которая и показывается.

Конечно, Вы имеете полное право спросить: «Зачем создавать спрайт, если можно просто воспользоваться несколькими картинками, как это делается обычно?». Ответ будет довольно простым: спрайт подгружается один раз и при наведении курсора на элемент изменения происходят мгновенно, без подгрузки другой картинки. Это существенно улучшает его восприятие и уменьшает количество HTTP запросов, что в свою очередь ускоряет загрузку страницы. Само собой, у спрайтов есть ограничения. Наш объект должен быть фиксирован по ширине и /или высоте.

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

Итак, с теорией мы разобрались. Теперь пришло время применить спрайты на практике.
Здесь, мы будем создавать вертикальное меню, состоящее из 5 элементов. Сделаем его, используя маркированный список.

По традиции, создадим файлы index.html и style.css. В код веб-страницы запишем стандартное начало:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>
Российская школа CSS. Спрайты
</title>
<link rel="stylesheet" href="style.css" type="text/css" />
</head>
<body>

Замечательно… Теперь, приступим к формированию меню
<ul id="menu">
   <li><a href="/">Ссылка 1</a></li>
   <li><a href="/">Ссылка 2</a></li>
   <li><a href="/">Ссылка 3</a></li>
   <li><a href="/">Ссылка 4</a></li>
   <li><a href="/">Ссылка 5</a></li>
</ul>
</body>
</html>

Наш список-меню готов. Теперь, перейдём к оформлению. Отменим в CSS оформление для всего списка:
ul {
   list-style:none;
}

Готово. Теперь зададим вид пункта меню, без наведения на него мыши:
#menu li a {
   padding:7px 10px;
   color:#666;
   text-decoration: none;
   display: block;
   font:13px Arial;
   font-weight:bold;
   background: url(menu.png);
   width:200px;
   margin:3px;
}

Здесь – мы использовали изображение menu.png. Это – и есть спрайт. Оно выглядит следующим образом:
Статья по CSS 6. CSS Sprites (CSS Спрайты)


Теперь зададим стили для меню при наведении на него мыши и при клике на него:
#menu li a:hover {
    color: #fff;
    background: url(menu.png) 0 -30px;
}
    
#menu li a:active {
    color: #fff;
    background: url(menu.png) 0 -60px;
}

Заметим, что -30px и -60 px – указание, на сколько пикселей надо сместиться по спрайту.
Итак, всё готово. Конечно, это меню – не верх совершенства, но если всё сделано правильно, то получите такое меню:
Статья по CSS 6. CSS Sprites (CSS Спрайты)

Вот и всё на сегодня. Спасибо за внимание!




Автор: Алексей Савинов, Российская школа CSS
-----------------------------------
Демо
Правила копирования материалов статьи
Перейти в категорию статей по CSS


Уважаемый посетитель Российской школы CSS! Вы зашли на сайт как незарегистрированный пользователь. Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем. Спасибо за внимание!


---------------------------------------
---------------------------------------

Похожие публикации

Публикацию посмотрели 15868 раз(а) и написали 32 комментариев.
Комментарий #1 написал: OniX (2 августа 2008 13:19)
Фото

Группа: Модераторы
Комментариев: 33
Публикаций: 1
Репутация: 0 Зарегистрирован: 9.07.2008
Спасибо! полезная статья.
Комментарий #2 написал: Schmel100 (2 августа 2008 14:53)
Фото

Группа: Посетители
Комментариев: 18
Публикаций: 0
Репутация: 0 Зарегистрирован: 28.06.2008
Очень удобно! Спасибо.


--------------------------
www.schmel100.110mb.com
Комментарий #3 написал: Sheff (3 августа 2008 10:30)
Фото

Группа: Посетители
Комментариев: 26
Публикаций: 0
Репутация: 0 Зарегистрирован: 3.06.2008
Отличный урок Очень нужный для навигации ))
Комментарий #4 написал: Korsar (5 августа 2008 07:33)
Фото

Группа: Посетители
Комментариев: 4
Публикаций: 0
Репутация: 0 Зарегистрирован: 11.06.2008
Меня интересует каким образом происходит деление спрайта.
#menu li a:hover {
color: #fff;
background: url(menu.png) 0 -30px;
}

#menu li a:active {
color: #fff;
background: url(menu.png) 0 -60px;
}

А то что то я не понял как он считывает выделение
Комментарий #5 написал: Ilylevi (5 августа 2008 14:42)
Фото

Группа: Посетители
Комментариев: 10
Публикаций: 0
Репутация: 0 Зарегистрирован: 15.07.2008
Да, действительно красиво получается. А если горизонтальное меню, что надо поменять? Дать ширину на нужный размер (не 200 px а 800px) и всё? Хочу попробовать, да работы навалило ого-го, не успеваю wassat
Комментарий #6 написал: Kamovich (5 августа 2008 15:40)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Люди помогите как зделать на главной странице новости?
Комментарий #7 написал: Ilylevi (5 августа 2008 17:21)
Фото

Группа: Посетители
Комментариев: 10
Публикаций: 0
Репутация: 0 Зарегистрирован: 15.07.2008
Проба сделать в горизонтальном варианте. В Мозилле и Опере получилось, а IE7 дает странный эффект "лесенки", вот так: [img]http://s53.radikal.ru/i139/0808/01/e1cd8282f460t.jpg[/img] У меня другие цвета, и вставка (display: inline;) в код. Что нужно вставить, чтобы IE показывал нормально?

Комментарий #8 написал: Razer (5 августа 2008 18:27)
Фото

Группа: Модераторы
Комментариев: 2
Публикаций: 2
Репутация: 0 Зарегистрирован: 23.07.2008
В статье о работе со списками всё детально описано.
Комментарий #9 написал: Ilylevi (5 августа 2008 18:40)
Фото

Группа: Посетители
Комментариев: 10
Публикаций: 0
Репутация: 0 Зарегистрирован: 15.07.2008
Статья по спискам очень хорошая, и вертикальное меню получилось, а горизонтальное - нет (IE7 видимо требует какую-то "заплатку")
Спрайты в вертикальном меню получились легко, а в горизонтальном - та же проблема (в IE получается лесенка)
Комментарий #10 написал: Komarova (6 августа 2008 14:33)
Фото

Группа: Посетители
Комментариев: 13
Публикаций: 0
Репутация: 0 Зарегистрирован: 10.06.2008
Насчёт горизонтального меню - ребята, по-моему display:inline не очень грамотно в этом случае... лучше взять display:block; и float:left; fellow Спрайт должен быть такой же, как и здесь: вертикальный. Значения циферок -30 и -60 в бэкграунде тогда не меняюся (ну то есть меняются под свою высоту кнопки). Вот в принципе и всё)) Должно быть кроссбраузерно.
Комментарий #11 написал: Korsar (6 августа 2008 15:32)
Фото

Группа: Посетители
Комментариев: 4
Публикаций: 0
Репутация: 0 Зарегистрирован: 11.06.2008
Цитата: Komarova
Насчёт горизонтального меню - ребята, по-моему display:inline не очень грамотно в этом случае... лучше взять display:block; и float:left; Спрайт должен быть такой же, как и здесь: вертикальный. Значения циферок -30 и -60 в бэкграунде тогда не меняюся (ну то есть меняются под свою высоту кнопки). Вот в принципе и всё)) Должно быть кроссбраузерно.

По подробнее пожалуста и пример в студию wink
Комментарий #12 написал: st3ff (6 августа 2008 18:59)
Фото

Группа: Посетители
Комментариев: 2
Публикаций: 0
Репутация: 0 Зарегистрирован: 6.08.2008
Спасибо, автору действительно малоресурсная красотища, быстро и легко...теперь...когда знаю. :) Спасибо! =) wink
Комментарий #13 написал: Komarova (6 августа 2008 20:02)
Фото

Группа: Посетители
Комментариев: 13
Публикаций: 0
Репутация: 0 Зарегистрирован: 10.06.2008
Korsar, короче, добавьте в стилях (из урока) к #menu li a строчку:
float: left;
И у вас будет горизонтальное меню wink
Комментарий #14 написал: Korsar (6 августа 2008 21:56)
Фото

Группа: Посетители
Комментариев: 4
Публикаций: 0
Репутация: 0 Зарегистрирован: 11.06.2008
Ааа, спасибо понятно =)
Комментарий #15 написал: paralolka (7 августа 2008 08:13)
Фото

Группа: Посетители
Комментариев: 3
Публикаций: 0
Репутация: 0 Зарегистрирован: 5.08.2008
А если использовать:
background-position: top
background-position: middle
background-position: bottom
или
background-position: left
background-position: center
background-position: right
???
Комментарий #16 написал: dobs (13 августа 2008 00:50)
Фото

Группа: Посетители
Комментариев: 2
Публикаций: 0
Репутация: 0 Зарегистрирован: 11.08.2008
П.С. В Опере есть небольшой баг меню сдвинуто от левого края, если его подправить margin-left: -20px; то все вроде как ОК, но если потом зайчи через ИЕ то меню там тоже сдвинется...
Комментарий #17 написал: Al.B. (20 августа 2008 20:03)
Фото

Группа: Посетители
Комментариев: 4
Публикаций: 0
Репутация: 0 Зарегистрирован: 4.06.2008
Могу предложить альтернативу: bully
в данной статье по-пиксельно изменяется положение фона элемента.
Если у вас всего 3 разных фона элемента (их можно сделать и больше чем в этой статье ... например кроме как обычная ссылка,по наведению и по нажатию можно сделать выделенные ссылки изначально другим цветом или фоном) но если их всего 3 и кнопки во всех 3 состояниях одинаковой высоты то вот как мы делаем:

вместо

#menu li a:hover {
color: #fff;
background: url(menu.png) 0 -30px;
}

#menu li a:active {
color: #fff;
background: url(menu.png) 0 -60px;
}


вставляем такой вариант:

#menu li a:hover
{
color: #fff;
background: url(menu.png);
background-position: left center;
}

#menu li a:active
{
color: #000;
background: url(menu.png);
background-position: left bottom;
}


и что де мы сделали?! А то что бэкграунд позиционируется по верхнему краю при обычном состоянии, по середине при наведении и по нижнему краю при активном состоянии. Вот так вот ... всё немного проще winked
Комментарий #18 написал: Max83 (23 августа 2008 01:20)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Спасибо, хорошая статья!:)

Для горизонтального вывода, просто добавляем флоат в стиль:

#menu li a {
padding:7px 10px;
color:#666;
text-decoration: none;
display: block;
font:13px Arial;
font-weight:bold;
background: url(menu.png);
width:100px;
margin:3px;
float:left;

}

И ставим ширину 100px, чтобы меню уместилось на экране.



Комментарий #19 написал: blablabla (26 августа 2008 00:57)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Да ниче так, мне понравилось!
Комментарий #20 написал: Ieshua (27 августа 2008 22:43)
Фото

Группа: Посетители
Комментариев: 30
Публикаций: 0
Репутация: -1 Зарегистрирован: 12.08.2008
Ну, как обычно вне конкуренции lol Хотя титл лучше составлять более корректно smile
Комментарий #21 написал: Алмаз (28 августа 2008 12:57)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
глючит если нажать, потянуть и отпустить... остаётся зелный цвет
Комментарий #22 написал: Кудашо Виталий (2 ноября 2008 20:33)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
как поставить спрейт на CSS

пожалуйста
Комментарий #23 написал: Load1ng (16 ноября 2008 00:43)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
П.С. В Опере есть небольшой баг меню сдвинуто от левого края, если его подправить margin-left: -20px; то все вроде как ОК, но если потом зайчи через ИЕ то меню там тоже сдвинется...


Вот я тоже на это нактнулся, решил это заменив padding на height: 30px;, но при этом текст ушол по левому краю.

Если кто знает как решить проблему отображения спрайта в опере напишите.
Комментарий #24 написал: markedone (24 декабря 2008 18:57)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Хорошая статья. Спасибо. fellow
Комментарий #25 написал: Alesxxa (20 января 2009 21:46)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Комментарий #26 написал: 13th-ya (10 февраля 2009 11:25)
Фото

Группа: Гости
Комментариев: 0
Публикаций: 0
Репутация: 0 Зарегистрирован: --
Итак, в начале, разберёмся, сто же такое спрайт.

Ребят, уберите ошибку - не красиво такие ваши на таком сайте fellow
Комментарий #27 написал: countervice (28 марта 2009 18:28)
Фото

Группа: Посетители
Комментариев: 2
Публикаций: 0
Репутация: 0 Зарегистрирован: 26.03.2009
Спааааааааааааасссссиииииииииббббоооооооооооо!!!!!!! bully
Комментарий #28 написал: nufize1965 (24 мая 2009 12:08)
Фото

Группа: Посетители
Комментариев: 1
Публикаций: 0
Репутация: 0 Зарегистрирован: 24.05.2009
?? ??
Комментарий #29 написал: Vovanichek (16 июля 2009 23:00)
Фото

Группа: Посетители
Комментариев: 1
Публикаций: 0
Репутация: 0 Зарегистрирован: 16.07.2009
Все бы было так хорошо, если бы не было так грустно, это так к слову... Эх, научил бы кто нить меня сайты делать - может тоже не хуже вашего бы получилось Отличный у вас проектик, не соскучишься, спасибо
Комментарий #30 написал: ИванцовВ (19 июля 2009 14:14)
Фото

Группа: Посетители
Комментариев: 4
Публикаций: 0
Репутация: 0 Зарегистрирован: 19.07.2009
Спасибо за интересный материал!
1 2


Информация

Посетители, находящиеся в группе Гости, не могут оставлять комментарии в данной новости.
Подписаться на канал RSS Добавить сайт в закладки
«    Июль 2010    »
ПнВтСрЧтПтСбВс
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
 
© 2008-2010 Copyright, Российская школа CSS. CSS-School.RU. Все права защищены.
Designed by GZ Design © 2010
Valid XHTML 1.0 Transitional Правильный CSS!