Curs Web Development
Curs HTML
Curs CSS
Curs Javascript
Curs PHP
Curs Phyton
Curs SQL
Curs SEO

Imagini, media și formulare

În această secțiune analizăm modul în care anumite elemente speciale sunt tratate în CSS. Imaginile, materialele media și formularele se comportă diferit în ceea ce privește stilizarea, iar înțelegerea limitărilor și posibilităților CSS te poate scuti de multă frustrare.

Vom evidenția cele mai importante aspecte pe care ar trebui să le cunoști pentru a stiliza eficient aceste componente și pentru a evita comportamentele neașteptate.

Elemente înlocuite

Imaginile și videoclipurile fac parte din categoria elementelor înlocuite. Asta înseamnă că CSS poate controla poziționarea lor în pagină, dar nu și conținutul intern.

Aceste elemente au de obicei un raport de aspect (aspect ratio), adică o dimensiune intrinsecă pe orizontală și verticală. Ele sunt afișate implicit la dimensiunea lor naturală, dacă nu intervenim cu stiluri CSS.

În CSS, toate elementele sunt tratate ca „cutii”. Dacă o imagine este plasată într-o cutie mai mică sau mai mare decât dimensiunea ei intrinsecă, ea va fi redimensionată automat — fie se micșorează, fie se mărește, până când poate chiar să se reverse în afara containerului.

În exemplul următor avem două cutii de 200px:

🔧 Exemplu elemente înlocuite - imagini

Controlul dimensiunii imaginilor

Ce putem face cu o imagine care se revarsă?

O tehnică simplă și eficientă, prezentată în lecțiile anterioare, este setarea unei lățimi maxime de 100% pentru imagine. Această abordare funcționează și pentru alte elemente media precum <video> sau <iframe>.

În exemplul anterior, poți decomenta linia max-width: 100% pentru a vedea rezultatul.

Există și alte variante. Poți alege să dimensionezi o imagine astfel încât să acopere complet containerul. Aici intervine proprietatea object-fit, care oferă mai multe opțiuni de redimensionare:

🔧 Exemplu object-fit

Poți încerca și valoarea fill, dar aceasta nu păstrează raportul de aspect, ceea ce poate duce la deformarea imaginii.

Comportamentul elementelor înlocuite în layout

Atunci când folosești diverse tehnici CSS de machetare (layout), elementele înlocuite — precum imaginile sau videoclipurile — pot avea un comportament diferit față de celelalte elemente HTML.

De exemplu, într-o structură grid sau flex, majoritatea elementelor se extind automat pentru a umple spațiul disponibil. Imaginile, însă, nu se extind implicit și vor fi aliniate în zona de start a containerului.

Poți observa acest comportament în exemplul de mai jos, unde toate elementele au o culoare de fundal și se extind complet — cu excepția imaginii.

🔧 Exemplu comportament elemente înlocuite

Reține: când vei studia machetarea paginilor în lecțiile următoare, ține cont că imaginile dintr-o structură grid sau flex au comportamente implicite diferite față de celelalte elemente. Este important să le stilizezi explicit pentru a obține rezultatul dorit.

Elemente de formular

Elementele de formular pot fi destul de dificil de stilizat cu ajutorul CSS. Dacă ai parcurs secțiunea dedicată formularelor din cursul HTML, ai văzut deja câteva metode de stilizare pe care nu le vom relua complet aici.

Totuși, există câteva concepte importante pe care le vom discuta în această secțiune.

Multe controale de formular sunt introduse în pagină cu ajutorul elementului <input type="text">, care definește câmpuri simple precum câmpul text, dar și câmpuri mai complexe introduse de HTML5, cum ar fi date și color.

Există și elemente suplimentare, precum <textarea> pentru text pe mai multe linii, și etichete structurale precum <fieldset> și <legend>.

HTML5 oferă atribute care permit dezvoltatorilor să indice ce câmpuri sunt obligatorii și ce tip de conținut trebuie introdus. Dacă utilizatorul introduce date incorecte sau omite completarea unui câmp, browserul poate afișa automat un mesaj de eroare.

Din cauza diversității browserelor, există o inconsistență în ceea ce privește stilizarea și personalizarea elementelor de formular.

Stilizarea elementelor input de tip text

Elementele care permit introducerea de text, precum <input type="text">, <input type="email"> și <textarea>, sunt relativ ușor de stilizat și se comportă similar cu alte „cutii” din pagină.

Totuși, stilul implicit aplicat acestor elemente variază în funcție de sistemul de operare și browserul utilizatorului.

În exemplul de mai jos, vei observa că marginea, umplutura și chenarul se aplică așa cum te-ai aștepta. Am folosit selectori de atribute pentru a ținti diferitele tipuri de input.

Experimentează cu stilul formularului: modifică chenarul (border), umplutura (padding), culoarea de fundal (background) și tipul de font (font-family).

🔧 Exemplu stilizare input text

Important! Când stilizezi elementele de formular, asigură-te că utilizatorii pot identifica ușor că interacționează cu un formular.

Deși poți crea câmpuri fără chenar sau culoare de fundal, acestea pot deveni greu de observat și confuze. Utilizatorii nu sunt designeri și se așteaptă ca formularele să arate într-un mod familiar. Evită modificările dramatice care pot afecta claritatea și uzabilitatea.

Așa cum am explicat în cursul HTML, multe dintre tipurile de input mai complexe sunt dependente de sistemul de operare și nu pot fi personalizate complet cu CSS.

Din acest motiv, formularele complexe pot arăta diferit în funcție de browser. Testează-le în cât mai multe medii pentru a te asigura că utilizatorii au o experiență plăcută și intuitivă.

Moștenirea (Inheritance) și formularele

În unele browsere, elementele de formular nu moștenesc automat stilurile aplicate fontului. Dacă dorești ca aceste elemente să respecte stilizarea definită pentru <body> sau pentru un element părinte, folosește următoarea regulă CSS:


button, 
input, 
select, 
textarea { 
  font-family: inherit; 
  font-size: 100%; 
}

Elementele de formular și dimensiunile cutiei (box-sizing)

Dimensiunile elementelor de formular pot varia semnificativ în funcție de browser. Pentru a te asigura că acestea au o lățime și înălțime consistentă, este recomandat să resetezi margin și padding la 0, apoi să le redefinești pentru fiecare element pe care dorești să-l personalizezi.


button, 
input, 
select, 
textarea {  
  box-sizing: border-box; 
  padding: 0;
  margin: 0; 
}

În plus, pentru a preveni afișarea inutilă a barei de scroll în Internet Explorer, setează overflow: auto; pe elementul <textarea>:


textarea {
  overflow: auto;
}

Dacă ar fi să sintetizăm toate aceste reguli într-un mic „reset” CSS, care să ofere o bază coerentă pentru stilizarea formularelor, ar arăta astfel:


button, 
input, 
select, 
textarea { 
  font-family: inherit; 
  font-size: 100%; 
  box-sizing: border-box; 
  padding: 0;
  margin: 0; 
}
textarea { 
  overflow: auto; 
}

Mulți dezvoltatori folosesc foi de stil de tip normalize, care aduc toate elementele HTML la același nivel de stilizare, indiferent de browser sau sistem de operare, înainte de a începe personalizarea propriu-zisă.

Deși aceste foi nu mai sunt la fel de esențiale ca în trecut, datorită îmbunătățirii consistentei între browsere, ele rămân utile în proiecte moderne.

Poți explora una dintre cele mai populare foi de stil: Normalize.css, folosită ca punct de plecare în numeroase proiecte web.

Accesibilitate în formulare

Accesibilitatea în formulare înseamnă să te asiguri că toți utilizatorii — inclusiv cei care folosesc cititoare de ecran, tastatură sau alte tehnologii asistive — pot interacționa ușor cu câmpurile și controalele din formular.

Un formular accesibil este clar, bine etichetat și oferă feedback util în caz de eroare.

Etichetarea corectă a câmpurilor

Fiecare câmp de formular trebuie să aibă o etichetă (<label>) asociată. Aceasta ajută cititoarele de ecran să identifice scopul câmpului.


<form>
  <label for="email">Adresa de e-mail</label>
  <input type="email" id="email" name="email" required>
</form>

Atribute ARIA și mesaje de ajutor

Poți folosi atribute precum aria-describedby pentru a lega un mesaj de ajutor sau eroare de un câmp:


<form>
  <label for="name">Nume</label>
  <input type="text" id="name" aria-describedby="nameHelp">
  <small id="nameHelp">Introduceți numele complet.</small>
</form>

Validare și feedback automat

HTML5 permite validarea automată cu atribute precum required, type și pattern. Browserul va afișa un mesaj de eroare dacă datele nu sunt introduse corect.


<form>
  <label for="phone">Telefon</label>
  <input type="tel" id="phone" name="phone" pattern="[0-9]{10}" required>
</form>

Exemplu complet de formular accesibil


<form>
  <fieldset>
    <legend>Contact</legend>

    <label for="email">Email</label>
    <input type="email" id="email" name="email" required aria-describedby="emailHelp">
    <small id="emailHelp">Vom folosi adresa doar pentru răspuns.</small>

    <label for="message">Mesaj</label>
    <textarea id="message" name="message" rows="4" required></textarea>

    <button type="submit">Trimite</button>
  </fieldset>
</form>

Reține: Accesibilitatea nu este doar despre conformitate legală — este despre respect și incluziune. Un formular accesibil este un semn de profesionalism și grijă față de toți utilizatorii.

Responsivitate și media queries

Un site modern trebuie să se adapteze la orice dimensiune de ecran — de la telefoane mobile la monitoare mari. CSS oferă instrumente puternice pentru a crea layout-uri flexibile și componente care se redimensionează automat.

Imaginile și formularele sunt elemente esențiale care trebuie să fie responsive, pentru a oferi o experiență bună pe orice dispozitiv.

Imagini responsive

O tehnică simplă pentru a face imaginile responsive este folosirea proprietății max-width: 100%. Aceasta asigură că imaginea nu va depăși dimensiunea containerului:


img {
  max-width: 100%;
  height: auto;
}

Formulare adaptabile

Formularele pot fi organizate în coloane pe ecrane mari și într-un layout vertical pe ecrane mici. Folosim @media pentru a adapta stilurile în funcție de dimensiunea viewportului.

🔧 Exemplu formular responsive

Responsivitatea nu înseamnă doar să „încapă” pe mobil — ci să fie ușor de folosit, lizibilă și bine organizată indiferent de dispozitiv.

Funcții CSS moderne aplicabile

CSS modern oferă funcții care permit control precis asupra dimensiunilor, proporțiilor și scalării elementelor. Acestea sunt utile mai ales în designuri responsive, unde flexibilitatea este esențială.

Funcția clamp()

clamp() permite definirea unei dimensiuni care se adaptează între o valoare minimă și maximă, în funcție de viewport. Este ideală pentru fonturi, margini sau spațieri fluide.


h1 {
  font-size: clamp(1.5rem, 5vw, 3rem);
}

Proprietatea aspect-ratio

Cu aspect-ratio poți seta proporția dintre lățime și înălțime a unui element, fără să fie nevoie de trucuri cu padding sau imagini de fundal.


img {
  aspect-ratio: 16 / 9;
  width: 100%;
  object-fit: cover;
}

Exemplu live cu clamp() și aspect-ratio

🔧 Exemplu funcții CSS moderne

Folosește clamp() pentru dimensiuni fluide și aspect-ratio pentru layouturi consistente. Aceste funcții simplifică mult designul responsive și elimină nevoia de hack-uri CSS vechi.

Personalizarea elementelor native

Unele elemente de formular, precum <select>, <checkbox> și <radio>, au un stil implicit controlat de sistemul de operare și browser. Acest lucru face ca personalizarea lor să fie mai dificilă și uneori inconsistentă.

Pentru a avea control complet asupra aspectului, putem folosi proprietatea appearance: none, care elimină stilul nativ și permite aplicarea propriilor reguli CSS.

Exemplu: stilizare <select> personalizat

🔧 Exemplu stilizare select

Alte elemente personalizabile

Checkbox-urile și butoanele radio pot fi ascunse și înlocuite cu elemente vizuale personalizate, dar necesită mai mult cod și atenție la accesibilitate.


input[type="checkbox"] {
  appearance: none;
  width: 20px;
  height: 20px;
  border: 2px solid gray;
  border-radius: 4px;
  background-color: white;
}

input[type="checkbox"]:checked {
  background-color: teal;
}

Personalizarea elementelor native poate îmbunătăți designul, dar trebuie făcută cu grijă. Asigură-te că funcționalitatea și accesibilitatea nu sunt afectate.

Testare cross-browser

Unul dintre cele mai importante aspecte în dezvoltarea web este testarea în mai multe browsere. Chiar dacă standardele CSS sunt tot mai bine respectate, există încă diferențe subtile în modul în care browserele interpretează stilurile — mai ales în cazul formularelor și elementelor media.

Este recomandat să testezi site-ul în cele mai populare browsere: Chrome, Firefox, Safari, Edge și chiar în versiunile mobile ale acestora.

Acest tip de input este stilizat diferit în funcție de browser și sistemul de operare. În unele cazuri, nu poate fi personalizat deloc cu CSS.

Exemplu: comportament diferit al <input type="date">

🔧 Exemplu input date

Recomandări pentru testare

Nu presupune că dacă ceva arată bine în Chrome, va arăta la fel peste tot. Testarea cross-browser este esențială pentru o experiență consistentă și profesională.

Recapitulare și bune practici

În această pagină am explorat modul în care CSS interacționează cu imagini, media și formulare. Am discutat despre comportamentul elementelor înlocuite, despre stilizarea și adaptarea formularelor, precum și despre funcții moderne și testare cross-browser. Mai jos găsești o sinteză utilă:

Checklist CSS pentru imagini și media

Checklist CSS pentru formulare

Recomandări generale

CSS este un instrument puternic, dar trebuie folosit cu grijă. O pagină bine stilizată nu este doar frumoasă — este accesibilă, responsivă și ușor de folosit pentru toți utilizatorii.


🧠 Quiz - CSS Media

Top