@Campus: Sigur. CSS este un limbaj foarte puternic de formatare si daca nu ar fi multe incompatibilitati intre browsere ar fi excelent fiindca s-ar putea face si mai multe decat se fac de obicei. Unele chestii sunt evitate tocmai fiindca in unele browsere rezultatul este diferit, sau nu sunt suportate deloc.
Uneori se pun marcaje care testeaza tipul de browser si se adauga un cod CSS diferit pentru anumite browsere, in special pentru cele mai vechi cum ar fi Internet Explorer 6, 7 sau 8, insa asta inseamna munca in plus, asa ca multe site-uri spun dea dreptul ca nu suporta browsere vechi si gata.
M-am contrazis cu multi orbi pe diverse liste de discutii in ceea ce priveste posibilitatea unui orb de a lucra ca web designer, insa si eu sunt de acord cu tine. Un orb nu putea face un design ca lumea nici in urma cu 15 ani, cand paginile web erau de obicei mult mai simple si accesibile.
Astazi cand exista o multime de biblioteci javascript care ofera mii si mii de widget-uri dintre care foarte multe nu sunt accesibile deloc, cand se pot aplica multe efecte care nu sunt deloc accesibile, cand cu CSS se pot face multe lucruri care nu sunt deloc accesibile, este absolut imposibil ca un orb sa creeze un design cat de cat acceptabil.
Asa ca munca de programator poate fi una foarte accesibila, dar partea de design ar fi bine sa o faca cineva care vede.
Cand vedeam am fost printre altele si web designer si stiu ca diferenta intre un design bun si unul rau poate fi de doar cativa pixeli, iar un cititor de ecran nu ne va putea niciodata oferi asemenea informatii incat sa putem noi crea un design ca lumea.
@Manu: Spre nenorocul orbilor oarecum, orientarea in ultima vreme este ca browserul sa faca cat mai multe lucruri, nu programul care ruleaza server-side.
Spun pentru nenorocul orbilor fiindca asta inseamna ca se foloseste din ce in ce mai mult AJAX (sau ma rog, un fel de AJAX fara XML, ci cu JSON), dar fara suport ARIA de obicei, asa ca dupa ce facem click pe un link, pare sa nu se intample nimic, dar de fapt este posibil sa se actualizeze anumite parti din pagina, deci prezinta ceva probleme de accesibilitate.
Asa ca in din ce in ce mai multe cazuri programul server-side ofera doar un API care genereaza datele intr-un format standard, de cele mai multe ori JSON, iar codul Javascript il descarca, il formateaza ca sa arate cum vrea designerul, iar daca la un moment dat designerul va dori sa schimbe total aspectul paginii, il va putea schimba fara sa mai fie nevoie sa se modifice programul care ruleaza pe server.
Asta reduce timpul de munca necesar, face ca modificarile pe site sa fie mai flexibile, iar serverul sa fie ceva mai putin incarcat.
Pe de alta parte acest mod de lucru reprezinta si un avantaj pentru orbii care lucreaza ca programatori, fiindca munca este din ce in ce mai specializata, si programatorul trebuie sa faca doar partea de programare, in multe cazuri nu mai are nici macar de creat codul HTML, iar partea de front-side este facuta de altii, asa incat exista mai putine probleme de accesibilitate.
Din pacate pentru moment asta se intampla doar la altii, si mai putin si la noi.
Intr-adevar, se pot asigna mai multe clase unor obiecte, dar la fel ca in cazul programarii, la intrebarea daca este bine ca un obiect sa aiba mai multi parinti, chiar daca limbajul de programare permite pentru cazuri extreme, este recomandabil sa aiba doar un singur parinte (familie monoparentala)
Daca o celula are 3 clase, sa zicem una care defineste tipul de font, alta care defineste marimea fontului si alta care defineste culoarea fontului (sau alte atribute, ca nu conteaza), ce te faci daca vrei sa schimbi culoarea fundalului pentru acel tip de celula? Sau daca vrei sa adaugi un text in mod automat (ca CSS poate face si asta, desi nu stiu cat de bine este suportata aceasta facilitate).
Atunci va trebui ori sa modifici una dintre cele 3 clase, ceea ce nu este prea bine, fiindca acea modificare va fi aplicata peste tot unde este folosita acea clasa si unde poate ca nu vrei si aceasta modificare, iar cea de a doua solutie este sa mai adaugi o a patra clasa, iar asta nu este prea bine fiindca trebuie sa modifici si codul HTML.
O solutie mai buna ar fi sa definesti o singura clasa pentru un anumit tip de celule, cu toate subtipurile detaliate. Adica sa nu creezi doar o clasa "metale" sau "metale_alcaline", ci una care sa descrie cat mai bine tipul de data, de genul "metale_alcaline_pamantoase" sau cu si mai multe detalii, in functie de nevoi.
Iar apoi pentru fiecare dintre acele clase vei putea defini si fontul, si culoarea textului, si marimea fontului si culoarea fundalului si tot ce mai vrei.
Daca vei dori sa schimbi una dintre aceste atribute, o vei putea schimba, dar vei putea adauga si noi atribute pentru acea clasa fara sa mai fie nevoie sa schimbi nimic in codul HTML.
Si in plus mai exista si avantajul ca ai toate atributele pentru o clasa la un loc, fiind mai usor de modificat, fara sa ai dubii si sa incepi sa cauti prin codul html ca sa vezi daca nu cumva faci rau ca modifici o clasa existenta care mai este folosita si in alta parte unde ar trebui sa ramana cum este.
Dar ma rog, modul in care procedezi depinde de nevoi, fiindca uneori sti sigur ca nu vei avea nevoie de modificari prea detaliate, si atunci este mai simplu sa creezi doar cateva clase pe care sa le aplici peste tot, decat sa creezi mai multe clase cu atribute asemanatoare si care nu vor fi niciodata modificate.
O alta parte buna din CSS este faptul ca este "cascading" adica faptul ca se pot defini atribute pentru un element de nivel mai inalt care include alte elemente, si toate elementele copil vor mosteni atributele de la elementul parinte, asa incat nu trebuie sa definesti de mai multe ori un anumit atribut.
In cazul tau, chiar daca vor exista diferente de culori text si fundal si atribute ale textului, probabil ca vei dori ca toate celulele sa foloseasca acelasi tip de font cu aceeasi marime, ca sa nu arate tabelul ca o varza, iar acel tip de font il vei putea seta pentru intreg tabelul o singura data, nu pentru fiecare rand sau celula in parte, iar atributele care pot diferi de la o celula la alta le vei putea seta intr-o clasa care nu va fi aplicata in general, ci doar cand este aplicata in tabelul respectiv.
Aceasta este o alternativa pentru folosirea unei singure clase cu toate atributele pentru o celula, adica poti defini atributele pentru o clasa de nivel mai inalt si apoi defini separat atribute pentru feicare dintre clasele copil, dar practic este acelasi lucru, atat doar ca nu folosesti doar o singura clasa pentru o celula, ci mai multe clase, toate clasele fiind insa valabile doar sub elementul parinte specificat, nu si altundeva pe site.
Pacat ca Jaws raporteaza destul de rau atributele elementelor HTML in foarte multe cazuri si nici nu raporteaza decat cateva atribute setate cu CSS, fiindca altfel CSS ar fi un limbaj foarte interesant, chiar daca multe dintre facilitatile lui ne sunt inaccesibile.