• О блоге

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

    К его созданию подтолкнуло желание создать место для общения и обмена опытом в изучении компьютерной графики и дизайна.

    Уроки Blender 3d   Текстуры   Уроки Photoshop   3d max   html/css

 
 
В процессе
 
 

Опанасенко Сергей (sergey@opanasenko.com.ua / sadesign)
Спрайты CSS без фонового изображения
6 февраля 2009

pre1

Хочу поделиться небольшим советом в верстке.

Итак, если вы занимаетесь версткой, то наверное уже знакомы с технологией CSS Sprites, поэтому объяснять, что это такое я не буду. В двух словах это технология которая позволяет сверстать, например, вот такое меню:

при этом используя только один файл, содержащий 2 изображения иконки:

Преимущества всем известны, а теперь о недостатках такого метода:

  1. Невозможно прописать alt-текст к изображению.
  2. CSS Spriting и IE6 PNG — несовместимы.
  3. Если нужно будет распечатать страницу, то такие изображение напечатаны не будут.
  4. Семантически плохо, если в CSS спрятаны не семантические изображения.
  5. Невозможно подчеркнуть элемент бордером (border) не подчеркивая при этом саму картинку.

Всегда проще объяснить на примере, поэтому вот и он:

Для примера взял несколько элементов меню главной страницы своего проекта, реализованную технологией CSS Sprites:

HTML:

<ul class=«links»>
<li><a href=«#» class=«right»>Правила игры</a></li>
<li><a href=«#» class=«hist»>История игры</a></li>
</ul>

CSS:

.links {
list-style-type:none;
position:relative;
}
.links li {
float:left;
position:relative;
}
.links a {
color:#E02100;
display:block;
font-size:11px;
height:16px;
letter-spacing:1px;
line-height:16px;
margin:0 5px;
padding:0 0 0 20px;
}
.links li a.right {
background:transparent url(images/link.png) no-repeat scroll 0 0;
}
.links li a.hist {
background:transparent url(images/link.png) no-repeat scroll 0 -16px;
}

Отправляем на печать и получаем:

А хотелось бы так:

Теперь пробуем другой подход, ради которого я и написал этот совет:

HTML:

Внутри тега A я добавляю по тегу IMG, которому прописываю необходимые атрибуты:

<ul class=«links»>
<li><a href=«#» class=«right»><img src=«images/link.png» alt=«Правила игры» title=«Правила игры»/>Правила игры</a></li>
<li><a href=«#» class=«hist»><img src=«images/link.png» alt=«История игры» title=«История игры»/>История игры</a></li>
</ul>

CSS:

.links {
list-style-type:none;
position:relative;
font-family:verdana;
}
.links li {
float:left;
position:relative;
}
.links a {
color:#E02100;
display:block;
font-size:11px;
height:16px;
letter-spacing:1px;
line-height:16px;
margin:0 5px 0 22px;
padding:0px;
border-bottom:1px dashed #E02100;
text-decoration:none;
}
.links li a img {
border:none; /* убераем бордюр */
margin-left:-18px; /* сдвигаем относительно ссылки */
position: absolute;
}
.links li a.right img {
clip: rect(0px 16px 16px 0px); /* вырезаем нужный кусочек */
}
.links li a.hist img {
clip: rect(16px 16px 32px 0px);
margin-top:-16px; /* смещаем т.к. исходная картинка вертикальная */
}

В итоге получаем как в браузере так и в предварительном просмотре при печати, такой результат:

Теперь у пиктограммы и подсказка есть, и альт-текст, и красиво распечатывается на бумагу. Также ссылка подчеркнута теперь отдельно.

Ну вот и все. Думаю такой метод пригодится, задачи ведь бывают разные.

Автор статьи: divbyzero

              ,





Один комментарий на “Спрайты CSS без фонового изображения”

  1. Вот это то что нужно !!!

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


    Перевод книги


    Скоро на сайте RenderMarket перевод книги Алекса Галузина
    «Создание игрового уровня за 11 дней»

В другом формате

Введите email для автоматического получения новых статей на почту:

Друзья и партнеры

sadesign — создание и поддержка
RenderStuff, бесплатная библиотека 3d полезностей
Умный блог
Система Orphus