Овај пројекат ће вам помоћи да усавршите своје фронт-енд вештине и научите вас како да направите интерфејс користећи основне веб стандарде.

Пројекти су одличан начин да побољшате своје ХТМЛ, ЦСС и ЈаваСцрипт вештине и да ојачате важне концепте и технике.

Један пројекат са којим можете започети је књига рецепата, коју можете покренути у претраживачу као што је Гоогле Цхроме или Фирефок.

У књизи рецепата, лева страна веб странице укључује одељак у који корисник може да додаје нове рецепте. На десној страни странице, корисник може прегледати и претраживати постојеће рецепте.

Како замолити корисника да дода нови рецепт

Додајте почетни садржај у ХТМЛ, ЦСС и ЈаваСцрипт датотеке. Ако нисте упознати са концептима веб развоја, постоји много места где можете научите веб развој на мрежи.

Такође можете погледати цео пример књиге рецепата у овом ГитХуб репо.

  1. Додајте основну ХТМЛ структуру у нову ХТМЛ датотеку под називом индек.хтмл:
    хтмл>
    <хтмл>
    <глава>
    <наслов>Реципе Аппнаслов>
    глава>
    <тело>
    <нав>
    <х1>Реципе Аппх1>
    нав>
    <дивкласа="контејнер">
    Садржај овде
    див>
    тело>
    хтмл>
  2. Унутар класе контејнера, одвојите страницу на леву колону и десну колону:
    <дивкласа="лева колона">

    див>
    <дивкласа="десна колона">

    див>

  3. Унутар леве колоне додајте образац за корисника да дода нови рецепт. Корисник може да унесе назив рецепта, листу састојака и метод:
    <х3>Додај рецептх3>

    <форму>
    <етикетаза="име-рецепта">име:етикета>
    <улазнитип="текст"ид="име-рецепта"потребан>
    <бр />

    <етикетаза="састојци за рецепт">Састојци:етикета>
    <тектареаид="састојци за рецепт"редова="5"потребан>тектареа>
    <бр />

    <етикетаза="рецепт-метод">Метод:етикета>
    <тектареаид="рецепт-метод"редова="5"потребан>тектареа>
    <бр />

    <дугметип="прихвати">Додај рецептдугме>
    форму>

  4. У ознаку хеад ХТМЛ датотеке додајте везу до нове ЦСС датотеке под називом стилес.цсс. Направите датотеку у истој фасцикли као и ваша ХТМЛ датотека:
    <линкрел="стилесхеет"хреф="стилес.цсс">
  5. Унутар ЦСС датотеке додајте неки стил за целокупну страницу:
    тело {
    породица фонтова: Санс Сериф;
    }

    нав {
    боја позадине: #333;
    положај: фиксно;
    топ: 0;
    ширина: 100%;
    паддинг: 20пк;
    лево: 0;
    боја: бео;
    Поравнање текста: центар;
    }

    .контејнер {
    приказ: флек;
    флек-дирецтион: ред;
    оправдати-садржај: простор-између;
    маргина: 150пк 5%;
    }

    .лева колона {
    ширина: 25%;
    }

    .десна колона {
    ширина: 65%;
    }

  6. Додајте мало стила за Додајте рецепте образац:
    форму {
    приказ: флек;
    флек-дирецтион: колона;
    }

    етикета {
    маргина-дно: 10пк;
    }

    улазни[типе="текст"], тектареа {
    паддинг: 10пк;
    маргина-дно: 10пк;
    граница-радијус: 5пк;
    граница: 1пкчврст#ццц;
    ширина: 100%;
    бок-сизинг: гранична кутија;
    }

    дугме[типе="прихвати"] {
    паддинг: 10пк;
    боја позадине: #3338;
    боја: #ффф;
    граница: ниједан;
    граница-радијус: 5пк;
    курсор: показивач;
    }

  7. На дну ознаке тела у вашој ХТМЛ датотеци додајте везу до ЈаваСцрипт датотеке под називом сцрипт.јс. Направите датотеку у истој фасцикли:
    <тело>
    Садржај
    <скриптасрц="сцрипт.јс">скрипта>
    тело>
  8. Унутар сцрипт.јс користите метод куериСелецтор да прећи ДОМ и преузмите елемент форме са странице.
    конст форм = документ.куериСелецтор('форма');
  9. Креирајте нови низ за чување рецепата које корисник унесе у образац:
    дозволити рецепти = [];
  10. У новој функцији, добијте поља за назив, састојке и метод унесена преко обрасца. Такође можете имплементирати валидација обрасца на страни клијента да спречите неважеће уносе или да проверите да ли рецепт већ постоји.
    функцијахандлеСубмит(догађај) {
    // Спречавање подразумеваног понашања при слању обрасца
    евент.превентДефаулт();

    // Добија назив рецепта, састојке и улазне вредности методе
    конст намеИнпут = документ.куериСелецтор('#реципе-наме');
    конст ингрИнпут = документ.куериСелецтор('#рецепт-састојци');
    конст метходИнпут = документ.куериСелецтор('#рецепт-метод');
    конст наме = намеИнпут.валуе.трим();
    конст састојци = ингрИнпут.валуе.трим().сплит(',').Мапа(и => и.трим());
    конст метход = метходИнпут.валуе.трим();
    }
  11. Ако су улази исправни, додајте их у низ рецепата:
    ако (име && састојци.дужина > 0 && метод) {
    конст невРеципе = { име, састојци, метод };
    реципес.пусх (невРеципе);
    }
  12. Обришите уносе на обрасцу:
    намеИнпут.валуе = '';
    ингрИнпут.валуе = '';
    метходИнпут.валуе = '';
  13. Након функције хандлеСубмит(), додајте слушалац догађаја да позовете функцију када корисник пошаље образац:
    форм.аддЕвентЛистенер('прихвати', хандлеСубмит);
  14. Отворите индек.хтмл у прегледачу и погледајте образац са леве стране:

Како приказати додате рецепте

Можете приказати рецепте сачуване у низу рецепата на десној страни странице.

  1. У ХТМЛ датотеци додајте див да бисте приказали листу рецепата унутар десне колоне. Додајте још један див да бисте приказали поруку ако нема рецепата:
    <дивкласа="десна колона">
    <дивид="листа рецепата">див>
    <дивид="без рецепата">Немате рецепте.див>
    див>
  2. Додајте неки ЦСС стил за листу рецепата:
    #реципе-лист {
    приказ: грид;
    грид-темплате-колумнс: понављање(ауто-фит, минмак(300пк, 1фр));
    грид-гап: 20пк;
    }

    #без рецепата {
    приказ: флек;
    боја позадине: #ФФЦЦЦЦ;
    паддинг: 20пк;
    граница-радијус: 8пк;
    маргин-топ: 44пк;
    }

  3. На врху ЈаваСцрипт датотеке преузмите ХТМЛ елементе који се користе за приказ листе рецепата и поруке о грешци:
    конст реципеЛист = документ.куериСелецтор('#реципе-лист');
    конст ноРеципес = документ.гетЕлементБиИд('без рецепата');
  4. Унутар нове функције, прођите кроз сваки рецепт у низу рецепата. За сваки рецепт направите нови див да бисте приказали тај рецепт:
    функцијадисплаиРеципес() {
    реципеЛист.иннерХТМЛ = '';
    реципес.форЕацх((рецепт, индекс) => {
    конст реципеДив = документ.цреатеЕлемент('див');
    });
    }
  5. Додајте нешто садржаја у појединачни див рецепта да бисте приказали име, састојке и метод. Див ће такође садржати дугме за брисање. Ову функцију ћете додати у каснијим корацима:
    реципеДив.иннерХТМЛ = `

    ${реципе.наме}</h3>

    <јака>Састојци:јака></p>


      ${реципе.ингредиентс.мап(ингр =>`
    • ${ингр}
    • `
      ).придружити('')}
      </ul>

      <јака>Метод:јака></p>

      ${реципе.метход}</p>

  6. Додајте класу за стил див:
    реципеДив.цлассЛист.адд('рецепт');
  7. Додајте нови див ХТМЛ елементу реципеЛист:
    реципеЛист.аппендЦхилд (реципеДив);
  8. Додајте стил за класу у ЦСС датотеку:
    .рецепт {
    граница: 1пкчврст#ццц;
    паддинг: 10пк;
    граница-радијус: 5пк;
    кутија-сенка: 0 2пк 4пкргба(0,0,0,.2);
    }

    .рецептх3 {
    маргин-топ: 0;
    маргина-дно: 10пк;
    }

    .рецептул {
    маргина: 0;
    паддинг: 0;
    у стилу листе: ниједан;
    }

    .рецептулли {
    маргина-дно: 5пк;
    }

  9. Проверите да ли постоји више од једног рецепта. Ако јесте, сакријте поруку о грешци:
    ноРеципес.стиле.дисплаи = реципес.ленгтх > 0? 'ноне': 'флек';
  10. Позовите нову функцију унутар функције хандлеСубмит(), након што додате нови рецепт у низ рецепата:
    дисплаиРеципес();
  11. Отворите индек.хтмл у прегледачу:
  12. Додајте рецепте на листу и гледајте како се појављују на десној страни:

Како избрисати рецепте

Можете избрисати рецепте кликом на Избриши дугме испод упутстава за рецепт.

  1. Додајте неки ЦСС стил за дугме за брисање:
    .дугме за брисање {
    боја позадине: #дц3545;
    боја: #ффф;
    граница: ниједан;
    граница-радијус: 5пк;
    паддинг: 5пк 10пк;
    курсор: показивач;
    }

    .дугме за брисање:лебдети {
    боја позадине: #ц82333;
    }

  2. У ЈаваСцрипт датотеци додајте нову функцију за брисање рецепта:
    функцијахандлеДелете(догађај) {

    }

  3. Помоћу ЈаваСцрипт догађаја пронађите индекс рецепта на који је корисник кликнуо:
    ако (евент.таргет.цлассЛист.цонтаинс('дугме за брисање')) {
    конст индекс = евент.таргет.датасет.индек;
    }
  4. Користите индекс да избришете изабрани рецепт из низа рецепата:
    реципес.сплице (индекс, 1);
  5. Освежите листу рецепата приказаних на страници:
    дисплаиРеципес();
  6. Додајте слушалац догађаја да позове функцију хандлеДелете() када корисник кликне на дугме за брисање:
    реципеЛист.аддЕвентЛистенер('кликни', хандлеДелете);
  7. Отворите индек.хтмл у претраживачу. Додајте рецепт да бисте видели дугме за брисање:

Како тражити рецепте

Можете да тражите рецепте користећи траку за претрагу да бисте проверили да ли одређени рецепт постоји.

  1. Унутар десне колоне додајте траку за претрагу испред листе рецепата:
    <дивид="секција за претрагу">
    <х3>Листа рецепатах3>
    <етикетаза="оквир за претрагу">Претрага:етикета>
    <улазнитип="текст"ид="оквир за претрагу">
    див>
  2. Додајте ЦСС стил за ознаку траке за претрагу:
    етикета[за="оквир за претрагу"] {
    приказ: блокирати;
    маргина-дно: 10пк;
    }
  3. У сцрипт.јс, преузмите ХТМЛ елемент оквира за претрагу:
    конст сеарцхБок = документ.гетЕлементБиИд('оквир за претрагу');
  4. Унутар нове функције креирајте нови низ који садржи рецепте чије име одговара уносу за претрагу:
    функцијаПретрага(упит) {
    конст филтередРеципес = реципес.филтер(рецепт => {
    повратак реципе.наме.тоЛоверЦасе().инцлудес (куери.тоЛоверЦасе());
    });
    }
  5. Обришите листу рецепата који се тренутно приказују на екрану:
    реципеЛист.иннерХТМЛ = '';
  6. Прођите кроз сваки филтрирани рецепт који одговара резултату претраге и креирајте нови елемент див:
    филтередРеципес.форЕацх(рецепт => {
    конст реципеЕл = документ.цреатеЕлемент('див');
    });
  7. Додајте ХТМЛ садржај за филтрирани рецепт у див:
    реципеЕл.иннерХТМЛ = `

    ${реципе.наме}</h3>

    <јака>Састојци:јака></p>


      ${реципе.ингредиентс.мап(ингр =>`
    • ${ингр}
    • `
      ).придружити('')}
      </ul>

      <јака>Метод:јака></p>

      ${реципе.метход}</p>

  8. Додајте исту класу рецепата за конзистентан стил. Додајте нови див на листу приказану на страници:
    реципеЕл.цлассЛист.адд('рецепт');
    реципеЛист.аппендЦхилд (реципеЕл);
  9. Додајте слушалац догађаја да позове функцију сеарцх() када корисник унесе у траку за претрагу:
    сеарцхБок.аддЕвентЛистенер('улазни', догађај => претрага (евент.таргет.валуе));
  10. Унутар функције хандлеДелете() обришите поље за претрагу ако корисник избрише ставку да бисте освежили листу:
    сеарцхБок.валуе = '';
  11. Отворите индек.хтмл у веб прегледачу да видите нову траку за претрагу и додате неке рецепте:
  12. Додајте назив рецепта у траку за претрагу да бисте филтрирали листу рецепата:

Прављење пројеката помоћу ХТМЛ-а, ЦСС-а и ЈаваСцрипт-а

Овај пројекат показује како да се направи фронт-енд интерфејс за једноставну књигу рецепата. Имајте на уму да не постоји позадински сервер и да апликација не задржава податке; ако освежите страницу, изгубићете промене. Једно могуће проширење на којем бисте могли да радите је механизам за чување и учитавање података користећи лоцалСтораге.

Да бисте побољшали своје вештине веб развоја, наставите да истражујете друге забавне пројекте које можете да креирате на сопственом рачунару.