1. Imaginea cu descriere: figure si figcaption
figure este containerul semantic (spune "acesta este un element ilustrativ"), iar figcaption este legenda — titlul sau descrierea lucrarii.
<!-- O lucrare in galerie: imagine + titlu + tehnica --> <figure class="lucrare"> <img src="imagini/peisaj-acril.jpg" alt="Peisaj de toamna pictat in acril pe panza, 50x70 cm" > <figcaption> <strong>Toamna la munte</strong><br> Acril pe panza, 50×70 cm, 2025 </figcaption> </figure>
Semantic: browserul, cititoarele de ecran (accesibilitate) si Google stiu ca figcaption descrie exact img-ul din acel figure. O galerie cu figure este indexata mai bine in cautari de imagini si e mai accesibila pentru persoane cu deficiente de vedere.
Practic: codul e mai scurt si clar — dai o singura clasa CSS (.lucrare) pe figure si stilizezi tot containerul cu un singur selector.
alt este citit cand imaginea nu se incarca sau de cititoarele de ecran, figcaption este textul vizibil pe pagina pentru toti utilizatorii. Nu se exclud — se completeaza.
2. CSS Grid pentru galeria de imagini
figure copil se plaseaza automat intr-o celula a grilei.
<section class="galerie"> <h2>Lucrarile mele</h2> <div class="grid-galerie"> <figure class="lucrare"> <img src="imagini/lucrare1.jpg" alt="Portret in carbune, 30x40 cm"> <figcaption> <strong>Portret I</strong><br>Carbune pe hartie, 30×40 cm </figcaption> </figure> <figure class="lucrare"> <img src="imagini/lucrare2.jpg" alt="Natura statica in acuarela, 25x35 cm"> <figcaption> <strong>Natura statica</strong><br>Acuarela, 25×35 cm </figcaption> </figure> <!-- ... alte figure-uri pentru restul lucrarilor ... --> </div> </section>
/* Containerul grilei */ .grid-galerie { display: grid; grid-template-columns: repeat(auto-fill, minmax(240px, 1fr)); /* auto-fill = cate coloane incap; minmax(240px,1fr) = minim 240px, maxim 1 fractie */ gap: 24px; /* spatiu intre celulele grilei (rand si coloana) */ margin-top: 1.5rem; } /* Fiecare celula (figure) */ .lucrare { margin: 0; /* elimina margin-ul implicit al lui figure */ text-align: center; } .lucrare img { width: 100%; /* imaginea umple toata latimea celulei */ height: 200px; /* inaltime fixa — toate la fel, ca la o expozitie */ object-fit: cover; /* decupeaza fara distorsiune, nu intinde imaginea */ display: block; } .lucrare figcaption { font-size: 0.9rem; color: #555; padding: 8px 4px; }
Pe un ecran lat (laptop): 3-4 coloane de imagini, fiecare la 240-300px latime, cu titlul lucrarii dedesubt. Pe tableta: 2 coloane. Pe telefon: 1 coloana. Totul se intampla automat prin auto-fill si minmax, fara niciun cod JavaScript si fara media queries suplimentare.
3. Structura paginii cu sectiuni semantice
<!DOCTYPE html> <html lang="ro"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Portofoliu Ana Ionescu — Arte Vizuale</title> <link rel="stylesheet" href="stil.css"> </head> <body> <!-- 1. Antet: numele artistului si subtitlul --> <header class="site-header"> <h1>Ana Ionescu</h1> <p class="subtitlu">Arte vizuale · Pictura · Desen</p> </header> <!-- 2. Continut principal (unic pe pagina) --> <main> <!-- 2a. Sectiunea galerie --> <section class="galerie"> <h2>Lucrarile mele</h2> <div class="grid-galerie"> <!-- figure-uri cu imagini, vezi Atomul 1 si 2 --> </div> </section> <!-- 2b. Sectiunea Despre artist --> <section class="despre"> <h2>Despre artist</h2> <!-- continut: foto + bio, vezi Atomul 4 --> </section> <!-- 2c. Sectiunea contact --> <section class="contact"> <h2>Contact</h2> <!-- mailto + retele sociale, vezi Atomul 5 --> </section> </main> <!-- 3. Subsol --> <footer> <p>© 2025 Ana Ionescu. Toate drepturile rezervate.</p> </footer> </body> </html>
<header>— antetul paginii: contine de obicei h1 si subtitlu<main>— continutul principal, unic pe pagina; sarit de cititoarele de ecran la navigare<section>— o zona tematica distincta (galerie, despre, contact); poate aparea de mai multe ori<footer>— subsolul paginii: copyright, link-uri secundare
4. Sectiunea "Despre artist" cu Flexbox
<section class="despre"> <h2>Despre artist</h2> <div class="despre-continut"> <img src="imagini/foto-profil.jpg" alt="Fotografia artistei Ana Ionescu" class="foto-profil" > <div class="bio"> <h3>Ana Ionescu</h3> <p> Sunt eleva in clasa a XI-a la Liceul de Arte, sectia Arte Vizuale. Lucrez cu acrilice, carbune si acuarela. Ma inspira natura si portretul uman. </p> <p> Am participat la expozitia scolara "Primavara Artelor" in 2024 si 2025. Tehnica mea preferata este portretul in carbune pe hartie Canson. </p> </div> </div> </section>
.despre-continut { display: flex; /* copiii se aseaza orizontal */ gap: 32px; /* spatiu intre fotografie si text */ align-items: flex-start; /* aliniaza in sus, nu centrat vertical */ flex-wrap: wrap; /* pe telefon: trec pe rand nou, nu se inghesuie */ } .foto-profil { width: 180px; height: 180px; object-fit: cover; /* decupeaza patrat, fara distorsiune */ border-radius: 50%; /* face fotografia rotunda */ flex-shrink: 0; /* nu permite micsorarea fotografiei */ } .bio { flex: 1; /* preia tot spatiul ramas dupa fotografie */ } .bio h3 { margin-top: 0; font-size: 1.3rem; }
CSS Grid — pentru asezari bidimensionale (randuri SI coloane simultan): galeria de imagini unde vrei celule egale pe mai multe randuri.
CSS Flexbox — pentru asezari unidimensionale (un rand SAU o coloana): foto + text alaturate, sau o bara de navigare cu butoane.
Pe o pagina reala le vei folosi pe ambele — Grid pentru grila galeriei, Flexbox pentru asezarea foto-bio.
5. Sectiunea de contact cu mailto si retele sociale
<section class="contact"> <h2>Contact</h2> <p> Esti interesat de una dintre lucrarile mele sau vrei sa colaboram? Scrie-mi un mesaj! </p> <ul class="contact-lista"> <!-- Link email: deschide aplicatia de email --> <li> <a href="mailto:ana.ionescu@arte.ro"> ana.ionescu@arte.ro </a> </li> <!-- Link retea sociala: se deschide in tab nou --> <li> <a href="https://instagram.com/ana.arte.vizuale" target="_blank" rel="noopener noreferrer" > Instagram: @ana.arte.vizuale </a> </li> <!-- Portofoliu pe Behance (optional) --> <li> <a href="https://behance.net/ana-ionescu" target="_blank" rel="noopener noreferrer" > Profil Behance </a> </li> </ul> </section>
Cand deschizi un link extern cu target="_blank", pagina noua poate — tehnic — accesa fereastra ta originala prin JavaScript. Atributul rel="noopener noreferrer" blocheaza acest acces si nu transmite adresa paginii tale catre site-ul destinatie. Este o buna practica de securitate si confidentialitate, recomandata pentru toate link-urile externe care se deschid in tab nou.
.contact-lista { list-style: none; /* elimina punctele de lista */ padding: 0; margin-top: 1rem; } .contact-lista li { margin-bottom: 0.75rem; } .contact-lista a { color: #5c4b3a; /* maro calduros — asociat cu arta pe hartie */ font-size: 1.05rem; text-decoration: none; } .contact-lista a:hover { text-decoration: underline; }
6. Pagina completa — cod final integrat
<!DOCTYPE html> <html lang="ro"> <head> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Ana Ionescu — Portofoliu Arte Vizuale</title> <link rel="stylesheet" href="stil.css"> </head> <body> <header class="site-header"> <h1>Ana Ionescu</h1> <p class="subtitlu">Arte vizuale · Pictura · Desen</p> </header> <main> <section class="galerie"> <h2>Lucrarile mele</h2> <div class="grid-galerie"> <figure class="lucrare"> <img src="imagini/lucrare1.jpg" alt="Portret in carbune, 30x40 cm, 2025"> <figcaption><strong>Portret I</strong><br> Carbune pe hartie, 30×40 cm</figcaption> </figure> <figure class="lucrare"> <img src="imagini/lucrare2.jpg" alt="Natura statica in acuarela, 25x35 cm, 2025"> <figcaption><strong>Natura statica</strong><br> Acuarela, 25×35 cm</figcaption> </figure> <figure class="lucrare"> <img src="imagini/lucrare3.jpg" alt="Peisaj urban in acril, 40x60 cm, 2024"> <figcaption><strong>Oras de seara</strong><br> Acril pe panza, 40×60 cm</figcaption> </figure> </div> </section> <section class="despre"> <h2>Despre artist</h2> <div class="despre-continut"> <img src="imagini/foto-profil.jpg" alt="Fotografia artistei Ana Ionescu" class="foto-profil"> <div class="bio"> <h3>Ana Ionescu</h3> <p>Eleva in clasa a XI-a Arte Vizuale. Lucrez cu acrilice, carbune si acuarela. Ma inspira natura si portretul uman.</p> <p>Participanta la "Primavara Artelor" 2024 si 2025.</p> </div> </div> </section> <section class="contact"> <h2>Contact</h2> <p>Interesat de o lucrare? Trimite-mi un mesaj.</p> <ul class="contact-lista"> <li><a href="mailto:ana.ionescu@arte.ro"> ana.ionescu@arte.ro</a></li> <li><a href="https://instagram.com/ana.arte.vizuale" target="_blank" rel="noopener noreferrer"> Instagram: @ana.arte.vizuale</a></li> </ul> </section> </main> <footer> <p>© 2025 Ana Ionescu. Toate drepturile rezervate.</p> </footer> </body> </html>
- figure + figcaption — fiecare lucrare cu titlul si tehnica, semantic si accesibil
- CSS Grid (auto-fill + minmax) — galerie responsive fara JavaScript si fara media queries
- Flexbox (despre-continut) — fotografie + bio alaturate; pe telefon trec pe rand nou automat
- mailto: — contact simplu, direct, fara server
- rel="noopener noreferrer" — securitate pentru link-urile externe in tab nou