Autor | Zpráva | ||
---|---|---|---|
Peta Profil * |
#1 · Zasláno: 18. 3. 2005, 13:05:24
Ahoj
Napadlo mne, jestli by sel udelat skript, ktery pro kazdy obrazek v class=galerie zobrazi obsah ALT do praveho dolniho rohu obrazku. Zrejme by to mozna slo pomoci CSS behaviour a pozicovanim. Jenom teda img je neparovy, nevim, co to bude delat, kdyz pouziji id.innerhtml. (Aby text nebyl delsi by jsem zajistil poctem pismenek. Velikost pisma bych dal na pixely.) Nema nebo nevidel nekdo nekde neco podobne? |
||
Leo Profil |
#2 · Zasláno: 18. 3. 2005, 13:12:42
Zakladni problem je to umisteni napisu, img opravdu nema innerHTML, muselo by se to navazat na nejaky vyssi system souradnic - pokud by napriklad poloha obrazku byla znama vuci nejakemu divu tak je vyhrano, Leo
|
||
Peta Profil * |
#3 · Zasláno: 18. 3. 2005, 13:21:27
Leo: Chapu, toz to se mi prave nechtelo davat to do divu.
Cela galerie vypada ted asi takto a krasne na tom je, ze bez CSS se to zobrazi stejne: .galerie2 {margin:1em;background:#FFFFCC;border:solid 2px #DAA700;padding:6px;} .galerie2 img {margin:3px;background:#FFFFFF;border:solid 1px #DAA700} .galerie2 h3 {margin:0} <div class="galerie2"> <h3><a name="nazev">Nadpis</a></h3> <img alt="" src="obr.gif" height="100" width="100" /> <img alt="" src="obr.gif" height="100" width="100" /> <img alt="" src="obr.gif" height="100" width="100" /> <img alt="" src="obr.gif" height="100" width="100" /> </div> A prave, kdyz tam dam divy, tak uz tam musim dat floatovani. A ten popisek by se tam celkem hodil. Videl jsem zobrazovat title na hover. Myslis, ze kdybych udelal skript, kteri priradi title, dal by se ten title vysvitit na stalo na pozici v obrazku? |
||
Leo Profil |
#4 · Zasláno: 18. 3. 2005, 13:24:55
No da se umistit ten popisek vuci kurzoru mysi, ale vy potrebujete vuci obrazku. Pokud nechcete pouzit div kvuli tomu, aby se to samo radilo do radku tak co treba span? :-) Leo
|
||
Peta Profil * |
#5 · Zasláno: 18. 3. 2005, 13:26:56
potom mam druhou konskou galerii, kde obrazek vypada asi takto:
<div><img alt="text" src="obr.gif" height="100" width="100" /><u><b>Variant 09</b>buk</u></div> kde, b,u je display:block Jenze kdyz zhasnes CSS, tak to vypada nedobre a i pri zalomeni nic moc. S tim title a alt by to bylo bezva, protoze bez css a js by zbyly pouze obrazky, coz by neva. Ale uz by se tam divne nezalamoval text. Dalsi konska moznost je samo tabulka, ale to neni zrovna nejlepsi... |
||
Peta Profil * |
#6 · Zasláno: 18. 3. 2005, 13:28:50
Leo: Hm, to je vlastne fakt. Soupnout img do spanu a popisek tam pridat pomoci JS. Tak ja sem napisi pak reseni :)
|
||
Leo Profil |
#7 · Zasláno: 18. 3. 2005, 13:30:51
Ten span by mel obepnout primo obrazek, na span navesite onmouseover a onmouseout, ktery udela tu vec, ze se koukne jestli je v tom spanu img, pokud ano, nacte jeho alt, title, width a height, a zobrazi to v systemu souradnic toho spanu, akorat musi mit position: relative, Leo
|
||
Peta Profil * |
#8 · Zasláno: 18. 3. 2005, 13:43:17
Leo: Jasne, neni problem. Ale ja to potrebuji trvale pro vsechny obrazky v galerii ne jen on-mouse-over :) Ale ja uz si poradim, dik. Jestli ten span skutecne obklopi obrazek a ne jen radek. Ale i kdyby, neni problem pomoci css ho dat block, stanovit min-vysku sirku a za floatovat. Je to sice krkolomne, ale pak se bez CSS zobrazi obrazky pekne vedle sebe :)
|
||
Leo Profil |
#9 · Zasláno: 18. 3. 2005, 14:00:23
No v tom pripade je to jeste jednodussi, proste se JavaScriptem projdou v class galerie ty spany, a aplikuje se to na ne natvrdo. Span by nemel obklopit radek, neni to blokovy element. Staci zkusit
.galerie span {border: solid 1px red} Leos Ondra |
||
Peta Profil * |
#10 · Zasláno: 18. 3. 2005, 14:21:59
Hm, tak to moc se spanem nejde
Test verze vypada takto function popis(id) { var text=objGet('o'+id).alt; objGet('s'+id).innerHTML=text; } .galerie2 span {position:relative;} .galerie2 span span {position:absolute; border:solid 2px #00ff00;} <span> <span id="s1">n</span> <img onmouseover="popis(1)" id="o1" alt="Nerez" src="obr/cobra/c_nerez.gif" height="100" width="100" /> </span> Hadej, kde to ta mrcha Firefox zobrazi? :) Za vsemi obrazky :))) Ale ja mu snad domluvim :) |
||
Leo Profil |
#11 · Zasláno: 18. 3. 2005, 14:32:20
Je mozny, ze vytvoreni systemu souradnic pres position: relative nezabira u inline elementu jako je span, tezko rict, Leo
|
||
Peta Profil * |
#12 · Zasláno: 18. 3. 2005, 14:47:33
Leo: Mno, nezabira, zkusil jsem si dat ramecek kolem spanu a jak jsem predpokladal, pocita ho jen kolem radku. Cili delka podle obrazku, vyska podle radku. Mrcha :) Firefox. IE nezkousim, na to nemam odvahu, az v testovani chyb. :)
|
||
habendorf Profil |
#13 · Zasláno: 18. 3. 2005, 14:53:43
Hele, zkoušel jsem a funguje:
span {padding:100px 0 0 100px; position:absolute} <span>Text zadaný scriptem přes innerHTML</span> <img src=".... > Místo těch stovek to můžeš taky měnit JS, pokud obrázky nejsou stejně velký. |
||
Leo Profil |
#14 · Zasláno: 18. 3. 2005, 14:59:48
Vyska podle radku nevadi, muzete v tom spanu prece umistovat text pres position: absolute, bottom a right misto top a left, treba, Leo
|
||
habendorf Profil |
#15 · Zasláno: 18. 3. 2005, 15:11:56 · Upravil/a: habendorf
Leo A nebo tak, jasně. :o)
|
||
Peta Profil * |
#16 · Zasláno: 18. 3. 2005, 15:26:42
Leo: Chi, to jsem zkousel, a prave to top, bottom zobrazuje po strance, oramovani spanu se ignoruje i v pripade position relative. Pak je to tezky, no :)
habendorf: To je ovsem sikovny. Co se vsak stane, kdyz radek presahne delku, jak se zachova position: absolute? Ale vyzkousim to. mam ted <span><span id="s26"></span><img id="o26" alt="Kovane" src="obr/cobra/c_kovane.gif" height="100" width="100" /></span> .galerie2 span span {margin:3px;background:#FFE080;border:solid 1px #DAA700; position:absolute;width:100px; font-size:12px;text-align: center;} function popis(id) { var text=objGet('o'+id).alt;objGet('s'+id).innerHTML=text; } Chova se to zvlastnim zpusobem, ale myslim, ze ten padding by to mohl poresit. Uz jsem podobne delal smajliky, tusim... |
||
centi Profil |
#17 · Zasláno: 18. 3. 2005, 15:58:35
Ak by ti nevadilo, ze obrazky su v DIVoch, ktore sa nafloatuju, tak pozri sem.
|
||
Peta Profil * |
#18 · Zasláno: 18. 3. 2005, 16:07:25
centi: By teda vadilo, protoze bez css se to zobrazi kazde na novy radek. Ale predelat span na block neni zas takovy problem...
|
||
Peta Profil * |
#19 · Zasláno: 18. 3. 2005, 16:14:09
centi: Dik, zajimave reseni. Jako, ja uz to v podstate mam jinak, jenom resim jeste par malickosti. Pak tu dam mou verzi taky :)
|
||
Peta Profil * |
#20 · Zasláno: 18. 3. 2005, 16:56:43
centi: tve reseni pouziji, setri kod, ale potrebuji jeste poradit, jak to udelat pouze pro spany rekneme v divu s class galerie?
Nemusis psat cely kod, staci jen ten radek, kterym to urcim. Na w3c se treba o byclassname nepise, ale jsou tam zajimavy veci http://www.quirksmode.org/dom/w3c_core.html |
||
centi Profil |
#21 · Zasláno: 18. 3. 2005, 17:12:01
Bohuzial neexistuje DOM funkcia getElementsByClassName, preto na to treba ist trocha inak. V cykle treba prejst vsetkymi prvkami stranky a funkciu putAlt() spustit len pri tych, ktore maju pozadovany class.
Je to teda na viac ako jeden riadok, preto pozri znova tu moju linku, je to upravene. |
||
Peta Profil * |
#22 · Zasláno: 18. 3. 2005, 17:21:04
Jeeej, v celku jeden radek navic, to je sikovne. Ja umim JS jen lehce upravit...
Tak mne napada, nebylo by lepsi pouzit: text='<i>'+'aaa'+'</i>'; xspan.innerHTML=text; Nebo tak nejak, mi to prijde zbytecne na moc radku to tve reseni, ale ja teda nevim, co je vic spravne takze to neber osobne. |
||
centi Profil |
#23 · Zasláno: 18. 3. 2005, 17:43:01
innerHTML sa neodporuca, ale teraz ti fakt nepoviem preco :-)
ja som si uz zvykol maximalne vyuzivat DOM funkcie. Ale ak ti innerHTML vyhovuje viac (a spapaju ho aj prehliadace), tak nevidim problem. |
||
Peta Profil * |
#24 · Zasláno: 18. 3. 2005, 18:17:48
centi: mno, tak ja to zacal delat pres get by id, tu galerku, takze se script od puvodniho upravil malo. Ale ted mi to z nejakeho duvodu nebere v IE, mozna kvuli tomu inner. Ja taky slysel, ze nepouzivat, ale zatim mi to vsude chodilo, kde jsem to pouzil.
|
||
Peta Profil * |
#25 · Zasláno: 18. 3. 2005, 18:29:51
Diky centimu mam konecne reseni jako:
CSS .galerie2 img {padding-top:12px;} .galerie2 span {display:block;float:left;position:relative} .galerie2 i {margin:3px;background:#FFE080;border:solid 1px #DAA700; position:absolute;width:100px;left:0;top:0; font-size:12px;text-align:center;font-style:normal} JS (to prvni je univerzalni funkce) function objGet(x) { if (typeof x!='string') return x; else if (Boolean(document.getElementById)) return document.getElementById(x); else if (Boolean(document.all)) return eval('document.all.'+x); else return null; } function putAlt(idecko) { var xspany=objGet(idecko).getElementsByTagName("span"); for(i=0;i<xspany.length;i++) { xchild = xspany[i].childNodes; if (xchild[0].tagName=="IMG") { img=xchild[0]; alt=img.getAttribute("alt"); desc=document.createElement("i"); descText=document.createTextNode(alt); desc.appendChild(descText); xspany[i].appendChild(desc); } } } HTML <script type="text/javascript" language="javascript" src="obr.js"></script> <div class="galerie2" id="g1"> <span><img alt="text" src="obr.gif" height="100" width="100" /></span> <span><img alt="text" src="obr.gif" height="100" width="100" /></span> <div class="cisti"> </div> </div> <script type="text/javascript" language="javascript" >putAlt('g1');</script> |
||
Peta Profil * |
#26 · Zasláno: 18. 3. 2005, 18:35:12
Teda, ja mel uz podobne, kluci navrhovali taky zajimave, ale tohle je takove elegantni. Ze v html je co nejmene kodu navic.
Z floatu ale moc nadseny nejsem, ale co uz, tak je to na floatech, ale s popiskem :) |
||
Peta Profil * |
#27 · Zasláno: 18. 3. 2005, 18:37:32
Jo, drobnost, galerie2 musi byt pro IE
.galerie2 {_display:inline-block} kvuli prave floatum... Tezko se to vysvetluje, ale proste in jinak odmazava text, treba a tak... |
||
Fred Profil |
#28 · Zasláno: 18. 3. 2005, 18:40:21
No asi bych se v tomhle případě buď vykašlal na js úplně i ty spany neksou nic moc. viz http://www.alsacreations.com/blog/billets/arriere-plan.htm
Nebo bych použil js jen pro IE, aby si vyzobnul alt javascriptem a pro ostatní prohlížeče nějaké ty css triky img[alt]:after {content:"alt="attr(alt) !important;display:block !important;background:red !important;color:yellow !important;} |
||
Fred Profil |
#29 · Zasláno: 18. 3. 2005, 18:59:22
Čtu si ten script, je sice asi bez problémů, ale budeš tam kvůli těm altům , vypisovat navíc ty zbytečný spany , na tom alsacreation, sice vypisuješ odstavce, ale je to aspoň trochu sématické a přáteské vůči vyhledávačům, když použiješ img[alt]:after {content:attr(alt) !important;display:block !important;} tak se zase nezobrazí v IE. No ale podle toho kódu výše se zdá, že to je thunbnailová galerie a tam by jsi to mohl udělat ještě mnohem lépe, jestli jsou to teda ty náhledy. Místo spanu stačí vázat ten script na href a title
function extract() { var gal = document.getElementById('gal') var odkazy = gal.getElementsByTagName('a'); for (var i = 0; i < odkazy.length; i++) { var popisek = odkazy[i].getAttribute('title'); if (popisek != '') { var x = document.createElement('span'); x.appendChild(document.createTextNode(popisek)); odkazy[i].className = 'info'; odkazy[i].removeAttribute('title'); odkazy[i].appendChild(x); } } } function addEvent(obj, evType, fn){ if (obj.addEventListener){ obj.addEventListener(evType, fn, true); return true; } else if (obj.attachEvent){ var r = obj.attachEvent("on"+evType, fn); return r; } else { return false; } } addEvent(window, 'load', extract); <p id="gal"> <a href="index.htm" title="text co se zobrazí ve spanu"> <img alt="text" src="obr.gif" height="100" width="100" /> </a> <a href="index.htm" title="text co se zobrazí ve spanu 2"> <img alt="text" src="obr2.gif" height="100" width="100" /> </a> </p> |
||
habendorf Profil |
#30 · Zasláno: 18. 3. 2005, 19:36:22
No už je to trochu mimo mísu, ale výše mě zaujalo toto:
text='<i>'+'aaa'+'</i>'; xspan.innerHTML=text; To je trochu kostrbatý, ne? text='<i>aaa</i>'; xspan.outerHTML=text; No ale teď už je to stejně jedno :o) |
||
Téma pokračuje na další straně.
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0