Archives for : February2007

La Bloc, La Servici si La Ora 5

De ani buni de zile simteam acut o lipsa majora in programul TV al celor PRO da’ MULTI. Astazi am vazut in sfarsit ce asteptam de atata vreme: sa se inchida naibii cercul! (nu, nu e vorba de bancul cu calugarii).

Cerc care in cazul de fata e un patrulater bilateral cu 3 laturi, care acopera cam toata viata ciumpalacului muncitor de la baza piramidei sociale.

Despre ce bat campii? Poi sa vedem in ce consta viata respectiva:

1. Primele 8 ore ale fiecarei zile le petreci LA SERVICI
2. Ajungi acasa la ora 5, la timp pentru stirile care-ti arata exact viata ta (crime, violuri, incendii, catastrofe, gaina cu 3 picioare, u name it)
3. Dupa ce-ai tras stirea pe ureche si berea la gingie, iti trantesti maieul transpirat pe canapeaua uzata din umila ta camera de LA BLOC.

Dupa care dormi. Somnul ratiunii… Cat de bine targetati poa sa fie baietii astia pro, nu pot sa cred…

graffiti – resurse romanesti

Ma intreba la un moment dat cineva pe blog daca am/stiu de resurse despre graffiti-ul romanesc. Din intamplare chiar am dat peste asa ceva: http://www.2020.ro/RomanianStencilArchive/ si http://www.grafitty.3x.ro/. Pe primul link, la Vaslui, m-a amuzat graffiti-ul cu nr. 20:

visezi cai verzi...

Valentina 2

Uite c-am gasit-o si pe Valentina (asta apropo de Valentin). Daca ai rabdare si n-o grabesti sa rupa petalele, o sa ai niste surprize haioase 😉 Enjoy!

bube de roblogfest

cum zilele astea m-am vazut inscris in roblogfest, acu 5 minute ma apuc si eu ca tot omul sa votez. si cum ajung eu frumos pe pagina primei categorii (1. Cel mai bun blog (crema frate!)) vad cu mare mirare cum, protzopit in varful paginii, imi sta scris mare si roz: Ai votat Zoso`s Blog! Asta de unde eu, pacatili-meli, n-apucasem sa votez inca nimic.

acu, ori baietii cu roblogfestu au probleme babane cu serveru’, ori se intampla trebi mai necurate p’aciulea. din ce stiam eu, zoso era un domn/nene/baiat (nu-l cunosc personal) cu un blog de mare succes… nu vad de ce-ar avea nevoie de trickuri de-astea ca sa se voteze.

dragi roblogfeshti, vedeti ce faceti pe serverul ala, mai testati-l, mai cautati-va pe la cartitze, ca nu-i frumos sa intre tot neaoshul ca mine pe site la voi si sa ramana cu gusturi maro prin gura.

:hover

PE SCURT: meniu cu submeniuri, CSS-only (fara JS)

Orice browser modern (si de aici exclud de la bun inceput IE-ul), daca respecta specificatiile CSS, are prezent suportul pentru pseudo-clasa dinamica:hover” pe TOATE elementele, nu numai pe jalnicul si singuraticul < a >.

Nota: Stii deja ca, in CSS, exista o serie de pseudo-clase dinamice (:hover, :active si :focus), pe care, in mod traditional, le asociezi cu “a” ca sa creezi stiluri diferite pentru cele 3 stari ale unui link, sub forma a:hover de pilda.

Browserele moderne, dupa cum ziceam, avand suport complet pentru asta, permit asocierea acestor pseudo-clase la orice element html. Cu alte cuvinte, pot foarte bine sa definesc ceva de genul:

td       {background-color: #cccccc;}
td:hover {background-color: #336699;}

ceea ce va avea ca efect un o schimbare de culoare de background pe td-urile respective, la roll-over evident, fara nici un pic de javascript care sa incarce codul HTML.

Pretty neat, huh? E un feature excelent, pe care pana si super-blamatul de IE7 a inceput sa-l suporte. Numai IE-urile mai vechi inca umbla cu ciunga-n par… Asa ca recomandarea mea e sa urmaresti atat tutorialul cat si exemplele linkate intr-un browser _modern_.

Noah, trecand mai departe, sa vedem la ce poate folosi treaba asta dragutza: Sa ne imaginam ca vrem sa tinem un element html “ascuns” si sa-l facem vizibil atunci cand trecem cu mouse-ul peste “parent-ul” lui. E un scenariu super-cunoscut pentru cine a incercat vreodata sa construiasca un meniu cu submeniuri. Ca sa exemplific, o sa revin la un exemplu cu < li > -uri:

<ul id="menu">
  <li><a href="#">Element 1</a></li>
  <li><a href="#">Element 2</a></li>
  <li><a href="#">Element 3</a></li>
</ul>

Asta ar fi un meniu clasic, simplu (i-am dat un “id” dintr-un motiv relativ simplu: pentru a putea controla mai bine felul in care voi aplica CSS-urile mai tarziu – cu alte cuvinte, daca in acelasi document voi avea si alte ul-uri care vreau sa se comporte normal, atunci voi restrictiona de la inceput felul in care aplic stilurile de redefinire a ul-urilor si li-urilor in css).

Sa zicem ca vrem sa mai bagam in el niste elemente de nivel 2, tot sub forma de < ul > cu < li > -uri:

<ul id="menu">
  <li><a href="#">Element 1</a>
    <ul>
      <li><a href="#">Sub-element 1</a></li>
      <li><a href="#">Sub-element 2</a></li>
      <li><a href="#">Sub-element 3</a></li>
    </ul>
  </li>
  <li><a href="#">Element 1</a>
    <ul>
      <li><a href="#">Sub-element 1</a></li>
      <li><a href="#">Sub-element 2</a></li>
      <li><a href="#">Sub-element 3</a></li>
    </ul>
  </li>
  <li><a href="#">Element 1</a>
    <ul>
      <li><a href="#">Sub-element 1</a></li>
      <li><a href="#">Sub-element 2</a></li>
      <li><a href="#">Sub-element 3</a></li>
    </ul>
  </li>
</ul>

(Poti vedea ce am facut pana acum aici).
Hai sa incepem sa introducem niste stiluri acum! In primul rand voi vrea ca orice < ul > care se gaseste in < ul > – ul cu id=”menu” sa fie ascuns:

#menu ul {display: none;}

Nota: De ce folosesc, pentru display, valoarea none si nu hidden? Pentru ca orice obiect are doua proprietati inerente: vizibilitatea si spatiul ocupat. In timp de hidden are efect doar asupra vizibilitatii (e ca un fel de transparenta: obiectul nu se mai vede, dar spatiul ocupat de el ramane ferm pe pozitii), none are efect asupra ambelor proprietati, ascunzand obiectul complet, si eliberand spatiul ocupat de el.

Gata, am ascuns meniul secundar. Acum vreau ca el sa redevina vizibil atunci cand fac mouseover peste < li > – ul in care se afla:

li:hover ul {display: block;}

(cu alte cuvinte: orice UL care se gaseste intr-un LI care are mouseover va fi afisat ca un block)
Dupa cum poti vedea aici, n-am rezolvat mare branza, desi logica iti spune c-ar fi trebuit s-o rezolvam.

Ce se intampla: fiecare regula CSS are o importanta precisa, pe care o poti calcula numarand pur si simplu elementele care o definesc. Iar fiecare element are la randul lui o valoare diferita in functie de ce tip de element este. Un nod simplu (.clasa_mea de pilda) are valoarea 1, o pseudo-clasa (un :hover de pilda) are valoarea 10, iar un id (#clasa_x de pilda) are valoarea 100. (hihi ce de pilde! 🙂 )

Acum, daca numaram cele 2 reguli de mai sus, pentru prima avem #menu ul (100+1=101) iar pentru a doua avem li:hover ul (10+1=11). Din calculul asta simplu poti sa intelegi acum cum de o regula “mai generala” poate fi mai slaba in importanta decat una “mai privata”, chiar daca logica iti spune in aparenta contrariul. Ce e de facut: simplu, marim “valoarea”celei de-a doua reguli:

#menu li:hover ul {display: block;}

Acum avem #menu li:hover ul (100+10+1=111>101) ceea ce rezolva problema (vezi rezultatul aici).

Daca mai adaugam si niste stiluri ca sa “infrumusetam” toata treaba,

#menu   {width: 10em;}
ul      {margin: 0px; padding: 0px;}
ul ul   {padding-left: 10px;}
li      {list-style-type: none;}
#menu a {display: block; margin: 0; padding: 2px 3px;}
a       {background-color: #CCCCCC; text-decoration: none;
        font-family: Verdana; font-size: 11px;}
a:hover {background-color: #EAEAEA;}

obtinem ceva ce chiar incepe se semene a meniu. Si asta FARA pic de javascript, cu un cod simplu, curat, care la nevoie (in browsere mai retarde) se degradeaza clar si structurat, deci usor de folosit in orice mediu. De-aici incolo (pentru exemplul asta) restul tine de imaginatia ta, ca sa-l faci sa arate cum vrei tu.

IE5/6?

Astea n-o sa inteleaga in veci ce-am discutat pana acum. Noroc ca, in aroganta lor, domnii de la M$ ne-au permis sa redefinim modul in care functioneaza anumite tag-uri HTML folosind seturi de reguli in fisiere de genul htc. Cum asta e deja cu totul alta discutie, o sa te trimit sa citesti mataluta ce zic altii mai destepti, aici, daca ai rabdarea pe care eu pana la urma am avut-o. Bottom-line e ca baietii din linkul cu pricina au programat un astfel de fisier perfect pentru ce avem noi nevoie, si care emuleaza 99% comportamentul lui :hover.

Ca sa faci ca exemplul nostru sa mearga bine si in IE5/6, ia matalutza fisierul asta si salveaza-l in acelasi folder in care ai lucrat tutorialul pana acum, dupa care foloseste comentariile conditionale ca sa fortam IE-ul (si numai pe el) sa “citeasca” neste treburi in plus, si anume:

<!--[if IE]>
<style type="text/css" media="screen">
body          {behavior: url(csshover.htc); font-size: 100%;}
</style>
<![endif]-->

(il instruim pe body sa joace dupa cum ii canta behavior: url(csshover.htc);) Cum NUMAI IE o sa inteleaga treaba asta, celelalte browsere nu vor fi afectate, iar noi obtinem exact ce am vrut. Cum toata treaba de mai sus este in “comentariu”, se valideaza perfect 😀 ceea ce iar e bine.

Evident, lista de probleme de compatibilitate intre browsere nu se opreste aici… Asa ca atat IE7 cat si IE5/6 o sa faca varza din meniul nostru, daca incercam sa-l facem sa arate cat de cat ok.

Solutia? Un alt “hack” de la M$ – posibilitatea de a crea definitii CSS conditional, in functie de browserul detectat. Dupa un pic de tweaking, am obtinut urmatorul set de reguli conditionale, atat pentru IE5/6 cat si pentru IE7:

<!--[if IE]>
<style type="text/css" media="screen">
body        {behavior: url(csshover.htc);}
#menu ul li {float: left; width: 100%;}
li          {border-bottom: solid 1px #CCCCCC; margin-bottom: -1px;}
</style>
<![endif]-->

<!--[if gte IE 7]>
<style type="text/css" media="screen">
#menu ul li {float: none;}
li          {border-bottom: none 0px; margin-bottom: -4px;}
</style>
<![endif]-->

Fisierul final il puteti vedea aici.
Pentru inspiratie, citeste ce-am citit si eu.

Meniu expandabil JS + CSS

tutorial_10.gif…sau “Building An Expanding DHTML Menu With CSS and JavaScript – revisited”.

Despre ce este vorba: despre un meniu vertical cu submeniuri care in prima faza sunt ascunse dar care la rollover se arata.

Cerintele cu care m-am confruntat:

1. La roll-over peste un element de nivel zero sa se afiseze submeniul corespunzator elementului respectiv
2. La roll-over peste un alt element de nivel zero, pe langa efectul de la punctul 1, sa se ascunda orice alt submeniu secundar, ramanand vizibil doar submeniul elementului de meniu in cauza. (sa nu am niciodata mai mult de un submeniu deschis)

Solutia cea mai eleganta am gasit-o in pagina linkata la inceputul articolului, dar era un pic cam pe langa ce-mi trebuia, asa ca am luat-o, am adaptat-o si-am obtinut exact ce-mi trebuie (vezi aici un exemplu functional, cu tot ce-i trebuie ca sa-l intelegi, daca te uiti in sursa).

Later edit: pentru o versiune de meniu mai eleganta (ca si cod/abordare), dar mai putin functionala si fara JS, citeste aici.

English Version of this article here.

3D bump mapping in Flash – e de plans, dragilor, unde s-a ajuns…

Iaca ce mi-a trimis Rich sa vad la UnitZeroOne:

paperplanet.jpg

bumpmaprhino.jpg

Ce facem, ne lasam de meserie, da?…

Followup de la Zdeto:

Phong Shading

Abia astept sa vad noua generatie de demo-uri 3D, care sa inlocuiiasca vechile, dragele si clasicele alternative care au facut valuri la vremea lor.

Hexagoane din CSS

Pentru cine n-are somn… o pagina facuta exclusiv din CSS… desi nu pare… Ghici cum au facut-o.

English Version of this article here.

MA-I-A-HIII – the numa-numa-dance

Il mai stii pe pushtiul ala dement care s-a filmat, impreuna cu colegii lui, mimand c-ar canda pe piesa ozonatzilor? Daca da, atunci (in serie cu imaginile de mai devreme) si asta ar trebui sa “ring-a-bell”.

Do the Numa Numa Dance!

Scurt follow-up la “Apropo de Web 2.0”

Pentru cine a cetit deja asta, fara folos, am gasit si cateva imagini explicative:

Truthiness

Web Two Point Ohhhh