« 1 2 »
Autor Zpráva
Peta
Profil *
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
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 *
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
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 *
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 *
Leo: Hm, to je vlastne fakt. Soupnout img do spanu a popisek tam pridat pomoci JS. Tak ja sem napisi pak reseni :)
Leo
Profil
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 *
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
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 *
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
Je mozny, ze vytvoreni systemu souradnic pres position: relative nezabira u inline elementu jako je span, tezko rict, Leo
Peta
Profil *
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
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
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
Leo A nebo tak, jasně. :o)
Peta
Profil *
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
Ak by ti nevadilo, ze obrazky su v DIVoch, ktore sa nafloatuju, tak pozri sem.
Peta
Profil *
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 *
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 *
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
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 *
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
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 *
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 *
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">&nbsp;</div>
</div>

<script type="text/javascript" language="javascript" >putAlt('g1');</script>
Peta
Profil *
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 *
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
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
Č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
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)
« 1 2 »
Toto téma je uzamčeno. Odpověď nelze zaslat.

0