What is css sprite

Implementing image sprites in CSS

Image sprites are used in numerous web apps where multiple images are used. Rather than include each image as a separate image file, it is much more memory- and bandwidth-friendly to send them as a single image; using background position as a way to distinguish between individual images in the same image file, so the number of HTTP requests is reduced.

Note: When using HTTP/2, it may in fact be more bandwidth-friendly to use multiple small requests.

Implementation

Suppose an image is given to every item with class toolbtn :

.toolbtn  background: url(myfile.png); display: inline-block; height: 20px; width: 20px; > 

A background position can be added either as two x, y values after the url() in the background, or as background-position . For example:

#btn1  background-position: -20px 0px; > #btn2  background-position: -40px 0px; > 

This would slide the starting point of the background image for the element with the ID btn1 20 pixels to the left and the element with the ID btn2 40 pixels to the left (assuming they have the class toolbtn assigned and are affected by the image rule above).

Similarly, you can also make hover states with:

#btn:hover  background-position: px px; > 

See also

Found a content problem with this page?

This page was last modified on May 29, 2023 by MDN contributors.

Your blueprint for a better internet.

Источник

CSS-спрайты

CSS-спрайт – способ объединить много изображений в одно, чтобы:

  1. Сократить количество обращений к серверу.
  2. Загрузить несколько изображений сразу, включая те, которые понадобятся в будущем.
  3. Если у изображений сходная палитра, то объединённое изображение будет меньше по размеру, чем совокупность исходных картинок.

Рассмотрим, как это работает, на примере дерева:

Сейчас «плюс», «минус» и «статья» – три отдельных изображения. Объединим их в спрайт.

Шаг 1. Использовать background

Первый шаг к объединению изображений в «спрайт» – показывать их через background ., а не через тег IMG .

В данном случае он уже сделан. Стиль для дерева:

.icon < width: 16px; height: 16px; float: left; >.open .icon < cursor: pointer; background: url(minus.gif); >.closed .icon < cursor: pointer; background: url(plus.gif); >.leaf .icon

Шаг 2. Объединить изображения

Составим из нескольких изображений одно icons.gif , расположив их, например, по вертикали.

Из , и получится одна картинка:

Шаг 3. Показать часть спрайта в «окошке»

А теперь самое забавное. Размер DIV для иконки – жёстко фиксирован:

Это значит, что если поставить в качестве background объединённую картинку, то вся она не поместится, будет видна только верхняя часть:

Если бы высота иконки была больше, например, 16×48 , как в примере ниже, то было бы видно и остальное:

…но так как там всего 16px , то помещается только одно изображение.

Шаг 4. Сдвинуть спрайт

Сдвиг фона background-position позволяет выбирать, какую именно часть спрайта видно.

В спрайте icons.gif изображения объединены так, что сдвиг на 16px покажет следующую иконку:

/*+ no-beautify */ .icon < width: 16px; height: 16px; float: left; background: url(icons.gif) no-repeat; >.open .icon < background-position: 0 -16px; /* вверх на 16px */ cursor: pointer; >.closed .icon < background-position: 0 0px; /* по умолчанию */ cursor: pointer; >.leaf .icon < background-position: 0 -32px; /* вверх на 32px */ cursor: text; >
  • В спрайт могут объединяться изображения разных размеров, т.е. сдвиг может быть любым.
  • Сдвигать можно и по горизонтали и по вертикали.

Отступы

Обычно отступы делаются margin/padding , но иногда их бывает удобно предусмотреть в спрайте.

Тогда если элемент немного больше, чем размер изображения, то в «окошке» не появится лишнего.

Пример спрайта с отступами:

Иконка RSS находится в нём на координатах (90px, 40px) :

Это значит, для того чтобы показать эту иконку, нужно сместить фон:

background-position: -90px -40px;

При этом в левом-верхнем углу фона как раз и будет эта иконка:

Элемент, в котором находится иконка (в рамке), больше по размеру, чем картинка.

Если бы в спрайте не было отступов, то в такое большое «окошко» наверняка влезли бы другие иконки.

Итого

Решение лучше всего принимать, исходя из принципов семантической вёрстки.

Задайте вопрос – что здесь делает изображение? Является ли оно самостоятельным элементом страницы (фотография, аватар посетителя), или же оформляет что-либо (иконка узла дерева)?

Элемент IMG следует использовать в первом случае, а для оформления у нас есть CSS.

  1. Сократить количество обращений к серверу.
  2. Загрузить несколько изображений сразу, включая те, которые понадобятся в будущем.
  3. Если у изображений сходная палитра, то объединённое изображение будет меньше по размеру, чем совокупность исходных картинок.

Если фоновое изображение нужно повторять по горизонтали или вертикали, то спрайты тоже подойдут – изображения в них нужно располагать в этом случае так, чтобы при повторении не были видны соседи, т.е., соответственно, вертикально или горизонтально, но не «решёткой».

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

Источник

CSS спрайты: основные техники и полезные инструменты

Использование CSS-спрайтов на сайте позволяет повысить производительность и грамотно организовать элементы интерфейса.

Sprite Sheet — это одно большое изображение мелких графических элементов сайта, например иконок или кнопок. И благодаря CSS можно отображать каждый элемент отдельно.

Применение на практике

Главным преимуществом использования спрайтов является однократная загрузка сервером сразу всех элементов в одном файле. некоторые могут подумать, что подгрузка маленьких, мало весящих картинок позволяет увеличить производительность сайта, но это не так — случае отдельных изображений увеличивается количество HTTP-запросов. Также, при использование единого спрайта позволяет уменьшить вес графики. Пример спрайта на сайте webdesign tuts:

Пример кода для использования спрайтов на странице (демонстрация):

   #navlist #navlist li #navlist li, #navlist a #home #home #prev #prev #next #next  

Также спрайты часто используют для создания простого и кроссбраузерного hover-эффекта (демонстрация):

   #navlist #navlist li #navlist li, #navlist a #home #home #home a:hover #prev #prev #prev a:hover #next #next #next a:hover  

До или после?

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

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

Организация элементов дизайна

При подготовке файла со спрайтами стоит максимально уплотнить изображения, а если они одинакового размера (например иконки) — создать сетку, благодаря которой упростится использование спрайтов на сайте:

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

Полезные инструменты

Compass — отличный фреймворк, который умеет создавать спрайты из папки с изображениями. Также использует Sass.

Lemonade — инструмент, позволяющий создавать файлы со спрайтами простым добавлением строчки кода в Sass-файлы.

SpriteMe — букмарклет, который умеет генерировать и просматривать использованные на сайте спрайты.

Вот как выглядит рабочий слой букмарклета:

Fireworks CS6 — последняя версия включает функцию генерации спрайтов.

Полезные сервисы

Spritepad — drag-and-drop сервис для создания спрайтов

Sprite Cow — сервис для удобной «нарезки» подготовленного вручную файла со спрайтами

Glue — командная строка для генерации спрайтов

CSS Sprites — еще один генератор, с расширенными настройками

SpriteRight — приложение-генератор для Мака

Источник

CSS Image Sprites

An image sprite is a collection of images put into a single image.

A web page with many images can take a long time to load and generates multiple server requests.

Using image sprites will reduce the number of server requests and save bandwidth.

Image Sprites — Simple Example

Instead of using three separate images, we use this single image («img_navsprites.gif»):

With CSS, we can show just the part of the image we need.

In the following example the CSS specifies which part of the «img_navsprites.gif» image to show:

Example

  • — Only defines a small transparent image because the src attribute cannot be empty. The displayed image will be the background image we specify in CSS
  • width: 46px; height: 44px; — Defines the portion of the image we want to use
  • background: url(img_navsprites.gif) 0 0; — Defines the background image and its position (left 0px, top 0px)

This is the easiest way to use image sprites, now we want to expand it by using links and hover effects.

Image Sprites — Create a Navigation List

We want to use the sprite image («img_navsprites.gif») to create a navigation list.

We will use an HTML list, because it can be a link and also supports a background image:

Example

#navlist li margin: 0;
padding: 0;
list-style: none;
position: absolute;
top: 0;
>

#navlist li, #navlist a height: 44px;
display: block;
>

#home left: 0px;
width: 46px;
background: url(‘img_navsprites.gif’) 0 0;
>

#prev left: 63px;
width: 43px;
background: url(‘img_navsprites.gif’) -47px 0;
>

#next left: 129px;
width: 43px;
background: url(‘img_navsprites.gif’) -91px 0;
>

  • #navlist — position is set to relative to allow absolute positioning inside it
  • #navlist li — margin and padding are set to 0, list-style is removed, and all list items are absolute positioned
  • #navlist li, #navlist a — the height of all the images is 44px

Now start to position and style for each specific part:

  • #home — Positioned all the way to the left, and the width of the image is 46px
  • #home — Defines the background image and its position (left 0px, top 0px)
  • #prev — Positioned 63px to the right (#home width 46px + some extra space between items), and the width is 43px
  • #prev — Defines the background image 47px to the right (#home width 46px + 1px line divider)
  • #next — Positioned 129px to the right (start of #prev is 63px + #prev width 43px + extra space), and the width is 43px
  • #next — Defines the background image 91px to the right (#home width 46px + 1px line divider + #prev width 43px + 1px line divider)

Image Sprites — Hover Effect

Now we want to add a hover effect to our navigation list.

Tip: The :hover selector can be used on all elements, not only on links.

Our new image («img_navsprites_hover.gif») contains three navigation images and three images to use for hover effects:

Because this is one single image, and not six separate files, there will be no loading delay when a user hovers over the image.

We only add three lines of code to add the hover effect:

Example

#home a:hover <
background: url(‘img_navsprites_hover.gif’) 0 -45px;
>

#prev a:hover background: url(‘img_navsprites_hover.gif’) -47px -45px;
>

#next a:hover background: url(‘img_navsprites_hover.gif’) -91px -45px;
>

  • #home a:hover — For all three hover images we specify the same background position, only 45px further down

Источник

Читайте также:  Get element in arraylist in java
Оцените статью