Prima lectie
Nu voi mai merge la viteza
melcului, asa ca e bine sa fiti tot timpul atenti.
Ferestra de navigatie a browserului cuprinde, de obicei,
pagina creata (e vorba de spatiul care cuprinde, de pilda,
acest text). Acest spatiu poate fi compartimentat. Rezultatul?
E ca si cand am avea mai multe browsere deschise in
acelasi timp.
Exemple:
Fereastra obisnuita arata astfel:
________________________________
| |
| |
| PAGINA |
| |
| |
|________________________________|
Dupa compartimentare (pe verticala):
________________________________
| | |
| | |
| PAGINA1 | PAGINA2 |
| | |
| | |
|___________|____________________|
Dupa compartimentare (pe orizontala):
________________________________
| |
| |
| PAGINA1 |
|________________________________|
| PAGINA2 |
|________________________________|
Dupa compartimentare multipla:
________________________________
| PAGINA1 |
|________________________________|
| | |
| PAGINA2 | PAGINA3 |
| | |
|___________|____________________|
etc.
Pentru a imparti fereastra in mai multe cadre (frames)
sau subferestre in care sa fie incarcate pagini diferite
se procedeaza in felul urmator. In primul rand, se cree(cu
cati de 'e' se scrie?)aza fisierele pentru paginile
cu pricina. Dupa aceea se scrie o pagina speciala care
face toata treaba: imparte fereastra si cheama, in fiecare
cadru, pagina corespunzatoare.
Ordinea nu e foarte importanta. Puteti scrie mai intai codul
paginii speciale si apoi sa faceti (sub)paginile care se
incarca in subferestre. Cum arata pagina speciala?
In primul rand, in corpul paginii (BODY) nu exista nimic.
Cel mult, poate fi introdus un mesaj pe care il vor vedea
doar cei ale caror browsere sunt atat de vechi incat nu
pot afisa frames. In al doilea rand, in antetul paginii
vor fi adaugate etichetele prin care sunt definite
cadrele. Modelul este cel al listelor si tabelelor -
etichete impaturite unele intr-altele, in mod restrictiv:
Fiecare cadru este creat cu ajutorul unei etichete FRAME
(sorry, am renuntat la culori), care functioneaza, in parte,
la fel ca IMAGE. Atributul SRC ia ca valoare adresa (relativa
sau absoluta a) paginii care va fi incarcata in cadrul
respectiv. Atributul NAME e folosit ca si atributul omonim
al etichetei ancora (A), adica primeste ca valoare un nume
oarecare dat de noi (sir alfanumeric de caractere).
De ce trebuie sa dam un nume fiecarui cadru veti afla mai
incolo. Mai multe etichete FRAME vor fi incapsulate intr-o
eticheta dubla FRAMESET. Cu ajutorul acesteia se precizeaza
cum vor fi introduse cadrele in pagina. Atentie!
Acum apare ceva nou. Anumite atribute pot primi valori
multiple. Ce inseamna asta? Inchipuiti-va, de pilda, ca
in loc de cele doua atribute ale etichetei IMG, HEIGHT si
WIDTH am fi folosit unul singur, sa zicem SIZE, dar
valorile pentru acesta ar fi fost de forma: "inaltime,latime".
Cu alte cuvinte, am fi avut o valoare complexa, compusa
din valoarea pentru inaltimea imaginii si cea pentru latimea
ei (in pixeli sau procente). Pentru a fi clar despre ce
e vorba, cele doua valori ar fi fost despartite de virgula.
Ok, la fel stau lucrurile si aici. Sa presupunem ca vrem
sa impartim fereastra in doua cadre (subferestre): unul
sus si unul jos. Primul ocupa jumatatea de sus a ferestrei
iar al doilea jumatatea de jos. Vom scrie ceva de felul
urmator:
Rezultatul va arata astfel:
________________________________
| |
| |
| pagina1.html |
|________________________________|
| |
| pagina2.html |
| |
|________________________________|
E clar?
Cum va arata pagina cu ajutorul careia creem subferestrele si
incarcam cele doua pagini? Asa:
Aici e titlul de pe bara ferestrei (cele doua pagini
din cadre nu mai au nevoie de ac. eticheta)
Mesajul pentru cei cu browsere vechi:
"Instaleaza un browser adevarat, fraiere!"
Daca vreau ca primul cadru sa ocupe doar un sfert din partea de
sus a ferestrei iar celalalt sa ocupe restul, pot scrie asa:
Daca vreau ca primul cadru sa ocupe 200 de pixeli (200 de randuri de 1 pixel)?
Nimic mai simplu. Dar ce dimensiune sa aiba al doilea cadru? Dupa cum tineti
minte (din povestea cu tabele etc.), fereastra browserului nu se deschide la o
dimensiune fixa. Cel mai simplu e sa spun (exact ca mai sus): restul. Iar
asta se scrie asa:
Daca as fi vrut ca lucrurile sa stea invers? :-) Scriam invers (nu, nu asa:
>"*,002"=SWOR TESEMARF<):
Iar acum cadrul de jos ocupa 200 de pixeli, iar cel de sus ocupa cat incape.
Ce se intampla daca vreau sa impart fereastra in mai mult de doua cadre (toate
pe orizontala)? E simplu. Atributul ROWS nu e restrictionat la un sir de doar
doua valori. Pot avea mai multe dimensiuni, pentru primul cadru, al doilea, al
treilea etc. Numar subferestrele de sus in jos, asta e important de tinut minte
(cand e vorba de subferestre aliniate pe verticala, le numar de la stanga la
dreapta, ca oamenii normali).
Iaca:
Dupa cum se observa, prin eticheta FRAMESET am promis ca vor fi 3 cadre,
asa ca trebuie sa definesc trei pagini atunci cand scriu etichetele
FRAME.
Observatii: (1) nu e indicat sa folosesc acelasi nume pentru doua
cadre diferite; (2) mai bine nu incercati sa combinati valori in procente cu
valori in pixeli; folositi fie o varianta, fie pe cealalta, in functie de
imprejurari; (3) se poate observa ca lectia inca nu s-a incheiat :-(
Exercitiu:
Reproduceti "pe viu" exemplul de mai sus, dar cu subferestrele pozitionate
pe verticala (adica asa: |pagina1.html|pagina2.html|pagina3.html|),
fiecare din ele ocupand o treime din corpul ferestrei. Veti folosi celalalt
atribut al etichetei FRAMESET, atributul COLS. Numiti pagina speciala
care este incarcata la inceput "frames.html". Sau altfel :-)
Cum reusim sa impartim fereastra principala intr-un mod mai sofisticat?
Ochii mari! Incapsulam etichete FRAMESET unele in altele. Sa luam un
exemplu simplu. Pornim de la fereastra impartita in doua jumatati orizontale:
Acum, in loc ca in jumatatea de jos sa fie afisata pagina "pagina2.html",
vom imparti (inegal) aceasta subfereastra pe verticala in doua alte subferestre,
in care vom incarca doua pagini diferite. Codul pentru partea de jos este:
Iar acum vom scrie acest cod in locul codului prin care introduceam
pagina simpla de jos ("pagina2.html"). Rezultatul final (ok, ok, se vede mai
bine daca scriu colorat):
<FRAMESET ROWS="50%,50%">
<FRAME SRC="pagina1.html" NAME="pag_sus">
<FRAMESET COLS="30%,70%">
<FRAME SRC="pagina3.html" NAME="pag_jos_stanga">
<FRAME SRC="pagina4.html" NAME="pag_jos_dreapta">
</FRAMESET>
</FRAMESET>
Adica:
________________________________
| |
| |
| pagina1.html |
|________________________________|
| | |
|pagina3.html | pagina4.html |
| | |
|_____________|__________________|
Acum vine un exercitiu ceva mai dificil:
Incercati sa reproduceti urmatoarea structura de 6 frame-uri (numiti
paginile, in ordine, "pagina1.html", "pagina2.html" etc.):
________________________________
| | | |
|-----| | |
| | | |
| |_________________| |
| | | | |
| | | | |
| | | | |
|_____|________|________|________|
Ok, aveti rezolvarea in sursa acestei pagini.
Exista cateva atribute suplimentare. Ca de obicei. Aici as putea face o
paranteza -> (
Gata, am facut-o. Acum
sa trecem mai departe. In mod normal, subferestrele sunt despartite de o
bara subtire. Daca doriti ca aceasta sa fie invizibila, e suficient
sa adaugati in interiorul etichetei FRAMESET urmatorul sir de atribute:
BORDER="0" FRAMEBORDER="0" FRAMESPACING="0" (de fapt, FRAMESPACING nu e
necesar). Lucrurile stau prost cu ele, fiindca efectul folosirii lor
e diferit in Netscape si Internet Explorer. FRAMESPACING nu face nimic
in Netscape. FRAMEBORDER la fel, atata timp cat valoarea pentru BORDER
este "0". Atunci cand valoarea nu este "0", dand o valoare diferita
de "0" atributului FRAMEBORDER ii spunem browserului Netscape sa afiseze
dunga despartitoare dintre frames cu gri si nu cu alb. In schimb, valorile
luate de BORDER seteaza grosimea dungii despartitoare (tot in Netscape,
fiindca in IE nu ajuta la nimic; exact acelasi lucru este realizat in IE
folosind FRAMESPACING, atunci cand FRAMEBORDER are o valoare diferita de
"0").
Exercitiu:
Experimentati singuri folosirea acestor atribute si invatati ce si cum.
Eu m-am plictisit sa explic :-)
Rezumat: atunci cand FRAMEBORDER are valoarea "1" avem o bara despartitoare
de culoare gri intre frame-uri, atat in Netscape cat si in IE, iar grosimea
acesteia este data, pentru Netscape, de valoarea atributului BORDER, iar
pentru IE de valoarea atributului FRAMESPACING. Ok, atunci cand o avem,
vizitatorul paginii poate, by default, redimensiona frame-urile (cursorul
mouse-ului, plimbat deasupra barei despartitoare arata cam ca atunci cand
redimensionam o fereastra - procedura e identica). Daca nu vrem ca asta
sa se intample, putem introduce un atribut special inauntrul etichetei
FRAME cu ajutorul careia am creat subfereastra respectiva. Este atributul
NORESIZE, care, in mod curios, nu primeste nici o valoare. Pur si simplu il
scriem asa, singur. In fine, atunci cand pagina afisata in subfereastra este
mai lunga/lata, putem folosi barele de navigatie, pentru fiecare subfereastra
in parte, la fel cu faceam inainte cu fereastra unica. Dar in unele cazuri
am dori ca barele de navigatie sa nu apara, indiferent de dimensiunile paginii.
Pentru asa ceva folosim atributul SCROLLING al etichetei FRAME. Valorile pe
care le poate lua acesta sunt "yes" (= pune bare de navigatie indiferent
de dimensiunile paginii), "no" (= omite barele de navigatie indiferent
de dimensiunile paginii) si "auto" (valoarea implicita).
Exercitiu:
Incercati sa va reprezentati, fara a experimenta (mai intai) ce anume
face urmatorul cod:
Dupa ce ati facut asta, verificati rezultatul creand doua fisiere goale,
"top.html" si "bottom.html", plus "frames.html", care va cuprinde in
antet codul de mai sus.
Cu asta am terminat toata povestea cadrelor (sau a frame-urilor, sau a
subferestrelor). Cum se folosesc insa? In mod normal, fiecare pagina
din fiecare cadru este autonoma. Link-urile din ea incarca noi pagini
in cadrul respectiv. Dar daca vrem ceva diferit? Codul de mai sus, de
pilda, ar putea fi folosit in urmatoarea situatie: am creat un site cu
mai multe pagini; am cateva pagini de intrare catre sectiuni diferite
ale site-ului meu.; vreau ca fiecare pagina vizitata sa contina
link-uri catre paginile de intrare ale acestor sectiuni (grupate intr-un
soi de meniu, eventual); in loc sa scriu codul pentru meniul meu in fiecare
pagina in parte, lucrez cu frame-uri - pagina cu link-uri pentru sectiuni
va fi incarcata in subfereastra de jos (in exemplul de sus, e cea numita
"menu"); link-urile din aceasta pagina vor chema in subfereastra de sus
paginile sectiunilor respective. N-ar fi frumos? Pentru a preciza ca doresc
ca link-ul sa incarce pagina in alta subfereastra decat cea a paginii
care contine link-ul, adaug un atribut suplimentar la eticheta ancora:
TARGET. Valoarea atributului este numele cadrului in care vreau sa fie
incarcata pagina la care se face trimitere (HREF). Daca vreau, de pilda,
ca link-ul din cadrul de jos ("menu") sa cheme o pagina in cadrul de
sus ("main"), scriu asa:
Text pt. Click
Exista un nume special, "_top". Un link de forma:
Alt text pt. Click
ma va scoate din frames. Pagina chemata va fi incarcata in fereastra principala,
cea care continea subferestrele. Aveti aici
un exemplu pentru tot ceea ce am explicat. In rest, toate bune si frumoase, iar acum
eu voi apuca, probabil, sa dorm un pic.
Cuprins Urmatoarea lectie