FIR – Te is elkezdheted
Azaz hogyan értsük meg a Fahrner Image Replacement (azt jelenti, hogy Fahrner féle képcserélős móka) működését?
Kezdjük ott, hogy megmondjuk, hogy mi is az a Fahrner Image Replacement (FIR). A FIR az egy olyan CSS-es trükk, aminek segítségével egy tetszőleges szövegrészletet képpel kitakarunk. Ennek a technológiának köszönhetően egyszerűen és hatékonyan oldhatunk meg baromi sok accessibility-jellegű problémát egy oldalon (olvass utána, nem nehéz).
Mi pedig meg akarjuk érteni a működését. Hiszen a működés elve nélkül csak buta robot módjára alkalmazzuk, ha alkalmazzuk, plusz ha valami gebasz van, akkor borul minden.
Miből áll egy FIR-es megoldás?
A HTML oldalon:
- egy konténer elemből
- egy, a konténeren belül található, üres, maszkoló elemből
- szöveges infóból
- egy maszkoló képből
Azaz ez úgy néz ki, hogy pl:
<div><span></span>almamáter</div>
És a fentiek alapján mind tudjuk, hogy mi micsoda, ugye? (súgó: <div> – konténer elem, <span> – konténeren belüli üres elem, „almamáter” – a szöveges infó.)
Nomármost. Ez így önmagában nem csinál semmit, nem látszik belőle semmi, ki lesz írva, hogy almamáter.
Ezért kell ide a CSS, ami majd segít nekünk.
Ja igen, van példánk is, ami a végeredéményt mutatja.
De ahhoz, hogy tudjuk, hogy mik a következő lépések, tudnunk kell, hogy hogyan is működik a FIR (ezért írodott ez a post). A maszkoló kép méreteivel azonos méretű konténer elem fölé pozicionálunk egy, konténeren belüli üres elemet, ami kitakarja a konténer elemben található szöveget. Node hogyan kerül a belső elem a szöveges rész felé? Nagyon egyszerű: a konténer elem pozicionálása relatív lesz, míg a belső üres elemé abszolút, ami egy relatív pozicionálású elemhez képest pozicionálódik abszolút, tehát akármi történik, a belső elem koordinátái mindig az őt tartalmazó elem szerint koordinátáihoz képest lesznek megjelenítve.
Elsőre ez baromi zavarosnak hangzik, de a valóságban közel sem az.
Képzeld el az univerzumot, benne egy kaminot és a kamionon belül egy dobozt. Ha a dobozt szeretnéd a kamion konténerének egyik sarkába pakolni, akkor a koordináták megadására két mód lehetséges: Vagy az univerzumhoz képest, vagy a kamionhoz képest adod meg a pozicióit. Amennyiben az univerzumhoz képest igazítasz, akkor abszolút pozicionálsz, azzal a veszéllyel, hogy ha a kamion arrébb megy, akkor a doboz ott fog lógni az univerzum közepén. Illetve lehet a kamionhoz képest pozicionálni, így akármerre indul a kamion az univerzumban, a doboz mindig abban a koordinátában fog lenne a kamionban, ahova mondtuk, hogy legyen. Ehhez először meg kell mondani a kamionnak, hogy, most ő mondja a frankót és az ő koordinátáit vesszük alapul. Azaz: megmondjuk a kamionnak, hogy akkor az ő poziconálása akkor most relatív, míg a doboznak meg azt mondjuk, hogy az ő poziciója abszolút. Mivel a doboz buta, ezért ha körülnéz csak azt fogja látni, hogy a kamion adja a koordinátákat és ő ezek szerint fog igazodni.
Ugye, hogy nem érted. ;]
Jajj igen, arra nem válaszoltam, hogy akkor mégis, hogyan takarja ki az abszolút pozicionált belső üres elem a képpel a szöveges tartalmat. Egyszerű. A belső üres elemnek ugyanakkora méreteket adunk, mint a konténer elemnek, illetve egy háttérképet, ami a maszkoló kép lesz. És mivel abszolút pozicionál a konténer elemhez képest, ezért ő kerül legfölülre, mert az abszolút pozicionált elemek rajzolódnak meg legutoljára, így kitakarják a szöveget, jól.
Lássuk, hogyan néz ki ez bekódolva, először a konténer elemre vonatkoztatva (a példának adatait figyelembe véve):
div
{
width: 154px; // ilyen széles a maszkoló kép
height: 34px; // ilyen magas a maszkoló kép
position: relative; // ő a kamion, őhozzá igazítunk.
overflow: hidden; // mivel különböző csiribiri böngészőkön lehet a szövegméretet állítani és mivel félő, hogy azt nagyra véve kilógna a lóláb betűszár, ezért megmondjuk, hogy a szélességben és magasságban megadottaknál a tartalom semmiképp se legyen nagyobb, vágódjon le, tűnjön el, huss.
}
És ebből még mindig nem látszik semmi.
Mert a belső üres elemnek még nem is mondtunk semmit. Tegyük hát meg!
span
{
width: 100%; // legyen olyan széles mint amekkora az őt tartalmazó elem
height: 100%; // és legyen olyan magas is
position: absolute; // a koordinátákat az őt tartalmazó elem szerint számolja (alapértelmezettként a 0;0-s koordinátába)
background-image: url(maszk.png); // kapjon háttérképet, amivel kitakarhatjuk a szöveget
background-position: 0 0; // a háttérképet opcionálisan igazíthatjuk is ha úgy tetszik
background-repeat: no-repeat // ne ismétlédőjön a háttérkép, ha kifutna (nem fog)
}
És ezek után elméletileg működni látszik.
És örülünk, mert talán kicsivel közelebb jutottunk a FIR működésének megértéshez!
Megjegyzés: Tudom, béna meg minden, de: Ezt ugye nem csak div-vel meg span-nal lehet eljátszani, hanem mondjuk a-val is, feltéve hogy ügyelünk rá, hogy CSS-ben megmondjuk neki, hogy display: block, mert inline elemként nem nagyon fog a FIR működni nála. Ilyesmi, na. A lényeg, hogy nem a tag, hanem a formázás számít. Lehet az listaelem, vagy strongozás is, na. na!
Megjegyzés #2: Gondoltam, hogy valamelyik sarlatán felveti a text-indentes mókát (az abból áll, hogy egy szöveg tartalmazó elemnek méretet és hátteret adnunk, az overflowját hiddenre tesszük és a szöveget egy perverz mértékű text-indenttel (teszemazt 432432432432 px) kvázi kitolja az elem látható területéből). Ez ugye egy hatékony módszer, mert nem kell plusz egy üres tag és nem kell bénázni a pozicionálásokkal, viszont ha az operauser kikapcsolja a gébetűvel a képeket, akkor ő nem fog látni semmit a szövegekből, ergo ez a megoldás nem használható és rossz. Olyan megoldás kell, aminek mindenki örül.
Popularity: 5% [?]

2005. November 28., Monday 22:19
Ez aranyos meg biztos hasznos, de mondanál egy példát gyakorlati használatra?
2005. November 28., Monday 22:23
nem gondoltam utána, de ideférne még, hogy miért nem z-index.
2005. November 28., Monday 22:26
mert tökfölösleges, ne legyél buta
2005. November 28., Monday 22:39
Torn: nagyon tetszik ez a post, örülök, hogy valaki ilyenekkel is foglalkozik! :) Gratula!
2005. November 28., Monday 23:36
Most azt is megtudtam, hogy milyen szep neve van. Fahrner Image Replacement, hmm.. :)
2005. November 29., Tuesday 1:05
első ránézésre azt hittem, a sIFR-t magyarázod, aztán rájöttem, hogy butus vagyok és már késő van és jajjajj.
a leírás amúgy jó, grat torn, sztm a kezdők 1-2 nekifutás után megérthetik a lényegét (ha akarják)
lesznek még ilyen tutorialok, vagy ez csak ilyen hirtelen felindulásból született? :)
2005. November 29., Tuesday 1:06
ja és még egy: background-ot miért nem összevonva írod le? elegánsabb, bár kétségkívül a 3 tulajdonságra bontás egyszerűbb a tanulni vágyóknak..
2005. November 29., Tuesday 3:21
http://www.mezzoblue.com/tests/revised-image-replacement/
2005. November 29., Tuesday 9:42
Malarkey Image Replacement – én ezt szeretem
Single Image Multi Replacement – nagyon okos
2005. November 29., Tuesday 9:59
ilyen single image multi replacement van a cica menüjében is meg 432432432 szájtban amit csináltam ;]
2005. November 29., Tuesday 10:13
még több ilyen postot akarok… komolyan már kezdtem azt hinni, hogy a téma kihalt teljesen innen
2005. November 29., Tuesday 10:14
Igen, ezt most meg is néztem on the spot :)
Viszont a MIR akkor is szimpatikusabb, mint a FIR, ráadásul az aktuális böngészőkben jól működik, az IE5 meg az aktuális böngészőstatisztika szerint olyan 9%-ot vág ki átlagosan a böngészőtortából, de lehet, hogy még ez alatt is működik.
2005. November 29., Tuesday 10:19
Sasi, értem viszont itt most kurvára nem arról van szó, hogy kinek mi a kedvence, mmkay?
2005. November 29., Tuesday 11:24
Szerintem rohadtul elbonyolítottad. Mármint nem a leírást, hanem, hogy hogy oldod meg a kérdést. Egyszerűen , amiben vannak a tag elemek, amiket formázni akarsz, annak a divnek az alaptulajdonságait állítod rá aautomatice, és és, más meg nincs is benne a menu-s div-ekben. Szal kész. Hahn? Formázva. Kész. Aztán, hogy inline, overflow meg hasonlók, azok is elférnek egy helyen.
2005. November 29., Tuesday 11:26
Vagy Te minden betűt más színűre szeretnél?
2005. November 29., Tuesday 11:56
és akkor még azt, hogy hogyan lesz váltokép mouseoverre -úgy látom azt most nem tárgyaltad :) ügyesen a-val, meg hoverral, meg background-positionnal.
2005. November 29., Tuesday 12:02
nvk:
ez egy tutorial kezdőknek, nem a leghatékonyabb, hanem a jól megérthető megoldás a cél.
2005. November 29., Tuesday 13:49
rudo:
Értsük meg a “nem a leghatékonyabb” módszert? Mondjuk valakinek biztos jó.
2005. November 29., Tuesday 14:01
nvk:
igen! igy működik a világ. ld. bicikli pótkerékkel :)
2005. November 29., Tuesday 15:45
flesses jávaszkriptes, no-fless esetén képes php-s, fallbackes okosmegoldás a leghatékonyabb, mégse azzal kezdte Torn ;]]
2005. November 29., Tuesday 16:28
mondjuk speciel én nem is értem nvk problémáját, de kifejezetten zavar
a csomókeresés a kákán… mikor ez a cikk magyar viszonylatban még akkor
is érték lenne, ha torn kihagyta volna a magánhangzókat teszemazt.
2005. November 29., Tuesday 17:48
Jó :P (érti)
2005. November 29., Tuesday 21:05
szevasztok,
én kipróbáltam és működik és baszott jó! Holnap kipróbálom linkkel is…
[LELKES]
2005. November 29., Tuesday 23:57
Egy gyakorlati felhasználása a dolognak (az 5. lépés környékén), ha valaki nem hinne benne: http://www.hszk.bme.hu/~hj130/css/list_menu/index_fomenu/
Didaktika: Univerzum és a konténeres kamion :), főleg, hogy most olvastam az Útikaluzt!
2005. December 3., Saturday 15:36
ja, merthogy absolute kell pozícionálni (a z-indexet). ugye ezért?
2007. August 13., Monday 12:21
Annyi helyen hallottam emlegetni a FIR technikát, de enm tudtam mi is az. Köszönet a leírásért.
Viszont nem világos miért is van rá szükség. Ha képeket akarok az oldalon, miért kell egy szöveget letakarni vele?? Miért nem lehet a képet egyből kirakni, ilyen hókusz-pókusz nélkül? A képnek is van title tulajdonsága, igy aki nem tölti le a képet, az ugyanúgy látja a szöveget.
Szóval miért is kell ez a FIR?
2007. August 13., Monday 13:20
Akron: Pl. itt a Cloneshiten a menu FIR-el van megcsinalva, igy nem baszunk ki azokkal akik a kepek megjeleniteset kikapcsoljak vagy vakok es unjak hogy bemondja a gep, hogy “link, kep, felirat: menupontneve”. Igy mindenkinek az jelenik meg ami kell.
Egyszerubben: FIR-rel csak a kepeknek kell IMG tag, ami dizajnelem, annak nem.
2007. October 13., Saturday 13:03
Halika mindenki! Ez a fir dolog tök jó és használnám, de hogyan tudom linkelni a képeket ha menübe szeretném berakni őket?
nem találtam angol anyagot..
Köszke