CSS: использование спрайтов изображений с псевдо-классами css: before и: after
Я никогда раньше этого не пробовал. Я создал спрайт изображения, содержащий два значка. Каждый значок имеет ширину 26 пикселей и высоту. Таким образом, спрайт 26x52px.
У меня есть элемент, который находится либо в div.something, либо в div.anything. В зависимости от того, в каком классе я хочу добавить угловую крышку влево или вправо.
Итак, поэтому я позиционирую относительный элемент .element, применяя псевдографический код :before
к img и устанавливаю его абсолютным с высотой и шириной 26 пикселей, поэтому подходит только один значок спрайта. Я также применяю "переполнение": hidden ", чтобы скрыть второй значок спрайта.
.element {
position:relative;
}
.element:before{
content: url("../images/sprite.png");
position: absolute;
height:26px;
width:26px;
overflow:hidden;
}
.something .element:before {
top: -2px;
left: -2px;
}
anything .element:before {
top: -28px;
right: -2px;
}
Это отлично работает для левого угла, где я использую первую верхнюю иконку в спрайте.
Однако теперь мне интересно, как я могу показать только вторую икону в спрайте для "ничего.элемент".
Итак, фактически "маска" должна быть расположена на -2px, -2px, но спрайт img внутри должен начинаться с -26px, поэтому отображается второй значок.
Возможно ли это с помощью CSS, как я это делаю прямо сейчас?
Ответы
Ответ 1
Не используйте content
для вставки изображения, так как вы не можете изменить его положение. Вместо этого установите содержимое " "
и добавьте спрайт в качестве фонового изображения. Затем вы можете использовать свойство background-position
для перемещения спрайта в правильное положение. В противном случае ваш пример должен работать нормально.
Рабочая демонстрация:
http://jsfiddle.net/RvRxY/1/
Ответ 2
Поддержка: до и: после псевдоэлементов на тегах img ограничена, если вообще существует в большинстве браузеров.
Лучшим решением было бы разместить ваш img внутри div, а затем применить класс к фактическому div, а не к img.
У вас почти правильное использование псевдоэлемента. Вы можете попробовать:
.somediv { position:relative;}
.somediv:before {
position: absolute;
content: '';
height: 26px;
width: 26px;
top: 0;
}
.somediv.foo1:before {
background: url("../images/sprite.png") no-repeat -2px -2px;
left: 0;
}
.somediv.foo2:before {
background: url("../images/sprite.png") no-repeat -2px -28px;
right: 0;
}
Используйте фон:; свойство, а не контент:; чтобы вы могли расположить спрайт внутри: перед псевдоэлементом.
левый:; правильно:; и top:; должен использоваться для абсолютного позиционирования псевдоэлемента относительно его родителя (.somediv).
Размещение границы 1px вокруг вашего псевдоэлемента поможет вам понять различное позиционирование:)