псевдокласс :target

недавно с удивлением обнаружил, что :target нормально работает во всех трёх браузерах. Только вместо <a name="xxx"> нужно ссылаться на id элемента. Особенно интересно сочетать это с техникой yellow fade, причём всё можно сделать на чистом css. Идея в том, чтобы ставить фоном у целевого элемента анимированный незацикленный гиф. Кстати, первым это описал Brian Suda на Think Vitamin.

:target { background-image: url('yellow-fade.gif'); }

Правда, как обычно, пришлось выдавать гуманитарную помощь обозревателю, причём он даже сопротивлялся, но в итоге всё закончилось хорошо. Проблема возникла из-за известной «фичи» ИЕ, когда document.getElementById ищет не только по id, но ещё и по name. А поскольку мы любим graceful degradation, то для старичков и параноиков нужно параллельно с id="xxx" иметь еще и якорь <a name="xxx", который мешается при поиске целевого элемента. Но банальное размещение якоря внутри элемента, а не перед ним, решает проблему.

var target, previous;
document.observe('click', function(event){
    var element = event.element(),
        href = element.readAttribute('href');

    if (!href || !href.startsWith('#')) return;

    previous && previous.removeClassName('pseudo-class-target');

    target = $(href.substring(1)); 
    if (!target) return;

    target.addClassName('pseudo-class-target');
    previous = target;
});

конечно, неплохо бы ещё подсвечивать цель при переходе по ссылке с внешнего документа, но это сойдёт за домашнее задание : )

Артемий Трегубенко,
, , ,

comments powered by Disqus