# Izradite bankarsku aplikaciju, dio 2: Izgradite obrazac za prijavu i registraciju
```mermaid
journey
title Vaše Putovanje Razvoja Obrasca
section Osnove HTML-a
Razumjeti elemente obrasca: 3: Student
Naučiti vrste unosa: 4: Student
Ovladati pristupačnošću: 4: Student
section Integracija JavaScripta
Rukovati slanjem obrasca: 4: Student
Implementirati AJAX komunikaciju: 5: Student
Obrađivati odgovore servera: 5: Student
section Sustavi Validacije
Kreirati višeslojnu validaciju: 5: Student
Poboljšati korisničko iskustvo: 5: Student
Osigurati integritet podataka: 5: Student
```
## Predpredavanje Kviz
[Predpredavanje kviz](https://ff-quizzes.netlify.app/web/quiz/43)
Jeste li ikada ispunili obrazac online i on vam odbije format e-pošte? Ili izgubili sve informacije kad ste kliknuli pošalji? Svi smo se susreli s tim frustrirajućim iskustvima.
Obrasci su most između vaših korisnika i funkcionalnosti vaše aplikacije. Kao što kontrolori leta koriste pažljive protokole za sigurno usmjeravanje aviona do odredišta, tako dobro dizajnirani obrasci pružaju jasne povratne informacije i sprječavaju skupe pogreške. Loši obrasci, s druge strane, mogu brzo otjerati korisnike, kao što nesporazum na užurbanom aerodromu može izazvati neželjene posljedice.
U ovom ćemo satu pretvoriti vašu statičnu bankarsku aplikaciju u interaktivnu aplikaciju. Naučit ćete kako graditi obrasce koji provjeravaju korisničke unose, komuniciraju sa serverima i pružaju korisne povratne informacije. Zamislite to kao izgradnju kontrolnog sučelja koje korisnicima omogućuje navigaciju funkcijama vaše aplikacije.
Na kraju ćete imati kompletan sustav za prijavu i registraciju s validacijom koji usmjerava korisnike prema uspjehu umjesto frustraciji.
```mermaid
mindmap
root((Razvoj Obrasca))
HTML Temelj
Semantički Elementi
Tipovi Unosa
Pristupačnost
Povezanost Oznaka
Korisničko Iskustvo
Povratne Informacije Validacije
Prevencija Grešaka
Stanja Učitavanja
Poruke o Uspjehu
JavaScript Integracija
Rukovanje Događajima
AJAX Komunikacija
Obrada Podataka
Upravljanje Pogreškama
Slojevi Validacije
HTML5 Validacija
Logika na Klijentskoj Strani
Sigurnost na Serverskoj Strani
Progresivno Poboljšanje
Moderni Obrasci
Fetch API
Async/Await
Form Data API
Rukovanje Promiseima
```
## Preduvjeti
Prije nego što počnemo graditi obrasce, provjerimo jeste li sve pravilno postavili. Ova lekcija nastavlja točno tamo gdje smo stali u prethodnoj, pa ako ste preskočili naprijed, možda biste prvo htjeli vratiti se i uspostaviti osnovno funkcioniranje.
### Potrebna postavka
| Komponenta | Status | Opis |
|-----------|--------|-------|
| [HTML predlošci](../1-template-route/README.md) | ✅ Potrebno | Osnovna struktura vaše bankarske aplikacije |
| [Node.js](https://nodejs.org) | ✅ Potrebno | JavaScript okruženje za server |
| [Bankarski API server](../api/README.md) | ✅ Potrebno | Backend servis za pohranu podataka |
> 💡 **Savjet za razvoj**: Istovremeno ćete pokretati dva odvojena servera – jedan za vašu frontend bankarsku aplikaciju i drugi za backend API. Ova postavka odražava stvarni razvojni scenarij gdje frontend i backend servisi rade neovisno.
### Konfiguracija servera
**Vaše razvojno okruženje će uključivati:**
- **Frontend server**: Servira vašu bankarsku aplikaciju (obično port `3000`)
- **Backend API server**: Rukuje pohranom i dohvaćanjem podataka (port `5000`)
- **Oba servera** mogu raditi istovremeno bez sukoba
**Testiranje povezivanja s API-jem:**
```bash
curl http://localhost:5000/api
# Očekivani odgovor: "Bank API v1.0.0"
```
**Ako vidite odgovor s verzijom API-ja, spremni ste za nastavak!**
---
## Razumijevanje HTML obrazaca i kontrola
HTML obrasci su način na koji korisnici komuniciraju s vašom web aplikacijom. Zamislite ih kao telegrafski sustav koji je u 19. stoljeću povezivao udaljena mjesta – oni su komunikacijski protokol između korisničke namjere i odgovora aplikacije. Kad se dizajniraju s pažnjom, hvataju pogreške, usmjeravaju format unosa i pružaju korisne sugestije.
Moderni obrasci su znatno sofisticiraniji od običnih tekstualnih unosa. HTML5 je uveo specijalizirane tipove unosa koji automatski rukuju provjerom valjanosti e-pošte, formatiranjem brojeva i odabirom datuma. Ove su inovacije korisne i za pristupačnost i za iskustvo mobilnih korisnika.
### Bitni elementi obrasca
**Gradivni blokovi koje svaki obrazac treba:**
```html
```
**Evo što ovaj kod radi:**
- **Stvara** kontejner obrasca s jedinstvenim identifikatorom
- **Navođenjem** HTTP metode za slanje podataka
- **Povezuje** oznake s unosima radi pristupačnosti
- **Definira** gumb za slanje za procesiranje obrasca
### Moderni tipovi unosa i atributi
| Tip unosa | Namjena | Primjer korištenja |
|-----------|---------|-------------------|
| `text` | Opći tekstualni unos | `` |
| `email` | Validacija e-pošte | `` |
| `password` | Skriveni tekst | `` |
| `number` | Numerički unos | `` |
| `tel` | Telefonski brojevi | `` |
> 💡 **Prednost modernog HTML5**: Korištenje specifičnih tipova unosa omogućuje automatsku validaciju, odgovarajuće tipkovnice na mobilnim uređajima i bolju podršku pristupačnosti bez dodatnog JavaScripta!
### Tipovi gumba i ponašanje
```html
```
**Što svaki tip gumba radi:**
- **Submit gumbi**: Pokreću slanje obrasca i šalju podatke na određenu adresu
- **Reset gumbi**: Vraćaju sva polja obrasca u početno stanje
- **Obični gumbi**: Nemaju zadano ponašanje, zahtijevaju prilagođeni JavaScript da bi funkcionirali
> ⚠️ **Važna napomena**: `` element je samostalno zatvoreni tag i ne treba mu zatvarajući tag. Moderni je običaj pisati `` bez kosa crte.
### Izrada obrasca za prijavu
Sad ćemo napraviti praktični obrazac za prijavu koji demonstrira moderne prakse HTML obrazaca. Počet ćemo s osnovnom strukturom i postupno ćemo ga poboljšavati s pristupačnostima i validacijom.
```html
Bank App
Login
```
**Pregled što se ovdje događa:**
- **Strukturira** obrazac pomoću semantičkih HTML5 elemenata
- **Grupira** povezane elemente s `div` kontejnerima s opisnim klasama
- **Povezuje** oznake i unose pomoću atributa `for` i `id`
- **Uključuje** moderne atribute poput `autocomplete` i `placeholder` za bolje korisničko iskustvo
- **Dodaje** `novalidate` za rukovanje validacijom putem JavaScript-a umjesto zadane provjere preglednika
### Snaga ispravnih oznaka (labela)
**Zašto oznake (label) imaju važnost u modernom web razvoju:**
```mermaid
graph TD
A[Oznaka Elementa] --> B[Pomoć za Čitače Ekrana]
A --> C[Proširenje Cilja Klikom]
A --> D[Validacija Obrasca]
A --> E[SEO Prednosti]
B --> F[Pristupačno svim korisnicima]
C --> G[Bolje iskustvo na mobitelu]
D --> H[Jasne poruke o pogreškama]
E --> I[Bolji rang na pretraživaču]
```
**Što ispravne oznake omogućuju:**
- **Omogućuju** čitačima ekrana da jasno najave polja obrasca
- **Povećavaju** područje klikabilnosti (klik na oznaku fokusira unos)
- **Poboljšavaju** upotrebljivost na mobilnim uređajima većim područjima za dodir
- **Podržavaju** validaciju obrasca korisnim porukama o pogreškama
- **Unapređuju** SEO pružajući semantičko značenje poljima obrasca
> 🎯 **Cilj pristupačnosti**: Svaki unos u obrascu treba imati pridruženu oznaku. Ova jednostavna praksa čini vaše obrasce dostupnima svima, uključujući korisnike s invaliditetom, i poboljšava iskustvo za sve korisnike.
### Izrada obrasca za registraciju
Obrazac za registraciju zahtijeva detaljnije informacije za stvaranje potpunog korisničkog računa. Izgradimo ga koristeći moderne HTML5 značajke i poboljšanu pristupačnost.
```html
Register
```
**U gornjem primjeru smo:**
- **Organizirali** svako polje unutar `div` kontejnera radi bolje stilizacije i izgleda
- **Dodali** odgovarajuće atribute `autocomplete` radi podrške automatskom popunjavanju preglednika
- **Uključili** korisne pomoćne tekstove (placeholder) koji vode korisnika kod unosa
- **Postavili** razumno zadane vrijednosti koristeći atribut `value`
- **Koristili** atribute za validaciju poput `required`, `maxlength` i `min`
- **Primijenili** tip unosa `number` za polje stanja računa s podrškom za decimalne brojeve
### Istraživanje tipova unosa i ponašanja
**Moderni tipovi unosa pružaju dodatne mogućnosti:**
| Značajka | Korist | Primjer |
|----------|--------|---------|
| `type="number"` | Numerička tipkovnica na mobitelima | Lakše unošenje stanja računa |
| `step="0.01"` | Kontrola decimale | Omogućuje unose s centima u valuti |
| `autocomplete` | Autofill preglednika | Brže popunjavanje obrasca |
| `placeholder` | Kontekstualni savjeti | Usmjerava očekivanja korisnika |
> 🎯 **Izazov za pristupačnost**: Pokušajte koristiti obrasce samo pomoću tipkovnice! Koristite `Tab` za kretanje između polja, `Space` za označavanje okvira, te `Enter` za slanje obrasca. Ovo će vam pomoći shvatiti kako korisnici s čitačima ekrana koriste vaše obrasce.
### 🔄 **Pedagoški pregled**
**Razumijevanje osnova obrazaca**: Prije implementacije JavaScripta, provjerite razumijete:
- ✅ Kako semantički HTML kreira pristupačne strukture obrazaca
- ✅ Zašto tipovi unosa utječu na tipkovnice na mobitelima i validaciju
- ✅ Odnos između oznaka i kontrola obrasca
- ✅ Kako atributi obrasca utječu na zadanom ponašanju preglednika
**Brzi samoprovjera**: Što se dogodi kad pošaljete obrazac bez JavaScript obrade?
*Odgovor: Preglednik izvršava zadano slanje, obično preusmjeravanje na URL akcije*
**Prednosti HTML5 obrazaca**: Moderni obrasci pružaju:
- **Ugrađenu validaciju**: Automatska provjera formata e-pošte i brojeva
- **Mobilnu optimizaciju**: Odgovarajuće tipkovnice za različite tipove unosa
- **Pristupačnost**: Podrška za čitače ekrana i navigaciju tipkovnicom
- **Postupno poboljšanje**: Radi čak i kad je JavaScript isključen
## Razumijevanje metoda slanja obrasca
Kad netko ispuni vaš obrazac i klikne pošalji, ti podaci moraju negdje otići – obično na server koji ih može spremiti. Postoji nekoliko načina za to i znati koji koristiti može vam kasnije uštedjeti glavobolju.
Pogledajmo što se zapravo događa kad netko klikne gumb za slanje.
### Zadano ponašanje obrasca
Prvo, promatrat ćemo što se događa s osnovnim slanjem obrasca:
**Testirajte svoje trenutne obrasce:**
1. Kliknite gumb *Registriraj* u obrascu
2. Promatrajte promjene u adresnoj traci vašeg preglednika
3. Primijetite kako se stranica osvježava i podaci pojavljuju u URL-u

### Usporedba HTTP metoda
```mermaid
graph TD
A[Podnošenje obrasca] --> B{HTTP Metoda}
B -->|GET| C[Podaci u URL-u]
B -->|POST| D[Podaci u tijelu zahtjeva]
C --> E[Vidljivo u adresnoj traci]
C --> F[Ograničena veličina podataka]
C --> G[Moguće označiti]
D --> H[Skriveno iz URL-a]
D --> I[Veliki kapacitet podataka]
D --> J[Sigurnije]
```
**Razumijevanje razlika:**
| Metoda | Namjena | Lokacija podataka | Razina sigurnosti | Ograničenje veličine |
|--------|---------|-------------------|-------------------|----------------------|
| `GET` | Pretraživanje, filteri | URL parametri | Niska (vidljivo) | ~2000 znakova |
| `POST` | Korisnički računi, osjetljivi podaci | Tijelo zahtjeva | Viša (skriveno) | Nema praktične granice |
**Osnovne razlike koje treba razumjeti:**
- **GET**: Dodaje podatke obrasca u URL kao parametre upita (pogodno za pretraživanja)
- **POST**: Uključuje podatke u tijelo zahtjeva (bitno za osjetljive informacije)
- **Ograničenja GET-a**: Veličina, vidljivi podaci, trajna povijest preglednika
- **Prednosti POST-a**: Veliki kapacitet podataka, zaštita privatnosti, podrška za prijenos datoteka
> 💡 **Dobra praksa**: Koristite `GET` za obrasce pretraživanja i filtere (dohvat podataka), a `POST` za registraciju korisnika, prijavu i stvaranje podataka.
### Konfiguriranje slanja obrasca
Konfigurirajmo obrazac za registraciju da pravilno komunicira s backend API-jem koristeći POST metodu:
```html
```
**Razumijevanje poboljšane validacije:**
- **Kombinira** indikatore obaveznih polja s korisnim opisima
- **Uključuje** `pattern` atribute za validaciju formata
- **Pruža** `title` atribute radi pristupačnosti i opisa alata
- **Dodaje** pomoćni tekst za vođenje unosa korisnika
- **Koristi** semantičku HTML strukturu za bolju pristupačnost
### Napredna pravila validacije
**Što svako pravilo validacije postiže:**
| Polje | Pravila validacije | Korisnička prednost |
|-------|--------------------|---------------------|
| Korisničko ime | `required`, `minlength="3"`, `maxlength="20"`, `pattern="[a-zA-Z0-9_]+"` | Osigurava valjane, jedinstvene identifikatore |
| Valuta | `required`, `maxlength="3"`, `pattern="[A-Z$€£¥₹]+"` | Prima uobičajene simbole valuta |
| Stanje računa | `min="0"`, `step="0.01"`, `type="number"` | Sprečava negativne iznose |
| Opis | `maxlength="100"` | Razumna ograničenja duljine |
### Testiranje ponašanja validacije
**Isprobajte ove scenarije validacije:**
1. **Pošaljite** obrazac s praznim obaveznim poljima
2. **Unesite** korisničko ime kraće od 3 znaka
3. **Pokušajte** s posebnim znakovima u polju korisničkog imena
4. **Unesite** negativan iznos stanja

**Što ćete primijetiti:**
- **Preglednik prikazuje** nativne poruke o grešci validacije
- **Promjene stilova** temelje se na stanjima `:valid` i `:invalid`
- **Slanje obrasca** se sprječava dok sve validacije ne prođu
- **Fokus se automatski** pomjera na prvo polje koje nije valjano
### Validacija na klijentovoj i serverskoj strani
```mermaid
graph LR
A[Validacija na strani klijenta] --> B[Trenutna povratna informacija]
A --> C[Bolje korisničko iskustvo]
A --> D[Smanjeno opterećenje servera]
E[Validacija na strani servera] --> F[Sigurnost]
E --> G[Integritet podataka]
E --> H[Poslovna pravila]
A -.-> I[Oboje je potrebno]
E -.-> I
```
**Zašto vam trebaju oba sloja:**
- **Validacija na klijentu**: Pruža trenutnu povratnu informaciju i poboljšava iskustvo korisnika
- **Validacija na serveru**: Osigurava sigurnost i obrađuje složena poslovna pravila
- **Kombinirani pristup**: Stvara robusne, korisnički prihvatljive i sigurne aplikacije
- **Postepeno poboljšanje**: Radi čak i kad je JavaScript onemogućen
> 🛡️ **Podsjetnik o sigurnosti**: Nikada nemojte vjerovati samo validaciji na klijentu! Zlonamjerni korisnici mogu zaobići provjere na klijentskoj strani, stoga je validacija na serveru ključna za sigurnost i integritet podataka.
### ⚡ **Što možete napraviti u sljedećih 5 minuta**
- [ ] Testirajte vaš obrazac s nevaljanim podacima i pogledajte poruke validacije
- [ ] Pokušajte poslati obrazac s onemogućenim JavaScriptom i pogledajte HTML5 validaciju
- [ ] Otvorite DevTools preglednika i pregledajte podatke obrasca koji se šalju serveru
- [ ] Eksperimentirajte s različitim tipovima unosa i promatrajte promjene tipkovnice na mobilnom uređaju
### 🎯 **Što možete postići u ovom satu**
- [ ] Završiti kviz nakon lekcije i razumjeti pojmove rukovanja obrascima
- [ ] Implementirati izazov sa sveobuhvatnom validacijom i povratnim informacijama u stvarnom vremenu
- [ ] Dodati CSS stilizaciju za profesionalan izgled obrazaca
- [ ] Stvoriti rukovanje pogreškama za duplicirane korisničke nazive i pogreške servera
- [ ] Dodati polja za potvrdu lozinke s odgovarajućom validacijom
### 📅 **Vaše tjedno putovanje do majstorstva obrazaca**
- [ ] Završiti cijelu bankarsku aplikaciju s naprednim funkcijama obrazaca
- [ ] Implementirati mogućnosti slanja datoteka za profilne slike ili dokumente
- [ ] Dodati višekoračne obrasce s indikatorima napretka i upravljanjem stanjima
- [ ] Kreirati dinamične obrasce koji se prilagođavaju izborima korisnika
- [ ] Implementirati automatsko spremanje i oporavak forme za bolje korisničko iskustvo
- [ ] Dodati naprednu validaciju poput verifikacije emaila i formatiranja telefonskih brojeva
### 🌟 **Vaše mjesečno majstorstvo frontend razvoja**
- [ ] Graditi složene aplikacije s uvjetnom logikom i radnim tokovima
- [ ] Naučiti biblioteke i okvire za brzi razvoj obrazaca
- [ ] Savladati smjernice pristupačnosti i principe inkluzivnog dizajna
- [ ] Implementirati internacionalizaciju i lokalizaciju za globalne obrasce
- [ ] Kreirati ponovo upotrebljive biblioteke i dizajn sustave za obrasce
- [ ] Doprinositi otvorenim projektima obrazaca i dijeliti najbolje prakse
## 🎯 Vaš vremenski plan ovladavanja razvojem obrazaca
```mermaid
timeline
title Razvoj obrazaca i napredovanje u učenju korisničkog iskustva
section Osnove HTML-a (15 minuta)
Semantički obrasci: Elementi obrazaca
: Vrste unosa
: Oznake i pristupačnost
: Postupno poboljšanje
section Integracija JavaScripta (25 minuta)
Obrada događaja: Slanje obrasca
: Prikupljanje podataka
: AJAX komunikacija
: Async/await obrasci
section Sustavi validacije (35 minuta)
Višeslojna sigurnost: HTML5 validacija
: Logika na strani klijenta
: Verifikacija na strani poslužitelja
: Rukovanje pogreškama
section Korisničko iskustvo (45 minuta)
Dorada sučelja: Stanja učitavanja
: Poruke o uspjehu
: Oporavak od pogrešaka
: Značajke pristupačnosti
section Napredni obrasci (1 tjedan)
Profesionalni obrasci: Dinamična validacija
: Višestepeni tijekovi rada
: Učitavanja datoteka
: Povratne informacije u stvarnom vremenu
section Vještine za poduzeća (1 mjesec)
Proizvodne aplikacije: Knjižnice obrazaca
: Strategije testiranja
: Optimizacija performansi
: Najbolje prakse sigurnosti
```
### 🛠️ Sažetak vašeg alata za razvoj obrazaca
Nakon završetka ove lekcije, sada ste ovladali:
- **HTML5 obrascima**: Semantička struktura, tipovi unosa i značajke pristupačnosti
- **JavaScript rukovanjem obrascima**: Upravljanje događajima, prikupljanje podataka i AJAX komunikacija
- **Arhitekturom validacije**: Višeslojna validacija za sigurnost i korisničko iskustvo
- **Asinkronim programiranjem**: Moderni fetch API i async/await obrasci
- **Upravljanjem pogreškama**: Sveobuhvatno rukovanje pogreškama i sustavi povratne informacije korisniku
- **Dizajnom korisničkog iskustva**: Stanja učitavanja, poruke uspjeha i oporavak od pogrešaka
- **Postepenim poboljšanjem**: Obrasci koji rade na svim preglednicima i mogućnostima
**Primjena u stvarnom svijetu**: Vaše vještine za razvoj obrazaca primjenjuju se direktno na:
- **E-trgovinu**: Procesi naplate, registracija računa i obrasci za plaćanje
- **Poslovni softver**: Sustavi za unos podataka, sučelja izvještavanja i aplikacije za radne tokove
- **Upravljanje sadržajem**: Platforme za objavljivanje, korisnički generirani sadržaj i administrativna sučelja
- **Financijske aplikacije**: Bankarska sučelja, investicijske platforme i sustavi transakcija
- **Zdravstvene sustave**: Portali za pacijente, zakazivanje termina i obrasci medicinskih evidencija
- **Obrazovne platforme**: Prijave na tečajeve, alati za procjenu i sustavi za upravljanje učenjem
**Stečene profesionalne vještine**: Sada možete:
- **Dizajnirati** pristupačne obrasce koji rade za sve korisnike uključujući osobe s invaliditetom
- **Implementirati** sigurnu validaciju obrasca koja sprječava korupciju podataka i sigurnosne propuste
- **Kreirati** responzivna korisnička sučelja koja pružaju jasne povratne informacije i upute
- **Otklanjati pogreške** složenih interakcija obrasca koristeći alate za razvoj i analizu mreže
- **Optimizirati** performanse obrasca putem učinkovitog rukovanja podacima i strategija validacije
**Ovladani koncepti frontend razvoja**:
- **Arhitektura navođena događajima**: Upravljanje i sustavi odgovora na korisničke interakcije
- **Asinkrono programiranje**: Ne-blokirajuća komunikacija sa serverom i rukovanje pogreškama
- **Validacija podataka**: Sigurnosne i integritetske provjere na klijentskoj i serverskoj strani
- **Dizajn korisničkog iskustva**: Intuitivna sučelja koja vode korisnike prema uspjehu
- **Inženjering pristupačnosti**: Inkluzivan dizajn koji radi za različite korisničke potrebe
**Sljedeća razina**: Spremni ste za istraživanje naprednih biblioteka obrazaca, implementaciju složenih pravila validacije ili izgradnju sustava za prikupljanje podataka razine poduzeća!
🌟 **Postignuće otključano**: Izgradili ste kompletan sustav rukovanja obrascima s profesionalnom validacijom, rukovanjem pogreškama i obrascima korisničkog iskustva!
---
---
## GitHub Copilot Agent Challenge 🚀
Koristite način rada Agent za dovršetak sljedećeg izazova:
**Opis:** Unaprijedite obrazac za registraciju sveobuhvatnom validacijom na strani klijenta i povratnom informacijom korisniku. Ovaj izazov pomoći će vam u praksi validacije obrazaca, rukovanju pogreškama i poboljšavanju korisničkog iskustva interaktivnim povratnim informacijama.
**Prompt:** Kreirajte kompletan sustav validacije obrasca za registracijski obrazac koji uključuje: 1) Povratne informacije o validaciji u stvarnom vremenu za svako polje dok korisnik tipka, 2) Prilagođene poruke validacije koje se pojavljuju ispod svakog polja za unos, 3) Polje za potvrdu lozinke s validacijom podudaranja, 4) Vizualne pokazatelje (kao što su zelene kvačice za valjana polja i crvena upozorenja za nevaljana), 5) Gumb za slanje koji se aktivira samo kada sve validacije prođu. Koristite HTML5 atribute za validaciju, CSS za stiliziranje stanja validacije te JavaScript za interaktivno ponašanje.
Saznajte više o [agent mode](https://code.visualstudio.com/blogs/2025/02/24/introducing-copilot-agent-mode) ovdje.
## 🚀 Izazov
Prikažite poruku o pogrešci u HTML-u ako korisnik već postoji.
Evo primjera kako završna stranica za prijavu može izgledati nakon malo stiliziranja:

## Kviz nakon predavanja
[Kviz nakon predavanja](https://ff-quizzes.netlify.app/web/quiz/44)
## Pregled i samostalan rad
Programeri su vrlo kreativno pristupili izradi obrazaca, posebno u vezi sa strategijama validacije. Istražite različite tokove obrazaca pregledavajući [CodePen](https://codepen.com); možete li pronaći neke zanimljive i inspirativne obrasce?
## Zadatak
[Stilizirajte svoju bankarsku aplikaciju](assignment.md)
---
**Odricanje od odgovornosti**:
Ovaj dokument preveden je korištenjem AI usluge za prevođenje [Co-op Translator](https://github.com/Azure/co-op-translator). Iako nastojimo postići točnost, imajte na umu da automatizirani prijevodi mogu sadržavati pogreške ili netočnosti. Izvorni dokument na izvornom jeziku treba smatrati autoritativnim izvorom. Za kritične informacije preporučuje se profesionalni ljudski prijevod. Ne snosimo odgovornost za bilo kakve nesporazume ili pogrešna tumačenja koja proizlaze iz korištenja ovog prijevoda.