• О блоге

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

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

    Уроки 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. Вот это то что нужно !!!

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


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

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