Ovaj projekt pomoći će vam da usavršite svoje vještine front-enda i naučit će vas kako izgraditi sučelje pomoću temeljnih web standarda.

Projekti su sjajan način da poboljšate svoje vještine HTML-a, CSS-a i JavaScripta i učvrstite važne koncepte i tehnike.

Jedan projekt s kojim možete započeti je knjiga recepata, koju možete pokrenuti u pregledniku kao što je Google Chrome ili Firefox.

U knjizi recepata, lijeva strana web stranice sadrži odjeljak u koji korisnik može dodati nove recepte. Na desnoj strani stranice korisnik može pregledavati i pretraživati ​​postojeće recepte.

Kako zamoliti korisnika da doda novi recept

Dodajte početni sadržaj u HTML, CSS i JavaScript datoteke. Ako niste upoznati s konceptima web razvoja, postoji mnogo mjesta gdje to možete učiniti naučite web razvoj online.

Ovdje također možete pogledati cijeli primjer knjige recepata GitHub repo.

  1. Dodajte osnovnu HTML strukturu u novu HTML datoteku pod nazivom index.html:
    html>
    <html>
    <glava>
    <titula>Aplikacija za receptetitula>
    glava>
    <tijelo>
    <nav>
    <h1>Aplikacija za recepteh1>
    nav>
    <divrazreda="kontejner">
    Sadržaj ovdje
    div>
    tijelo>
    html>
  2. Unutar klase spremnika, odvojite stranicu u lijevi i desni stupac:
    <divrazreda="lijevi stupac">

    div>
    <divrazreda="desni stupac">

    div>

  3. Unutar lijevog stupca dodajte obrazac za korisnikovo dodavanje novog recepta. Korisnik može unijeti naziv recepta, popis sastojaka i metodu:
    <h3>Dodaj recepth3>

    <oblik>
    <označitiza="naziv-recepta">Ime:označiti>
    <ulaznitip="tekst"iskaznica="naziv-recepta"potreban>
    <br />

    <označitiza="recept-sastojci">Sastojci:označiti>
    <tekstualno područjeiskaznica="recept-sastojci"redaka="5"potreban>tekstualno područje>
    <br />

    <označitiza="recept-metoda">metoda:označiti>
    <tekstualno područjeiskaznica="recept-metoda"redaka="5"potreban>tekstualno područje>
    <br />

    <dugmetip="podnijeti">Dodaj receptdugme>
    oblik>

  4. U oznaku head HTML datoteke dodajte vezu na novu CSS datoteku pod nazivom styles.css. Stvorite datoteku u istoj mapi kao i vaša HTML datoteka:
    <vezarel="list stilova"href="styles.css">
  5. Unutar CSS datoteke dodajte neki stil za cjelokupnu stranicu:
    tijelo {
    obitelj-fontova: sans-serif;
    }

    nav {
    boja pozadine: #333;
    položaj: fiksni;
    vrh: 0;
    širina: 100%;
    podstava: 20px;
    lijevo: 0;
    boja: bijela;
    poravnanje teksta: centar;
    }

    .kontejner {
    prikaz: savijati;
    flex-direction: red;
    opravdati-sadržaj: razmak između;
    margina: 150px 5%;
    }

    .lijevi-stupac {
    širina: 25%;
    }

    .desni stupac {
    širina: 65%;
    }

  6. Dodajte malo stila za Dodajte recepte oblik:
    oblik {
    prikaz: savijati;
    flex-direction: stupac;
    }

    označiti {
    margina-dno: 10px;
    }

    ulazni[vrsta="tekst"], tekstualno područje {
    podstava: 10px;
    margina-dno: 10px;
    granični radijus: 5px;
    granica: 1pxčvrsta#ccc;
    širina: 100%;
    dimenzioniranje kutije: rubni okvir;
    }

    dugme[vrsta="podnijeti"] {
    podstava: 10px;
    boja pozadine: #3338;
    boja: #F F F;
    granica: nikakav;
    granični radijus: 5px;
    kursor: pokazivač;
    }

  7. Na dnu oznake tijela u vašoj HTML datoteci dodajte vezu na JavaScript datoteku pod nazivom script.js. Stvorite datoteku u istoj mapi:
    <tijelo>
    Sadržaj
    <skriptasrc="script.js">skripta>
    tijelo>
  8. Unutar script.js upotrijebite metodu querySelector za prijeći DOM i dohvatite element obrasca sa stranice.
    konst oblik = dokument.querySelector('oblik');
  9. Napravite novi niz za pohranu recepata koje korisnik unese u obrazac:
    neka recepti = [];
  10. U novoj funkciji dobijte polja za naziv, sastojke i metodu unesena putem obrasca. Također možete implementirati provjera valjanosti obrazaca na strani klijenta kako biste spriječili nevažeće unose ili provjerili postoji li recept.
    funkcijarukovanjePošalji(događaj) {
    // Sprječavanje zadanog ponašanja podnošenja obrasca
    event.preventDefault();

    // Dobivanje naziva recepta, sastojaka i ulaznih vrijednosti metode
    konst nameInput = dokument.querySelector('#naziv-recepta');
    konst ingrInput = dokument.querySelector('#recept-sastojci');
    konst methodInput = dokument.querySelector('#recept-metoda');
    konst ime = imeInput.vrijednost.trim();
    konst sastojci = ingrInput.value.trim().split(',').karta(ja => i.trim());
    konst metoda = methodInput.value.trim();
    }
  11. Ako su unosi valjani, dodajte ih u polje recepata:
    ako (ime && sastojci.duljina > 0 && metoda) {
    konst newRecipe = { ime, sastojci, metoda };
    recepti.push (noviRecept);
    }
  12. Obrišite unose na obrascu:
    nameInput.value = '';
    ingrInput.value = '';
    methodInput.value = '';
  13. Nakon funkcije handleSubmit(), dodajte slušatelj događaja za pozivanje funkcije kada korisnik pošalje obrazac:
    form.addEventListener('podnijeti', handleSubmit);
  14. Otvorite index.html u pregledniku i pogledajte obrazac s lijeve strane:

Kako prikazati dodane recepte

Možete prikazati recepte pohranjene u nizu recepata na desnoj strani stranice.

  1. U HTML datoteku dodajte div za prikaz popisa recepata unutar desnog stupca. Dodajte još jedan div za prikaz poruke ako nema recepata:
    <divrazreda="desni stupac">
    <diviskaznica="popis recepata">div>
    <diviskaznica="bez recepata">Nemate recepte.div>
    div>
  2. Dodajte malo CSS stila za popis recepata:
    #popis-recepata {
    prikaz: rešetka;
    rešetka-predložak-stupci: ponoviti(auto-fit, minmax(300px, 1fr));
    grid-gap: 20px;
    }

    #bez-recepata {
    prikaz: savijati;
    boja pozadine: #FFCCCC;
    podstava: 20px;
    granični radijus: 8px;
    margin-top: 44px;
    }

  3. Na vrhu JavaScript datoteke preuzmite HTML elemente koji se koriste za prikaz popisa recepata i poruke o pogrešci:
    konst popis recepata = dokument.querySelector('#popis-recepata');
    konst noRecipes = dokument.getElementById('bez recepata');
  4. Unutar nove funkcije, prođite kroz svaki recept u nizu recepata. Za svaki recept izradite novi div za prikaz tog recepta:
    funkcijadisplayRecipes() {
    recipeList.innerHTML = '';
    recipes.forEach((recept, indeks) => {
    konst receptDiv = dokument.createElement('div');
    });
    }
  5. Dodajte neki sadržaj pojedinačnom divu recepta za prikaz naziva, sastojaka i metode. Div će također sadržavati gumb za brisanje. Ovu ćete funkciju dodati u kasnijim koracima:
    recipeDiv.innerHTML = `

    ${recept.name}</h3>

    <snažna>Sastojci:snažna></p>


      ${recept.ingredients.map(ingr =>`
    • ${ingr}
    • `
      ).pridružiti('')}
      </ul>

      <snažna>metoda:snažna></p>

      ${recept.metoda}</p>

  6. Dodajte klasu za stiliziranje diva:
    recipeDiv.classList.add('recept');
  7. Dodajte novi div u HTML element recipeList:
    RecipeList.appendChild (recipeDiv);
  8. Dodajte stil za klasu u CSS datoteku:
    .recept {
    granica: 1pxčvrsta#ccc;
    podstava: 10px;
    granični radijus: 5px;
    kutija-sjena: 0 2px 4pxrgba(0,0,0,.2);
    }

    .recepth3 {
    margin-top: 0;
    margina-dno: 10px;
    }

    .receptul {
    margina: 0;
    podstava: 0;
    u stilu popisa: nikakav;
    }

    .receptulli {
    margina-dno: 5px;
    }

  9. Provjerite postoji li više od jednog recepta. Ako je tako, sakrijte poruku pogreške:
    noRecipes.style.display = recipes.length > 0? 'ništa': 'fleksibilno';
  10. Pozovite novu funkciju unutar funkcije handleSubmit(), nakon dodavanja novog recepta u niz recepata:
    prikazRecepti();
  11. Otvorite index.html u pregledniku:
  12. Dodajte recepte na popis i gledajte kako se pojavljuju na desnoj strani:

Kako izbrisati recepte

Recepte možete izbrisati klikom na Izbrisati gumb ispod uputa za recept.

  1. Dodajte neki CSS stil za gumb za brisanje:
    .gumb za brisanje {
    boja pozadine: #dc3545;
    boja: #F F F;
    granica: nikakav;
    granični radijus: 5px;
    podstava: 5px 10px;
    kursor: pokazivač;
    }

    .gumb za brisanje:lebdjeti {
    boja pozadine: #c82333;
    }

  2. U JavaScript datoteku dodajte novu funkciju za brisanje recepta:
    funkcijarukovanjeDelete(događaj) {

    }

  3. Pomoću JavaScript događaja pronađite indeks recepta na koji je korisnik kliknuo:
    ako (event.target.classList.contains('gumb za brisanje')) {
    konst indeks = event.target.dataset.index;
    }
  4. Pomoću indeksa izbrišite odabrani recept iz niza recepata:
    recipes.splice (indeks, 1);
  5. Osvježite popis recepata prikazanih na stranici:
    prikazRecepti();
  6. Dodajte slušatelja događaja za pozivanje funkcije handleDelete() kada korisnik klikne gumb za brisanje:
    recipeList.addEventListener('klik', handleDelete);
  7. Otvorite index.html u pregledniku. Dodajte recept za prikaz gumba za brisanje:

Kako tražiti recepte

Možete tražiti recepte pomoću trake za pretraživanje kako biste provjerili postoji li određeni recept.

  1. Unutar desnog stupca dodajte traku za pretraživanje prije popisa recepata:
    <diviskaznica="odjeljak za pretraživanje">
    <h3>Popis recepatah3>
    <označitiza="okvir za pretraživanje">Traži:označiti>
    <ulaznitip="tekst"iskaznica="okvir za pretraživanje">
    div>
  2. Dodajte CSS stil za oznaku trake za pretraživanje:
    označiti[za="okvir za pretraživanje"] {
    prikaz: blok;
    margina-dno: 10px;
    }
  3. U script.js preuzmite HTML element okvira za pretraživanje:
    konst SearchBox = dokument.getElementById('okvir za pretraživanje');
  4. Unutar nove funkcije stvorite novi niz koji sadrži recepte čiji naziv odgovara unosu pretraživanja:
    funkcijatraži(upit) {
    konst filteredRecipes = recipes.filter(recept => {
    povratak recipe.name.toLowerCase().uključuje (query.toLowerCase());
    });
    }
  5. Obrišite popis recepata trenutno prikazanih na ekranu:
    recipeList.innerHTML = '';
  6. Prođite kroz svaki filtrirani recept koji odgovara rezultatu pretraživanja i izradite novi element div:
    filteredRecipes.forEach(recept => {
    konst receptEl = dokument.createElement('div');
    });
  7. Dodajte HTML sadržaj za filtrirani recept u div:
    receptEl.innerHTML = `

    ${recept.name}</h3>

    <snažna>Sastojci:snažna></p>


      ${recept.ingredients.map(ingr =>`
    • ${ingr}
    • `
      ).pridružiti('')}
      </ul>

      <snažna>metoda:snažna></p>

      ${recept.metoda}</p>

  8. Dodajte istu klasu recepata za dosljedan stil. Dodajte novi div na popis prikazan na stranici:
    receptEl.classList.add('recept');
    recipeList.appendChild (receptEl);
  9. Dodajte slušatelja događaja za pozivanje funkcije search() kada korisnik upisuje u traku za pretraživanje:
    searchBox.addEventListener('ulazni', događaj => pretraživanje (event.target.value));
  10. Unutar funkcije handleDelete(), poništite okvir za pretraživanje ako korisnik izbriše stavku, kako biste osvježili popis:
    searchBox.value = '';
  11. Otvorite index.html u web pregledniku da vidite novu traku za pretraživanje i dodajte neke recepte:
  12. Dodajte naziv recepta u traku za pretraživanje kako biste filtrirali popis recepata:

Izrada projekata s HTML-om, CSS-om i JavaScriptom

Ovaj projekt pokazuje kako izgraditi front-end sučelje za jednostavnu knjigu recepata. Imajte na umu da ne postoji pozadinski poslužitelj i da aplikacija ne čuva podatke; ako osvježite stranicu, izgubit ćete promjene. Jedno moguće proširenje na kojem biste mogli raditi je mehanizam za spremanje i učitavanje podataka pomoću localStorage.

Kako biste poboljšali svoje vještine web razvoja, nastavite istraživati ​​druge zabavne projekte koje možete izraditi na vlastitom računalu.