{"id":6811,"date":"2025-01-11T12:33:39","date_gmt":"2025-01-11T12:33:39","guid":{"rendered":"https:\/\/howtogeek.blog\/cs\/?p=6811"},"modified":"2025-01-11T12:33:39","modified_gmt":"2025-01-11T12:33:39","slug":"create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter","status":"publish","type":"post","link":"https:\/\/howtogeek.blog\/cs\/create-your-first-web-application-a-beginners-guide-to-building-a-simple-notes-app-and-word-counter\/","title":{"rendered":"Vytvo\u0159te svou prvn\u00ed webovou aplikaci: Pr\u016fvodce pro za\u010d\u00e1te\u010dn\u00edky k vytvo\u0159en\u00ed jednoduch\u00e9 aplikace pro pozn\u00e1mky a po\u010d\u00edtadla slov"},"content":{"rendered":"<p>Zah\u00e1jen\u00ed va\u0161\u00ed k\u00f3dovac\u00ed cesty se m\u016f\u017ee zd\u00e1t skli\u010duj\u00edc\u00ed uprost\u0159ed ohromn\u00e9ho v\u00fdb\u011bru jazyk\u016f a r\u00e1mc\u016f. Mo\u017en\u00e1 v\u00e1s dokonce napadne nechat v\u0161e zvl\u00e1dnout AI! Nicm\u00e9n\u011b programov\u00e1n\u00ed pro web m\u016f\u017ee b\u00fdt vzru\u0161uj\u00edc\u00ed, p\u0159\u00edstupn\u00e9 a zcela zdarma!<\/p>\n<h2 id=\"what-youll-build\">Co budete stav\u011bt<\/h2>\n<p>V tomto tutori\u00e1lu vytvo\u0159\u00edte jednoduchou webovou aplikaci navr\u017eenou k ukl\u00e1d\u00e1n\u00ed textov\u00fdch pozn\u00e1mek p\u0159i po\u010d\u00edt\u00e1n\u00ed znak\u016f a slov v t\u011bchto pozn\u00e1mk\u00e1ch.<\/p>\n<p>Tato aplikace trvale ukl\u00e1d\u00e1 data a umo\u017e\u0148uje j\u00ed na\u010d\u00edtat text i po obnoven\u00ed str\u00e1nky nebo jej\u00edm op\u011btovn\u00e9m otev\u0159en\u00ed. Je to praktick\u00e9 \u0159e\u0161en\u00ed pro udr\u017een\u00ed rychl\u00e9ho p\u0159\u00edstupu k d\u016fle\u017eit\u00e9mu textu, a\u0165 u\u017e jde o adresy, URL nebo cokoliv jin\u00e9ho.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"P\u0159\u00edklad jednoduch\u00e9 textov\u00e9 webov\u00e9 aplikace zobrazuj\u00edc\u00ed pozn\u00e1mky v\u010detn\u011b z\u00e1znamu v kalend\u00e1\u0159i a seznamu adres URL.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-example.webp\" title=\"P\u0159\u00edklad jednoduch\u00e9 textov\u00e9 webov\u00e9 aplikace zobrazuj\u00edc\u00ed pozn\u00e1mky v\u010detn\u011b z\u00e1znamu v kalend\u00e1\u0159i a seznamu adres URL.\" width=\"960\"\/><\/figure>\n<p>Krom\u011b toho aplikace sleduje po\u010det znak\u016f a slov, co\u017e poskytuje vynikaj\u00edc\u00ed \u00favod do manipulace s \u0159et\u011bzci. I kdy\u017e je aplikace z\u00e1kladn\u00ed z hlediska designu, tento tutori\u00e1l v\u00e1m umo\u017en\u00ed z\u00e1kladn\u00ed dovednosti pro v\u00fdvoj webov\u00fdch aplikac\u00ed a odemkne obrovsk\u00e9 mo\u017enosti v k\u00f3dov\u00e1n\u00ed.<\/p>\n<h2 id=\"how-youll-build-it\">Jak to postav\u00edte<\/h2>\n<p>I kdy\u017e se webov\u00e9 aplikace mohou v\u00fdrazn\u011b li\u0161it, obvykle integruj\u00ed t\u0159i z\u00e1kladn\u00ed technologie: HTML, CSS a JavaScript. Ka\u017ed\u00e1 z t\u011bchto komponent pln\u00ed p\u0159i v\u00fdvoji webu kl\u00ed\u010dovou funkci:<\/p>\n<ul>\n<li><strong>HTML:<\/strong> Toto je struktura va\u0161\u00ed webov\u00e9 aplikace, kter\u00e1 ur\u010duje, jak je obsah organizov\u00e1n. HTML definuje, zda je text odstavcem, nadpisem nebo polo\u017ekou seznamu.<\/li>\n<li><strong>CSS:<\/strong> Kask\u00e1dov\u00e9 styly dod\u00e1vaj\u00ed va\u0161emu obsahu styl a umo\u017e\u0148uj\u00ed v\u00e1m m\u011bnit barvy, p\u00edsma a rozvr\u017een\u00ed. Pomoc\u00ed CSS m\u016f\u017eete vytvo\u0159it tu\u010dn\u00e9 prvky, upravit okraje a um\u00edstit prvky na obrazovce.<\/li>\n<li><strong>JavaScript:<\/strong> Tento programovac\u00ed jazyk je ned\u00edlnou sou\u010d\u00e1st\u00ed pro vkl\u00e1d\u00e1n\u00ed funkc\u00ed do va\u0161\u00ed webov\u00e9 aplikace. JavaScript m\u016f\u017ee vytv\u00e1\u0159et interaktivn\u00ed z\u00e1\u017eitky, jako je zobrazen\u00ed\/skryt\u00ed prvk\u016f nebo vytv\u00e1\u0159en\u00ed slo\u017eit\u00fdch aplikac\u00ed, jako jsou hry.<\/li>\n<\/ul>\n<figure class=\"wp-block-image\"><img alt=\"Domovsk\u00e1 str\u00e1nka webu web.dev s v\u00fdukov\u00fdmi zdroji pro HTML, CSS a JavaScript.\" class=\"wp-image\" decoding=\"async\" height=\"734\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-dev-homepage.webp\" title=\"Domovsk\u00e1 str\u00e1nka webu web.dev s v\u00fdukov\u00fdmi zdroji pro HTML, CSS a JavaScript.\" width=\"1388\"\/><\/figure>\n<h2 id=\"the-app-structure\">Struktura aplikace<\/h2>\n<p>Aplikace, kterou se chyst\u00e1te vytvo\u0159it, obsahuje t\u0159i jednoduch\u00e9 soubory: <code>index.html<\/code>, <code>styles.css<\/code>a <code>script.js<\/code>.<\/p>\n<p>Pro spu\u0161t\u011bn\u00ed t\u00e9to aplikace neexistuj\u00ed \u017e\u00e1dn\u00e9 pokro\u010dil\u00e9 po\u017eadavky \u2013 sta\u010d\u00ed pouze webov\u00fd prohl\u00ed\u017ee\u010d. Jeliko\u017e se jedn\u00e1 o front-endovou aplikaci, nejsou pot\u0159eba skriptovac\u00ed jazyky typu PHP nebo m\u00edstn\u00ed servery. Po dokon\u010den\u00ed jednodu\u0161e otev\u0159ete <code>index.html<\/code>v prohl\u00ed\u017ee\u010di a uvid\u00edte svou aplikaci v akci.<\/p>\n<p>Tato aplikace vyu\u017e\u00edv\u00e1 rozhran\u00ed Web Storage API k ukl\u00e1d\u00e1n\u00ed textu, co\u017e j\u00ed umo\u017e\u0148uje uchov\u00e1vat informace bez nutnosti zapisovat na diskov\u00e9 soubory, proto\u017ee JavaScript nem\u00e1 p\u0159\u00edstup k syst\u00e9mu soubor\u016f.<\/p>\n<h2 id=\"how-to-build-the-note-taker\">Jak sestavit Note Taker<\/h2>\n<p>Za\u010dn\u011bte vytvo\u0159en\u00edm t\u0159\u00ed pot\u0159ebn\u00fdch soubor\u016f ve stejn\u00e9m adres\u00e1\u0159i. P\u0159\u00edpadn\u011b si m\u016f\u017eete soubory st\u00e1hnout z <a href=\"https:\/\/github.com\/bobbykjack\/text\" target=\"_blank\">tohoto \u00falo\u017ei\u0161t\u011b GitHub<\/a> .<\/p>\n<h3 id=\"building-the-structure-with-html\">Budov\u00e1n\u00ed struktury pomoc\u00ed HTML<\/h3>\n<p>Soubor <code>index.html<\/code>obsahuje strukturu obsahu va\u0161\u00ed aplikace. Obsahuje odkazy na soubory CSS a JavaScript, co\u017e prohl\u00ed\u017ee\u010di umo\u017e\u0148uje slou\u010dit je do hladk\u00e9ho prost\u0159ed\u00ed.<\/p>\n<p>Stejn\u011b jako jak\u00fdkoli dokument HTML se hlavn\u00ed r\u00e1mec skl\u00e1d\u00e1 z hlavn\u00ed \u010d\u00e1sti s metadaty a t\u011bla obsahuj\u00edc\u00edho obsah:<\/p>\n<p> <code><br \/>\n<span>&lt;!DOCTYPE html&gt;<\/span><br \/>\n<span>&lt;html&gt;<\/span><br \/>\n<span>&lt;head&gt;<\/span><br \/>\n<span>...&lt;\/head&gt;<\/span><br \/>\n<span>&lt;body&gt;<\/span><br \/>\n<span>...&lt;\/body&gt;<\/span><br \/>\n<span>&lt;\/html&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Sekce head obsahuje stru\u010dn\u00e1 metadata, v\u010detn\u011b n\u00e1zvu str\u00e1nky (viditeln\u00e9ho v z\u00e1hlav\u00ed prohl\u00ed\u017ee\u010de) a odkazu na <code>styles.css<\/code>soubor:<\/p>\n<p> <code><br \/>\n<span>&lt;title&gt;Text&lt;\/title&gt;<\/span><br \/>\n<span>&lt;link rel=\"stylesheet\"href=\"styles.css\"\/&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Karoserie je podrobn\u011bj\u0161\u00ed, v\u010detn\u011b kl\u00ed\u010dov\u00fdch sou\u010d\u00e1st\u00ed:<\/p>\n<p> <code><br \/>\n<span>&lt;div id=\"counter\"&gt;<\/span><br \/>\n<span>words: &lt;span id=\"words\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>\/ characters: &lt;span id=\"chars\"&gt;0&lt;\/span&gt;<\/span><br \/>\n<span>&lt;\/div&gt;<\/span><br \/>\n<span>&lt;textarea id=\"text\"autofocus=\"1\"&gt;&lt;\/textarea&gt;<\/span><br \/>\n<span>&lt;script src=\"script.js\"&gt;&lt;\/script&gt;<\/span><br \/>\n<\/code><\/p>\n<p>Prvek <code>div<\/code>ozna\u010den\u00fd jako \u201epo\u010d\u00edtadlo\u201c obsahuje po\u010det slov a znak\u016f. Z\u016fst\u00e1v\u00e1 naho\u0159e a dynamicky se aktualizuje podle zm\u011bn textu.<\/p>\n<p>Je d\u016fle\u017eit\u00e9 poznamenat si pou\u017eit\u00ed <code>id<\/code>atribut\u016f \u2013 jejich jedine\u010dn\u00e9 hodnoty pom\u00e1haj\u00ed stylizovat tyto prvky a zam\u011b\u0159ovat je na funk\u010dnost.<\/p>\n<p>Poskytuje <code>textarea<\/code>u\u017eivatel\u016fm prostor pro zad\u00e1v\u00e1n\u00ed textu s <code>autofocus<\/code>atributem, kter\u00fd zaji\u0161\u0165uje, \u017ee je p\u0159ipraven k psan\u00ed po na\u010dten\u00ed str\u00e1nky. Nakonec HTML odkazuje na <code>script.js<\/code>soubor.<\/p>\n<p>V tomto okam\u017eiku otev\u0159ete <code>index.html<\/code>v prohl\u00ed\u017ee\u010di. Zat\u00edm to nebude fungovat a nemus\u00ed vypadat \u00fapln\u011b spr\u00e1vn\u011b, ale kontrola va\u0161eho pokroku v ka\u017ed\u00e9 f\u00e1zi je u\u017eite\u010dn\u00e1.<\/p>\n<figure class=\"wp-block-image\"><img alt=\"Pohled na webovou aplikaci pro psan\u00ed pozn\u00e1mek s v\u00fdchoz\u00edmi styly prohl\u00ed\u017ee\u010de, kter\u00e1 zobrazuje v\u0161e seskupen\u00e9 v lev\u00e9m horn\u00edm rohu.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-no-style.webp\" title=\"Pohled na webovou aplikaci pro psan\u00ed pozn\u00e1mek s v\u00fdchoz\u00edmi styly prohl\u00ed\u017ee\u010de, kter\u00e1 zobrazuje v\u0161e seskupen\u00e9 v lev\u00e9m horn\u00edm rohu.\" width=\"960\"\/><\/figure>\n<h3 id=\"making-things-look-good-with-css\">Aby v\u011bci vypadaly dob\u0159e pomoc\u00ed CSS<\/h3>\n<p>I kdy\u017e tato z\u00e1kladn\u00ed aplikace nevy\u017eaduje rozs\u00e1hl\u00e9 \u00fapravy designu, m\u016f\u017eeme vylep\u0161it jej\u00ed rozvr\u017een\u00ed pomoc\u00ed ur\u010dit\u00e9ho stylu.<\/p>\n<p>Nejprve stanov\u00edme styl karoserie, abychom nast\u00ednili celkov\u00fd vzhled:<\/p>\n<p> <code><br \/>\n<span>body {<\/span><br \/>\n<span> margin: 0;<\/span><br \/>\n<span> padding: 0;<\/span><br \/>\n<span> display: grid;<\/span><br \/>\n<span> min-height: 100vh;<\/span><br \/>\n<span> grid-template-rows: min-content 1fr;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Tento CSS vyu\u017e\u00edv\u00e1 <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/CSS\/CSS_grid_layout\" target=\"_blank\">rozlo\u017een\u00ed m\u0159\u00ed\u017eky<\/a> k uspo\u0159\u00e1d\u00e1n\u00ed po\u010dtu slov a znak\u016f v \u00fazk\u00e9m \u0159\u00e1dku nad textovou oblast\u00ed. Tato <code>grid-template-rows<\/code>vlastnost ur\u010duje, \u017ee \u0159\u00e1dek po\u010dtu by m\u011bl zab\u00edrat co nejmen\u0161\u00ed prostor (minim\u00e1ln\u00ed obsah), zat\u00edmco textarea vypln\u00ed zb\u00fdvaj\u00edc\u00ed prostor (1fr).<\/p>\n<p>\u0158\u00e1dek pultu dost\u00e1v\u00e1 z\u00e1kladn\u00ed styl, aby se odli\u0161il od textov\u00e9 oblasti, p\u0159edev\u0161\u00edm prost\u0159ednictv\u00edm pozad\u00ed:<\/p>\n<p> <code><br \/>\n<span>#counter {<\/span><br \/>\n<span> font-family: sans-serif;<\/span><br \/>\n<span> background-color: #f7f7f7;<\/span><br \/>\n<span> text-align: center;<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> padding: 0 0.5em 0;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Textarea je upravena tak, aby zajistila \u010ditelnost textu a umo\u017enila dostate\u010dn\u00e9 b\u00edl\u00e9 m\u00edsto:<\/p>\n<p> <code><br \/>\n<span>textarea {<\/span><br \/>\n<span> width: 100%;<\/span><br \/>\n<span> height: 100%;<\/span><br \/>\n<span> font-size: 16pt;<\/span><br \/>\n<span> padding: 1em;<\/span><br \/>\n<span> box-sizing: border-box;<\/span><br \/>\n<span> outline: 0;<\/span><br \/>\n<span> border: none;<\/span><br \/>\n<span> border-top: 1px solid #999;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"Aplikace na psan\u00ed pozn\u00e1mek s p\u0159izp\u016fsoben\u00fdmi styly zobrazuje panel po\u010d\u00edtadla naho\u0159e s textovou oblast\u00ed v pln\u00e9 velikosti pod n\u00edm.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-with-style.webp\" title=\"Aplikace na psan\u00ed pozn\u00e1mek s p\u0159izp\u016fsoben\u00fdmi styly zobrazuje panel po\u010d\u00edtadla naho\u0159e s textovou oblast\u00ed v pln\u00e9 velikosti pod n\u00edm.\" width=\"960\"\/><\/figure>\n<h3 id=\"adding-functionality-with-javascript\">P\u0159id\u00e1n\u00ed funkc\u00ed pomoc\u00ed JavaScriptu<\/h3>\n<p>S p\u0159ipraven\u00fdmi z\u00e1klady je \u010das vlo\u017eit do va\u0161\u00ed aplikace funk\u010dnost \u2013 k\u00f3d, kter\u00fd ji p\u0159ivede k \u017eivotu!<\/p>\n<p>Ne\u017e se pono\u0159\u00edte do k\u00f3dov\u00e1n\u00ed, je nezbytn\u00e9 nast\u00ednit zam\u00fd\u0161lenou funkci. U t\u00e9to aplikace se zam\u011b\u0159\u00edte na dva hlavn\u00ed c\u00edle:<\/p>\n<ul>\n<li>Vytrvejte a znovu na\u010dt\u011bte zadan\u00fd text.<\/li>\n<li>Dynamicky aktualizujte po\u010dty znak\u016f a slov.<\/li>\n<\/ul>\n<p>Tyto funkce vy\u017eaduj\u00ed aktualizace ur\u010dit\u00fdch prvk\u016f dokumentu. Za\u010dn\u011bte proto z\u00edsk\u00e1n\u00edm odkaz\u016f na tyto uzly pomoc\u00ed <code>getElementById<\/code>metody:<\/p>\n<p> <code><br \/>\n<span>const words = document.getElementById(\"words\");<\/span><br \/>\n<span>const chars = document.getElementById(\"chars\");<\/span><br \/>\n<span>const textarea = document.getElementById(\"text\");<\/span><br \/>\n<\/code><\/p>\n<p>Zde , <code>words<\/code>, <code>chars<\/code>a <code>textarea<\/code>odpov\u00eddaj\u00ed jejich p\u0159\u00edslu\u0161n\u00fdm sekc\u00edm v dokumentu, identifikovan\u00fdm pomoc\u00ed atribut\u016f ID.<\/p>\n<p>D\u00e1le zave\u010fte interaktivitu nastaven\u00edm aplikace, aby reagovala na zm\u011bnu textu:<\/p>\n<p> <code><br \/>\n<span>textarea.addEventListener(\"input\", function(ev) {<\/span><br \/>\n<span> localStorage.setItem(\"text\", ev.target.value);<\/span><br \/>\n<span> update_counts(ev.target.value);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>Metoda <code>addEventListener<\/code>v\u00e1\u017ee funkci ke spu\u0161t\u011bn\u00ed, kdy\u017e nastane zadan\u00e1 ud\u00e1lost. V tomto p\u0159\u00edpad\u011b, jakmile u\u017eivatel interaguje s textovou oblast\u00ed, ud\u00e1lost \u201evstup\u201c spust\u00ed funkci.<\/p>\n<p>D\u00e1le se rozhran\u00ed Web Storage API pou\u017e\u00edv\u00e1 k zachov\u00e1n\u00ed aktu\u00e1ln\u00edho obsahu textov\u00e9 oblasti, ke kter\u00e9mu se p\u0159istupuje p\u0159es <code>ev.target.value<\/code>. Metoda <code>setItem<\/code>spojuje kl\u00ed\u010d s daty, kter\u00e1 maj\u00ed b\u00fdt ulo\u017eena.<\/p>\n<p>Chcete-li zajistit, aby se text na\u010detl p\u0159i inicializaci nebo aktualizaci aplikace, p\u0159idejte dal\u0161\u00ed poslucha\u010d:<\/p>\n<p> <code><br \/>\n<span>window.addEventListener(\"load\", function(ev) {<\/span><br \/>\n<span> var text = localStorage.getItem(\"text\");<\/span><br \/>\n<span> textarea.value = text;<\/span><br \/>\n<span> update_counts(text);<\/span><br \/>\n<span>});<\/span><br \/>\n<\/code><\/p>\n<p>Tento poslucha\u010d reaguje na ud\u00e1lost zat\u00ed\u017een\u00ed okna. Po na\u010dten\u00ed okna na\u010dte ulo\u017een\u00fd text a podle toho nastav\u00ed hodnotu textarea, zat\u00edmco vyvol\u00e1 <code>update_counts()<\/code>obnoven\u00ed po\u010dtu slov a znak\u016f.<\/p>\n<p>Zb\u00fdvaj\u00edc\u00ed funkce se nach\u00e1z\u00ed ve <code>update_counts()<\/code>funkci, kter\u00e1 vypad\u00e1 takto:<\/p>\n<p> <code><br \/>\n<span>function update_counts(text) {<\/span><br \/>\n<span> chars.innerHTML = text.length;<\/span><br \/>\n<span> words.innerHTML = text.split(' ').length;<\/span><br \/>\n<span>}<\/span><br \/>\n<\/code><\/p>\n<p>Na rozd\u00edl od textarea prost\u00fd text postr\u00e1d\u00e1 atribut value; m\u00edsto toho se tedy <code>innerHTML<\/code>pou\u017eije vlastnost. Vlastnost <code>length<\/code>\u0159et\u011bzce z\u00edsk\u00e1 celkov\u00fd po\u010det znak\u016f.<\/p>\n<p>K rozd\u011blen\u00ed textu na slova pou\u017e\u00edv\u00e1me <code>text.split(' ')<\/code>, kter\u00fd rozd\u011bluje \u0159et\u011bzec na ka\u017ed\u00fd znak mezery a vytv\u00e1\u0159\u00ed pole slov. Vlastnost length v\u00fdsledn\u00e9ho pole poskytuje po\u010det slov.<\/p>\n<p>S t\u00edmto k\u00f3dem v\u0161ak m\u016f\u017eete narazit na n\u011bkolik probl\u00e9m\u016f:<\/p>\n<ol>\n<li>Nebude spr\u00e1vn\u011b po\u010d\u00edtat jednotliv\u00e1 slova na \u0159\u00e1dku bez okoln\u00edch mezer.<\/li>\n<li>Pokud nen\u00ed p\u0159\u00edtomen \u017e\u00e1dn\u00fd text, bude nep\u0159esn\u011b hl\u00e1sit jedin\u00e9 slovo kv\u016fli tomu, jak <code>split<\/code>funguje.<\/li>\n<\/ol>\n<p>Chcete-li vy\u0159e\u0161it prvn\u00ed probl\u00e9m, zva\u017ete rozd\u011blen\u00ed na regul\u00e1rn\u00ed v\u00fdraz, aby se zohlednily mezery: <code>\\s<\/code>. Chcete-li vy\u0159e\u0161it druh\u00fd probl\u00e9m, odfiltrujte v\u0161echny pr\u00e1zdn\u00e9 \u0159et\u011bzce:<\/p>\n<p> <code><br \/>\n<span> words.innerHTML = text.split(\/\\s\/).filter(function(n) { return n! = ''; }).length;<\/span><br \/>\n<\/code><\/p>\n<figure class=\"wp-block-image\"><img alt=\"Webov\u00e1 aplikace s uk\u00e1zkov\u00fdm textem zobrazuj\u00edc\u00edm p\u0159esn\u00fd po\u010det znak\u016f a slov.\" class=\"wp-image\" decoding=\"async\" height=\"569\" loading=\"lazy\" src=\"https:\/\/cdn.howtogeek.blog\/wp-content\/uploads\/2025\/01\/web-app-final.webp\" title=\"Webov\u00e1 aplikace s uk\u00e1zkov\u00fdm textem zobrazuj\u00edc\u00edm p\u0159esn\u00fd po\u010det znak\u016f a slov.\" width=\"960\"\/><\/figure>\n<p>Vytv\u00e1\u0159en\u00ed u\u017eite\u010dn\u00fdch webov\u00fdch aplikac\u00ed lze dos\u00e1hnout pomoc\u00ed n\u011bkolika z\u00e1kladn\u00edch soubor\u016f! Tuto jednoduchou aplikaci na psan\u00ed pozn\u00e1mek m\u016f\u017eete roz\u0161\u00ed\u0159it integrac\u00ed dal\u0161\u00edch funkc\u00ed, jako je vyu\u017eit\u00ed <a href=\"https:\/\/developer.mozilla.org\/en-US\/docs\/Web\/API\/Window\/location\" target=\"_blank\">vlastnosti window.location<\/a> pro p\u0159\u00edstup k URL nebo umo\u017en\u011bn\u00ed ukl\u00e1d\u00e1n\u00ed v\u00edce pozn\u00e1mek zm\u011bnou n\u00e1zv\u016f p\u0159ed\u00e1van\u00fdch do <code>localStorage.setItem<\/code>.<\/p>\n<h3>Dal\u0161\u00ed statistiky<\/h3>\n<h4><strong>1. Jak\u00e9 jsou p\u0159edpoklady pro tento tutori\u00e1l webov\u00e9 aplikace?<\/strong><\/h4>\n<p>V\u0161e, co pot\u0159ebujete, je z\u00e1kladn\u00ed znalost HTML, CSS a JavaScriptu. U\u017eite\u010dn\u00e9 budou tak\u00e9 n\u00e1stroje jako textov\u00fd editor (nap\u0159. VSCode) a webov\u00fd prohl\u00ed\u017ee\u010d.<\/p>\n<h4><strong>2. Mohu upravit tuto webovou aplikaci a p\u0159idat dal\u0161\u00ed funkce?<\/strong><\/h4>\n<p>Absolutn\u011b! Tento tutori\u00e1l poskytuje z\u00e1klad. M\u016f\u017eete p\u0159idat funkce, jako je ukl\u00e1d\u00e1n\u00ed v\u00edce pozn\u00e1mek, kategorizace pozn\u00e1mek nebo dokonce implementace funkce vyhled\u00e1v\u00e1n\u00ed!<\/p>\n<h4><strong>3. Jak funguje rozhran\u00ed Web Storage API?<\/strong><\/h4>\n<p>Web Storage API umo\u017e\u0148uje webov\u00fdm aplikac\u00edm ukl\u00e1dat data v prohl\u00ed\u017ee\u010di. Ukl\u00e1d\u00e1 data v p\u00e1rech kl\u00ed\u010d\u2013hodnota, kter\u00e9 p\u0159etrv\u00e1vaj\u00ed i po zav\u0159en\u00ed prohl\u00ed\u017ee\u010de, co\u017e usnad\u0148uje pozd\u011bj\u0161\u00ed na\u010dten\u00ed.<\/p>\n<p><a class=\"xiaomi\" href=\"https:\/\/www.howtogeek.com\/build-your-first-web-app-a-simple-word-counter\/\" rel=\"noopener noreferrer nofollow\" target=\"_blank\">Zdroj a obr\u00e1zky<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zah\u00e1jen\u00ed va\u0161\u00ed k\u00f3dovac\u00ed cesty se m\u016f\u017ee zd\u00e1t skli\u010duj\u00edc\u00ed uprost\u0159ed ohromn\u00e9ho v\u00fdb\u011bru jazyk\u016f a r\u00e1mc\u016f. Mo\u017en\u00e1 v\u00e1s dokonce napadne nechat v\u0161e zvl\u00e1dnout AI! Nicm\u00e9n\u011b programov\u00e1n\u00ed pro web m\u016f\u017ee b\u00fdt vzru\u0161uj\u00edc\u00ed, p\u0159\u00edstupn\u00e9 a zcela zdarma! Co budete stav\u011bt V tomto tutori\u00e1lu vytvo\u0159\u00edte jednoduchou webovou aplikaci navr\u017eenou k ukl\u00e1d\u00e1n\u00ed textov\u00fdch pozn\u00e1mek p\u0159i po\u010d\u00edt\u00e1n\u00ed znak\u016f a slov v t\u011bchto [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[1],"tags":[876,202,5],"class_list":["post-6811","post","type-post","status-publish","format-standard","hentry","category-how-to","tag-apps-web-apps","tag-programming","tag-windows"],"acf":[],"_links":{"self":[{"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/posts\/6811","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/comments?post=6811"}],"version-history":[{"count":1,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/posts\/6811\/revisions"}],"predecessor-version":[{"id":6812,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/posts\/6811\/revisions\/6812"}],"wp:attachment":[{"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/media?parent=6811"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/categories?post=6811"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/howtogeek.blog\/cs\/wp-json\/wp\/v2\/tags?post=6811"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}