Метод Pixy?

Размышлял о методе подстановки картинок с помощью CSS. Так называемый метод «pixy»(кому пришло в голову такое странное название?) сейчас во всю используется в css-вёрстке вместо картинок. Смысл в том, чтобы в тэг-контейнер поместить альтернативный текст, а сразу за ним пустой тэг. Этот пустой тэг будет играть роль картинки, т. е. с помощью CSS мы накладываем его сверху на текст. Если у бразуера будут отключены картинки, то появится альтернативный текст.

#rss1 {
    position: relative;
    display: block;
    cursor: pointer;
    width: 171px;
    height: 184px;
    text-align: center;
    font: normal 32px/171px arial,sans-serif;
    overflow: hidden;
}
#rss1 span {
    position: absolute;
    top: 0;
    left: 0;
    width: 171px;
    height: 184px;
    background: url(rss.png) no-repeat;
}

RSS

Вот пример:

RSS1

Попробуйте отключить картинки (например, с помощью панели Web developer в Firefox) или скачайте данный пример.

Минус такого способа — нарушение семантики, потому как в контейнере лишний тэг не имеет семантического смысла. Он просто лишний. Мусор. Но другого способа нет. Или пока его не открыли.

Если все браузеры станут вдруг нормально поддерживать селектор :before, а так же свойство content, то большинство перейдёт на такой код:

#rss2 {
    display: block;
    position: relative;
    cursor: pointer;
    width: 171px;
    height: 184px;
    text-align: center;
    font: normal 32px/171px arial,sans-serif;
    overflow: hidden;
}

#rss2:before { /* перед выводом текста вставляем контент */
    content: ' '; /* Вставляем пробел в качестве контента */
    /* остальное всё тоже самое что и для тэга span в первом примере */
    display: block;
    position: absolute;
    top: 0;
    left: 0;
    width: 171px;
    height: 184px;
    background: url(rss.png) no-repeat;
}

RSS

RSS2

Плюс очевиден — семантика чистая. Всё представление вынесено в CSS.

Что значит «нормально поддерживать»? Сами знаете, что такой код не будет поддерживаться в IE, ни в 6, ни в 7. Корректно этот способ работает только в Opera и Safari. В Firefox этот метод глючит — почему-то он не хочет ставить этому блоку абсолютное позиционирование. В итоге альтернативный текст съезжает вниз. Если использовать :after вместо :before, тогда в FF картинка съедет вниз, а текст будет виден. В Opera и Safari опять таки будет всё в порядке.

Додумаете, разовьёте идею, найдёте способ как сделать лучше и кроссбраузерно — сообщите. Буду благодарен.

Дата: 18.12.2007
»
Категории: CSS
Google     

]]> Bea ]]>

Esho mozhno tak! Pomojemu s boljeje krosiwym CSS:

h1#logo{
padding:0;
margin:10px;
width:100px;
height:50px;
background:url(logo.jpg) no-repeat;
border:0;
clear:both}
h1#logo a{
height:50px;
display:block}
h1#logo a b{
display:none}

logo

»

]]> Bea ]]>

ohh on njipokazywajet code

[h1 id="logo"][a href="index.html" title="logo"][b]logo[/b][/a][/h1]

»

]]> Андрей ]]>

Нормальная семантика — когда броузер вместо незагрузившейся картинки нормально показывает её альт (IE справляется). И не надо лишних извращений.

А в данном примере с отключенными картинками в ФФ после скролла пропал текст о_О

»

]]> Dimox ]]>

А нельзя вместо “content: url(px.gif)” использовать запись “content: ‘ ‘”. Тогда бы и прозрачный пиксель не понадобился.

»

]]> Dimox ]]>

Знак вопроса забыл поставить после первого предложения.

»

]]> Никита ]]>

Bea, в вашем примере не показывается альтернативный текст при выключенных картинках.

Андрей, когда картинка вставляется с помощью тэга img — да. А когда картинка вставляется через CSS?
> А в данном примере с отключенными картинками в ФФ после скролла пропал текст о_О
Я написал в посте, что в FF глючит. Не читали?

Dimox, странно, я вроде пробовал до этого и не получалось. А теперь работает. Действительно, так лучше. Спасибо.

»

]]> Steward ]]>

2 Андрей: к сожалению для этого альта нельзя прописать свои стили отображения – а зачастую очень хочется.

Я вообще считаю извращением отключать картинки и скрипты…. но это моё личное мнение :) ))
Да и грузить картинки с помощью css мне тоже жутко не нравится – вот уж где семантики нет, так это здесь.

2 АВТОР: я непонял насчёт некорректного тображения второго варианта в FF – у меня вроде всё нормально.

»

]]> Никита ]]>

Steward, во втором варианте в FF, разве всё в порядке?
Текст показывается при отключенных картинках? У меня текст съезжает вниз.

»

]]> Steward ]]>

2 Никита:
да. лажа :) – у меня вообще во втором варианте текста невидно :) )))

»

]]> Никита ]]>

Ну не видно, потому что стоит overflow: hidden. ))

»

]]> Андрей ]]>

Никита: ой, как-то вообще второй пример пробежал не глядя %) соответственно, глючил первый пример.

Зачем вообще вставлять картинку CSS’ом, пока придумать не могу.

Steward: можно прописать стиль для соответствующей картинки.

»

]]> Никита ]]>

Андрей, Первый пример у меня не глючит нигде.

> Зачем вообще вставлять картинку CSS’ом, пока придумать не могу.
Во-первых, если вставлять картинку через CSS, то можем оградить себя от редактирования HTML. Один раз написали и забыли. С помощью разных CSS стилей можно верстать разный внешний вид, для одного шаблона.
Во-вторых, можно реализовать графическое-меню с эффектом rollover без javascript.
В-третих, мухи должны быть отдельно, котлеты — отдельно. Содержимое документа — в HTML, описание внешнего вида — в CSS.

Ещё много плюсов можно найти, но это основные.

»

]]> Steward ]]>

спасибо.. учтём…
век живи – век учись

»

]]> Андрей ]]>

О, ролловер. Хотя мне понравилось делать (полу)прозрачную картинку и менять под ней фон.

»

]]> Никита ]]>

> Хотя мне понравилось делать (полу)прозрачную картинку и менять под ней фон.
Это старый ненадёжный способ:
1. в IE6 не показывается альтернативный текст,
2. в Опере не сохраняются размеры,
3. Происходит задержка при загрузке картинки при роловере.

»

]]> zigmat ]]>

А кто вообще сейчас, кроме России, может сидеть с опцией не загоузки изображений? ;) Скоро это станет совсем не актуальным. Да и в текстовом браузере сидят или полные Линуксоидные задроты (извеняюсь)… или, больше ни кто :D

»

]]> Никита ]]>

zigmat, я когда с мобилника на сайты захожу отключаю картинки. Зачем мне платить лишнее за gprs-трафик? И таких как я “задротов” немало. ))

Кроме России (судя по статистике пользователей интернет) экономит трафик Белорусия, Украина, Кавказ, центральная и Ближняя Азия, Африка, Латинская Америка, Балканы.

»

]]> xaOz ]]>

А как насчет text-indent: -7000px ?

Заголовок

h1 {
width:100px;
height:50px;
background:url(logo.jpg) no-repeat;
text-indent: -7000px;
}

»

]]> zigmat ]]>

Никита, тут ты прав. Не подумал. Теперь ещё и себе придётся всё так делать :)

P.S. На счёт твоих курсов. Они только во вторник и четверг? :(

»

]]> Никита ]]>

zigmat, с чего ты взял? )) Курсы у меня обычно по понедельникам и средам. ))
xaOz, ну да, текст уйдёт и не будет показываться вообще. Цель была, чтоб при отключенных картинках текст показывался.

»

]]> zigmat ]]>

Просто я звонил по указанному телефону на ИСМе и мне ответили совершенно обратное. Но если всё как ты сказал, я после нового года записываюсь :)

И ещё вопросик, Ие6 и Ие7 должны же понимать цсс одинаково, или я не прав?

»

]]> Никита ]]>

zigmat, по какому телефону ты звонил? Может ты на прямую в ИСМу звонил и тебе сказали по каким дням вечерники учатся? )) Скорей всего. Звони и записывайся по номеру 29632119.

IE6 и IE7 что-то воспринимают одинаково, а что-то поразному. В 7 версии часть существенных багов исправили, правда, часть добавили. )) Но в целом функциональность в 7 версии не расширилась.

»

]]> zigmat ]]>

Хорошо, позвоним :)

Блин, но паддинг и маргин они же должны понимать одинаково :) Или у меня какой то полтергейст, который двигает слой в ие7 не так как надо…

»

]]> akella ]]>

Pixy – это вообще то ник человека придумавшего эту технику, Petr Stanicek (aka -pixy-), все началось отсюда http://wellstyled.com/css-repl.....image.html
;)

just my 2c

»

]]> Никита ]]>

akella, возможно.

»

]]> akella ]]>

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

»

]]> Никита ]]>

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

Разные методы ролловера ведь не называют никакими никами их создателей. CSSPlay столько методов для создания выпадающих меню придумали. Они тоже не называют эти методы своими именами. А тут вдруг такой пафос.

История в любом случае забудется. С поддержкой CSS3 этот метод перестанет быть актуальным.

»

]]> akella ]]>

Ролловеры не называют, нет, однако большая часть методов замены текста на картинки названы именами их создателей – так уж сложилось. Вот самый полный документ где это хорошо видно.

Я не говорил что я уверен =) Просто это факт, такое уж происхождение этого названия. CSS3 это конечно круто, только вот всерьез о нем можно будет говорить лет через 5 минимум. =) Просто не очень приятно видеть, что уже сейчас стали забывать кто, что и как. =(

»

]]> Никита ]]>

Да, без проблем. Я разве против? Называйте как хотите. Просто это смешно. Когда формулу называют именем гениального математика — оно понятно. Человек проделал огромную работу, иследования, расчёты и создал формулу, которую в последствии стали изучать в школе, основываясь на которую другие учёные делали свои открытия и на много-много лет эта формула была основой основ для определённой сферы иследований. А здесь что? Пятилетняя слава верстальщика! Зашибись! :)

»

]]> akella ]]>

Как математик, могу сказать что там, как и в физике, логика именования часто такая же – кто первый сказал, или с кем начали ассоциировать – тем именем и названо. Но я не о том что это мегаважно =) Просто пытался сказать что “странное название” не очень верный взляд на вещи в данном случае, и все.

Взять хоть неравенство Коши, доказать его может любой пятиклассник, особых “применений” в современной науке оно не имеет, не Коши так кто-то другой доказал, тем не менее гордо и “пафосно” именуется его именем

»

]]> Никита ]]>

akella, не верных взглядов не бывает.

»

]]> Seleckis.lv :: журнал Никиты Селецкого » » Градиентный текст с помощью CSS ]]>

[...] весь текст. А наложение происходит уже знакомым вам методом, правда тэг <span> здесь должен уже писаться перед [...]

»

]]> rmaksim ]]>

>>> В Firefox этот метод глючит — почему-то он не хочет ставить этому блоку абсолютное позиционирование.

Firefox как раз таки ведет себя так – как рекомендует спецификация:

12.1 Псевдоэлементы :before и :after
Агенты пользователей должны игнорировать следующие свойства с псевдоэлементами :before и :after: ‘position’, ‘float’, свойства списков и свойства таблиц.

так что способ с :before и :after со свойством position изначально неверен, и то, что он где-то работает сейчас – не факт что будет работать и потом…
строки position: absolute; top: 0; left: 0; – лишние

но… способ все же работает в firefox (и position он таки игнорирует), просто этот блок вставляется перед текстом и просто вытесняет текст и его не видно благодаря overflow: hidden;

»

]]> Никита ]]>

rmaksim, а вот это я пропустил. Спасибо за комментарий, буду знать. Хотя по-моему очень странное правило, не понятно зачем игнорировать эти свойства.

»

]]> plx ]]>

а отрицательный text-indent не дано поставить элементу… Новички..

»

]]> Никита ]]>

plx, отрицательный text-indent дано поставить элементу, новичок… :)

»

Напишите комментарий