CSS2 řešení: efektní stylování odkazujícího obrázku
Představte si případ, kdy miniatura obrázku odkazuje na svou vlastní zvětšeninu. Vy chcete dát nějak najevo, že klikněte pro zvětšení, jenže nikoli textovm sdělením, jak v dnešní době bývá obvyklé, nýbrž symbolickým umístěním ikony lupy přes miniaturu. Nebo si představte jiný pěkný příklad, kdy je vhodné obrázek překrývat jiným obrázkem.
Než ovšem budete číst dál, vězte, že ačkoli jde o CSS 2.1 kód…
zdá se, že se specifickou konstrukcí img:after se dnes dokáže
vypořádat leda
nejnovější Opera. Možná je na vině ta podezřelá poznámka ve
specifikaci:
Note. This specification does not fully define the interaction of :before and :after with replaced elements (such as IMG in HTML). This will be defined in more detail in a future specification.
Co by měl být výsledek

Co by měl být kód
<a href="photo.jpg"><img src="t_photo.jpg" alt="" /></a>
a img {
position:relative;}
a img:after {
content:'';
position:absolute; right:0; bottom:0;
width:32px; height:32px;
background:url(zoom.png) no-repeat;}
Uzávěr
Nevěděl jsem, že záleží na jaký element se aplikuje pseudotřída.
Nevěděl jsem, že ani ta notoricky známá konstrukce img:after
{content: attr(alt);} vlastně funguje jen… teoreticky.
A ještě jedna poznámka pro sebe za mnoho a mnoho let: Petře, až budeš
tohle chtít hodit na nějakej web, ještě by bylo dobré atributově
vyselektovat jen ty odkazy, které směřují na obrázek ;). Jo a ještě jedno
PS: i když například Firefox jednou bude chápat img:after,
není vůbec jisté, že toto řešení (kód výše) bude skutečně
funkční.
Aneb není nad to si od práce odpočinout u pěkného CSS oříšku!
Komentáře (16)
k formuláři
RSS kanál komentářů
21.1. 2008 — 9:38
Osobně to řeším prázdným elementem.. potřebuji totiž řešení DNES, nikoliv za 5 let :-)
21.1. 2008 — 9:39
(pro méně CSSzručné – do odkazu dáte prázdný
SPAN, čiI, který nastylujete jako tena img:after)…21.1. 2008 — 10:16
A co takto: dát obrázek na pozadí elementu A a pro element img nadefinovat záporný z-index: –1 + position: relative (a ještě bude asi potřeba přidat position: relative a z-index: 1 pro rodiče obou těchto prvků, pokud je pod ním nějaké pozadí). Teď jsem to zkusil a zdá se, že to funguje (FF, Opera, IE6–7).
21.1. 2008 — 10:53
Měl jsem pocit, že tohle dřív ve FF fungovalo, zajímavé. Funguje mi řešení, které je sice k ničemu, protože se musí v css nastavit velikost obrázku, ale je zajímavé, že si FF vůbec neporadí s pozicí či z-indexem generovaného obsahu. Tu opacitu tam mám proto abych viděl, že to tam je, ale pod tím obrázkem :-(
21.1. 2008 — 11:29
[1] Filosof:, [3] karf: – a jak vyřešíš, aby odkaz rozměrově kopíroval obrázek? nebo alespoň aby se překrývaly počáteční body?
21.1. 2008 — 13:00
[5] Kahi: U mého postupu není potřeba nic takového řešit, pouze obrázku dát position: relative a z-index: –1, což nemá vliv na okolní tok, takže to áčko se normálně obrázku přizpůsobí, pokud bude inline.
21.1. 2008 — 14:42
[1] Filosof: Řeším to stejně… akorát, že si ještě nechávám prázdný element přidávat pomocí javascriptu – pak stačí uživatelům editoru redakčního systému pouze nastavit styl pro odkaz třeba jako „miniatura“.
21.1. 2008 — 17:00
[6] karf: – už mi to asi došlo :-).
21.1. 2008 — 19:03
Jé to je fešné, děkuji, využiji.
25.1. 2008 — 2:33
[2] Filosof:, asi jsem dost natvrdlej, ale bud nevim, kam ten prazdny span dat, nebo to spatne styluju, mohl by nekdo doplnit kod?
Reseni s pozadim odkazu se mi nelibi, chci mit ten img v kodu.
25.1. 2008 — 2:35
Boze, tenhle komentarovy system je sileny. Zaprve se to nekesuje, takze pote, co jsem si klikl na Texy, tak jsem se dostal nekam uplne do pryc a musel jsem to psat znova.
A za druhe to takhle uplne nesmyslne oreze tagy, misto toho, aby to prevedlo na entity, takze:
div – a href=velky.jpg – img src=maly.jpg – /a – /div
25.1. 2008 — 12:08
[10] PJ: s tím spanem to vypadá nějak takto:
a
ad komentáře – něco s tím udělám
25.1. 2008 — 23:11
[12] Kahi: Diky moc, a promin mi ty zmatky, co jsem v noci vyvadel. :)
27.1. 2008 — 18:24
Ještě by zasloužilo reakci:
[1] Filosof: napsal:
reaguji: to je možná funkční, ale samo o sobě ne plnohodnotné řešení. Ne vždy má kodér kontrolu nad obsahem. Span navíc je něco navíc. Čili tvé řešení samo o sobě (třeba bez spanu generovaného pomocí JS) není plnohodnotné. Mé řešení je plnohodnotné, zato jen teoreticky :-).
[3] karf: napsal:
reaguji: nezkoušel jsem, ale jestli to funguje spolehlivě, může to být lepší řešení než Filosofovo (se spanem navíc).
17.2. 2008 — 10:34
Osobně mi připadá ideální Filosofovo řešení s prázdým spamem, který je ale dobré přidávat JavaScriptem pro obrázky, které vedou na zvětšeninu. Napříiklad pomocí jQuery href=„http://jquery.com/“ rel=„nofollow“>http://jquery.com/ je to na pár řádků.
Řeším ale jiné problémy: Pokud chci mít lupu v pravém horním rohu, nenašel jsem jiné řešení, než formátovat odkaz jako blokový element. Stýská se mi po inline-block.
Druhý problém a zároveň otázka na tebe =) – jak řešíš caption plovoucích obrázků? Jak udělat, aby delší caption (v tvém případě element ) s delším textem nevytékalo z pod obrázku. Vidím, že nastavuješ, stejně jako já, šířku obalujícího elementu (figure-right). Jediné efektivní řešení, abych šířku nemusel ručně psát, mi připadá opět JavaScript.
17.2. 2008 — 12:30
[15] Radek Matěj: Popisky plovoucích obrázků se mi dělají snadno. O šířku bloků se nestarám, to vypočítává Texy. Já jen napíšu
[* jak-jsem-videl-slony/slon-c14.jpg >] *** Tak tenhle se mi fakt líbilPřidat komentář