{"id":2039,"date":"2026-10-12T15:35:58","date_gmt":"2026-10-12T13:35:58","guid":{"rendered":"https:\/\/www.vr-m.it\/sito\/?p=2039"},"modified":"2026-10-12T15:35:58","modified_gmt":"2026-10-12T13:35:58","slug":"4-html-css-e-javascript","status":"publish","type":"post","link":"https:\/\/www.vr-m.it\/sito\/2026\/10\/12\/4-html-css-e-javascript\/","title":{"rendered":"4. HTML, CSS e JavaScript"},"content":{"rendered":"<h1>HTML, CSS e JavaScript: realizziamo una lista dei compiti<\/h1>\n<p>Tecnologie e Progettazione di Sistemi Informatici e di Telecomunicazioni | Laboratorio guidato<\/p>\n<p>Obiettivo: mettere in relazione struttura, presentazione e comportamento realizzando una piccola applicazione web utilizzabile direttamente nel browser.<\/p>\n<h1>6.1 Il progetto: una lista interattiva<\/h1>\n<p>Dopo aver studiato separatamente HTML5, CSS e JavaScript, realizziamo un\u2019applicazione che consente di annotare le attivit\u00e0 da svolgere. Chi usa la pagina potr\u00e0 inserire un compito, contrassegnarlo come completato con un clic ed eliminarlo con un doppio clic. Un messaggio riepilogher\u00e0 quanti elementi risultano conclusi.<\/p>\n<p>HTML definisce campo di inserimento, pulsante, elenco e testo di stato; CSS ne cura la leggibilit\u00e0 e distingue i compiti completati; JavaScript gestisce gli eventi e aggiorna gli elementi della pagina tramite DOM.<\/p>\n<p>Crea una cartella chiamata lista-compiti e al suo interno tre file: index.html, stile.css e script.js. I nomi utilizzati nei collegamenti devono corrispondere esattamente ai file creati.<\/p>\n<h1>6.2 Il file HTML: gli elementi dell\u2019interfaccia<\/h1>\n<p>Nel documento HTML inseriamo una sezione principale che contiene il titolo, un campo di testo, un pulsante, un elenco inizialmente vuoto e un paragrafo informativo. Gli attributi id permettono allo script di individuare gli elementi interessati.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"576\">&lt;!DOCTYPE html&gt;<br \/>\n&lt;html lang=&#8221;it&#8221;&gt;<br \/>\n&lt;head&gt;<br \/>\n&lt;meta charset=&#8221;UTF-8&#8243;&gt;<br \/>\n&lt;meta name=&#8221;viewport&#8221; content=&#8221;width=device-width, initial-scale=1.0&#8243;&gt;<br \/>\n&lt;title&gt;Lista dei compiti&lt;\/title&gt;<br \/>\n&lt;link rel=&#8221;stylesheet&#8221; href=&#8221;stile.css&#8221;&gt;<br \/>\n&lt;\/head&gt;<br \/>\n&lt;body&gt;<br \/>\n&lt;main class=&#8221;scheda&#8221;&gt;<br \/>\n&lt;h1&gt;I miei compiti&lt;\/h1&gt;<br \/>\n&lt;div class=&#8221;riga-input&#8221;&gt;<br \/>\n&lt;input type=&#8221;text&#8221; id=&#8221;nuovo&#8221; placeholder=&#8221;Scrivi un compito&#8230;&#8221;&gt;<br \/>\n&lt;button id=&#8221;aggiungi&#8221;&gt;Aggiungi&lt;\/button&gt;<br \/>\n&lt;\/div&gt;<br \/>\n&lt;ul id=&#8221;lista&#8221;&gt;&lt;\/ul&gt;<br \/>\n&lt;p id=&#8221;stato&#8221;&gt;Nessun compito in lista&lt;\/p&gt;<br \/>\n&lt;\/main&gt;<br \/>\n&lt;script src=&#8221;script.js&#8221;&gt;&lt;\/script&gt;<br \/>\n&lt;\/body&gt;<br \/>\n&lt;\/html&gt;<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>Osserva che &lt;link&gt; richiama il foglio di stile e &lt;script&gt; carica il programma JavaScript. Il tag &lt;script&gt; \u00e8 posto alla fine del body: in questo modo, quando viene eseguito, gli elementi HTML sono gi\u00e0 stati creati.<\/p>\n<h1>6.3 Il file CSS: presentazione e stato dei compiti<\/h1>\n<p>Definiamo una scheda centrale, colori coerenti e un aspetto riconoscibile per i pulsanti. La classe fatto sar\u00e0 applicata da JavaScript alle attivit\u00e0 completate: il testo apparir\u00e0 grigio e barrato.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"576\">body {<br \/>\nfont-family: Verdana, sans-serif;<br \/>\nbackground: linear-gradient(135deg, #1f4e79, #2e75b6);<br \/>\nmin-height: 100vh;<br \/>\nmargin: 0;<br \/>\ndisplay: flex;<br \/>\njustify-content: center;<br \/>\nalign-items: center;<br \/>\n}<br \/>\n.scheda {<br \/>\nbackground: white;<br \/>\nwidth: 90%;<br \/>\nmax-width: 500px;<br \/>\npadding: 30px;<br \/>\nborder-radius: 12px;<br \/>\nbox-shadow: 0 8px 20px rgba(0,0,0,.3);<br \/>\n}<br \/>\nh1 { color: #1f4e79; text-align: center; }<br \/>\n.riga-input { display: flex; gap: 10px; }<br \/>\ninput {<br \/>\nflex: 1;<br \/>\nmin-width: 0;<br \/>\npadding: 10px;<br \/>\nfont-size: 16px;<br \/>\nborder: 2px solid #8eaadb;<br \/>\nborder-radius: 6px;<br \/>\n}<br \/>\nbutton {<br \/>\nbackground: #1f4e79;<br \/>\ncolor: white;<br \/>\nborder: none;<br \/>\npadding: 10px 16px;<br \/>\nborder-radius: 6px;<br \/>\ncursor: pointer;<br \/>\n}<br \/>\nbutton:hover { background: #2e75b6; }<br \/>\nli {<br \/>\nlist-style: none;<br \/>\npadding: 10px;<br \/>\nmargin-top: 8px;<br \/>\nbackground: #f2f6fb;<br \/>\nborder-radius: 6px;<br \/>\ncursor: pointer;<br \/>\n}<br \/>\nli.fatto { text-decoration: line-through; color: gray; }<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La regola li.fatto riguarda esclusivamente gli elementi &lt;li&gt; ai quali \u00e8 stata assegnata la classe fatto. In questo modo il programma non deve modificare direttamente i colori.<\/p>\n<h1>6.4 Il file JavaScript: azioni e aggiornamenti<\/h1>\n<p>Il programma recupera gli elementi tramite getElementById, controlla il testo immesso e crea dinamicamente un nuovo elemento &lt;li&gt;. A ogni modifica aggiorna anche il riepilogo delle attivit\u00e0.<\/p>\n<table>\n<tbody>\n<tr>\n<td width=\"576\">const campo = document.getElementById(&#8220;nuovo&#8221;);<br \/>\nconst bottone = document.getElementById(&#8220;aggiungi&#8221;);<br \/>\nconst lista = document.getElementById(&#8220;lista&#8221;);<br \/>\nconst stato = document.getElementById(&#8220;stato&#8221;);<\/p>\n<p>function aggiornaStato() {<br \/>\nconst totale = lista.children.length;<br \/>\nconst fatti = lista.querySelectorAll(&#8220;.fatto&#8221;).length;<br \/>\nif (totale === 0) {<br \/>\nstato.textContent = &#8220;Nessun compito in lista&#8221;;<br \/>\n} else {<br \/>\nstato.textContent = fatti + &#8221; fatti su &#8221; + totale;<br \/>\n}<br \/>\n}<\/p>\n<p>function aggiungiCompito() {<br \/>\nconst testo = campo.value.trim();<br \/>\nif (testo === &#8220;&#8221;) {<br \/>\nalert(&#8220;Scrivi prima un compito!&#8221;);<br \/>\nreturn;<br \/>\n}<\/p>\n<p>const voce = document.createElement(&#8220;li&#8221;);<br \/>\nvoce.textContent = testo;<\/p>\n<p>voce.addEventListener(&#8220;click&#8221;, function () {<br \/>\nvoce.classList.toggle(&#8220;fatto&#8221;);<br \/>\naggiornaStato();<br \/>\n});<\/p>\n<p>voce.addEventListener(&#8220;dblclick&#8221;, function () {<br \/>\nvoce.remove();<br \/>\naggiornaStato();<br \/>\n});<\/p>\n<p>lista.appendChild(voce);<br \/>\ncampo.value = &#8220;&#8221;;<br \/>\naggiornaStato();<br \/>\n}<\/p>\n<p>bottone.addEventListener(&#8220;click&#8221;, aggiungiCompito);<br \/>\ncampo.addEventListener(&#8220;keydown&#8221;, function (evento) {<br \/>\nif (evento.key === &#8220;Enter&#8221;) {<br \/>\naggiungiCompito();<br \/>\n}<br \/>\n});<\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p>La funzione trim() elimina gli spazi iniziali e finali, evitando l\u2019inserimento di voci vuote. createElement() crea un elemento, appendChild() lo aggiunge alla lista e remove() lo elimina. classList.toggle() attiva o disattiva la classe CSS. Il tasto Invio richiama la stessa funzione del pulsante.<\/p>\n<p>Nota tecnica: il doppio clic produce anche eventi click; nell\u2019esempio l\u2019elemento viene comunque rimosso correttamente. Per applicazioni pi\u00f9 complesse sarebbe preferibile prevedere un pulsante Elimina dedicato, anche per migliorare l\u2019accessibilit\u00e0.<\/p>\n<h1>6.5 Come collaborano i tre file<\/h1>\n<p>Supponiamo di digitare \u201cStudiare il DOM\u201d e premere Aggiungi. Il browser mostra il campo e il pulsante definiti in HTML. L\u2019evento click avvia la funzione JavaScript, che legge il testo, crea un nuovo elemento &lt;li&gt; e lo inserisce nell\u2019elenco. Il CSS applica immediatamente lo stile previsto per tutte le voci. Se si clicca sul compito, JavaScript aggiunge la classe fatto e il CSS mostra il testo barrato. Infine, il riepilogo viene aggiornato leggendo il numero delle voci presenti e completate.<\/p>\n<p>Questo esempio dimostra la separazione delle responsabilit\u00e0: HTML descrive cosa esiste, CSS stabilisce come appare, JavaScript definisce cosa accade quando si interagisce con la pagina.<\/p>\n<h1>Esercitazione e verifica<\/h1>\n<ol>\n<li>Apri index.html nel browser e inserisci tre attivit\u00e0. 2. Contrassegnane una come completata e verifica il conteggio. 3. Elimina una voce con doppio clic. 4. Cambia il colore del pulsante nel CSS e verifica che non occorra modificare HTML o JavaScript. 5. Spiega quale istruzione crea una nuova voce e quale modifica il suo aspetto quando viene completata.<\/li>\n<\/ol>\n<p>Per approfondire: aggiungi un pulsante \u201cElimina completati\u201d oppure impedisci l\u2019inserimento di attivit\u00e0 duplicate. Queste modifiche richiedono ulteriori controlli JavaScript.<\/p>\n<p><a href=\"https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4.png\"><img fetchpriority=\"high\" decoding=\"async\" class=\"wp-image-2040 aligncenter\" src=\"https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4.png\" alt=\"\" width=\"872\" height=\"1232\" srcset=\"https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4.png 1055w, https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4-212x300.png 212w, https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4-725x1024.png 725w, https:\/\/www.vr-m.it\/sito\/wp-content\/uploads\/2026\/10\/scheda-4-768x1085.png 768w\" sizes=\"(max-width: 872px) 100vw, 872px\" \/><\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>HTML, CSS e JavaScript: realizziamo una lista dei compiti Tecnologie e Progettazione di Sistemi Informatici e di Telecomunicazioni | Laboratorio guidato Obiettivo: mettere in relazione struttura, presentazione e comportamento realizzando una piccola applicazione web utilizzabile direttamente nel browser. 6.1 Il progetto: una lista interattiva Dopo aver studiato separatamente HTML5, CSS e JavaScript, realizziamo un\u2019applicazione che &hellip; <\/p>\n<p class=\"link-more\"><a href=\"https:\/\/www.vr-m.it\/sito\/2026\/10\/12\/4-html-css-e-javascript\/\" class=\"more-link\">Leggi tutto<span class=\"screen-reader-text\"> &#8220;4. HTML, CSS e JavaScript&#8221;<\/span><\/a><\/p>\n","protected":false},"author":1,"featured_media":2041,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[66],"class_list":["post-2039","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-informatica","tag-tpsit"],"_links":{"self":[{"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/posts\/2039","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/comments?post=2039"}],"version-history":[{"count":1,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/posts\/2039\/revisions"}],"predecessor-version":[{"id":2042,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/posts\/2039\/revisions\/2042"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/media\/2041"}],"wp:attachment":[{"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/media?parent=2039"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/categories?post=2039"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.vr-m.it\/sito\/wp-json\/wp\/v2\/tags?post=2039"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}