Seleckis’ method vs Pixy’s method
Честное слово, пытался найти и убедить себя в том, что этот метод уже существует. Не нашёл. Исправьте меня если я не прав.
Pixy’s method отображение картинок с надписями заключался в том, чтобы внутрь блока с текстом поместить пустой <span>, и вставить картинку как фон для этого span-а. Причём, для того чтобы текст показывался в случае если картинки отключены, необходимо span поместить поверх текста.
В методе Pixy, для того чтобы <span> с картинкой налез на текст используется абсолютное позиционирование. В таких условиях кнопка не может находиться в строке, она может существовать только как блочный элемент. Почему? Потому что Firefox 2 не поддерживает свойство «display: inline-block». Для отображения блока в строке в Firefox-е используется проприетарное свойство «display: -moz-inline-box» или «display: -moz-inline-stack». Но в таком случае браузер не совсем адекватно позиционирует помещённые внутрь элементы. В частности некорректно работает абсолютное позиционирование.
Задачи, с которыми я сталкивался в вёрстке, требуют гораздо более эффективного решения. Вот эти задачи на примере создания ссылки-кнопки:
- Ссылка должна быть «инлайновая», т. е. чтобы можно было поместить в строке.
- При отключенных картинках в браузере вместо кнопки должна быть надпись-ссылка.
- У кнопки должен работать «ховер» — при наведении мышкой, картинка должна меняться.
Метод Селецкого (Seleckis’ Method)
Фактически тот же Pixy’s method, только:
- используется строчный блок (inline-block),
- <span> помещается не после текста, а перед,
- не <span> налезает на текст, а текст подлезает под <span>.
Ну а в качестве реализации «ховера» выступает обычный CSS-спрайт.
Итак HTML:
Seleckis
CSS:
.seleckis {
/* только для FF2 */
display: -moz-inline-box;
-moz-box-orient: vertical;
/* Для остальных */
display: inline-block;
line-height: 20px;
text-align: center;
}
.seleckis span {
display: block;
position: relative;
margin-bottom: -20px;
}
.seleckis,
.seleckis span {
height: 20px;
width: 74px;
background-image: url(seleckis.gif) no-repeat top left;
}
a.seleckis:hover,
a.seleckis:hover span {
background-position: bottom left;
}
Как видите, в этом коде сам блок становится строчно-блочным, а для FF2 срабатывает свойство «-moz-inline-box», что придаёт ссылке фактически такие же свойства. «-moz-box-orient: vertical» понадобится в том случае, если внутри блока вам нужно поместить содержимое в несколько строк.
Также, хочу отметить, что для элемента мы определяем относительное позиционирование и добавляем отрицательный нижний отступ размером с высоту кнопки, чтобы текст «подлез» под <span> с картинкой. Кстати, картинка спрайта прописывается как ссылке, так и спану. Мало ли что…
Если будут баги, пишите попробуем решить. А так, в моём случае работает в Internet Explorer 6, 7 и 8, Firefox 2 и 3, Opera, Safari, Chrome.





]]>Артём Курапов]]>Несемантично и пустой span.. некрасиво. А собственно зачем вообще может понадобится кнопку ставить внутри текста? Помоему не очень юзабельно.
»]]>Никита]]>Про семантику ты рассказывай рабочей группе HTML 5
Речь идёт не о том, чтобы напрямую в какой-то большой текст поставить кнопку (это же для примера), а очень часто рядом с кнопками пишут какой-то текст или несколько кнопок или иконок идут на одной линии. Всё делать плавающим, не всегда удобно.
И вообще, речь не о том, где это применить, а как это сделать. Если возникнет такая ситуация когда это будет необходимо, то можно воспользоваться, но не наоборот.
»]]>deerua]]>Как бы кнопка, посмотреть “демо”, была бы намного предпочтительнее
) нежели “скачать”
Интересный пример, действительно, но я думаю юзверей с отключенной графикой, сведено к нулю
»]]>Никита]]>deerua, мобильные устройства?
»]]>Александр]]>А обратную задачу как решить? Когда надо поверх картинки разместить форматированный текст и пиктограмму. Типа водяных знаков. Одинаково во всех основных броузерах и, чтоб распечатывалсь.
Спасибо за наводки.
»]]>Никита]]>Александр, ну это-то гораздо проще. Просто поставить картинку как фон элемента и внутри написать текст. <span> в этом случае не нужен.
»]]>40a]]>Разве принципиально — « помещается не после текста, а перед»?
»Если поставить после текста и .seleckis span {margin-top:-20px;}, то результат тот же.
]]>40a]]>Зажевало <span>
»]]>Никита]]>Не принципиально. Принципиален подход использования inline-block и position: relative
»