| | |
| | | <h3>Grundlagen</h3> |
| | | <ul> |
| | | <li>HTML/CSS/JS</li> |
| | | <li>JSON</li> |
| | | <li>HTTP-Protokoll</li> |
| | | <li>JSON</li> |
| | | <li>Debugger</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <h3>Fortgeschrittenes</h3> |
| | | <ul> |
| | | <li>JavaScript</li> |
| | | <li>NodeJS</li> |
| | | <li>Responsive Design</li> |
| | | <li>CSS-Animationen</li> |
| | |
| | | #my-id /* ID */ |
| | | html, body /* Mehrfachselektion */ |
| | | div > p /* p die direkt unterhalb eines div sind */ |
| | | div p /* p die irgendwo unterhalb eines div sind */ |
| | | a:visited /* besuchte Links */ |
| | | div:hover /* divs über die man mit der Maus fährt */ |
| | | span.important /* span mit der Klasse "important" */ |
| | | </code> |
| | | </pre> |
| | |
| | | display: inline-block; |
| | | width: 20px; |
| | | height: 20px; |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <h3>Spezifität</h3> |
| | | <p>Regeln können andere Regeln überschreiben</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <script type="text/template"> |
| | | <div style="display: inline-block"></div> |
| | | </script> |
| | | </code> |
| | | </pre> |
| | | <pre> |
| | | <code class="css" data-trim data-line-numbers> |
| | | #id:hover { display: none } |
| | | |
| | | #id { display: block } |
| | | |
| | | .class.clazz { display: inline } |
| | | |
| | | div { display: inline-block } |
| | | </code> |
| | | </pre> |
| | | </section> |
| | |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <h3>Beispiel Menü</h3> |
| | | <iframe data-src="/assets/html/css-menu.html"></iframe> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="css" data-trim data-line-numbers> |
| | | .menu-item { |
| | | display: inline-block; |
| | | |
| | | position: relative; |
| | | } |
| | | |
| | | .menu-item .children { |
| | | display: none; |
| | | |
| | | position: absolute; |
| | | } |
| | | |
| | | .menu-item:hover .children { |
| | | display: block; |
| | | } |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <script type="text/template"> |
| | | <div class="menu"> |
| | | <div class="menu-item">Eins</div> |
| | | <div class="menu-item"> |
| | | Hover Me! |
| | | <div class="children"> |
| | | <div>Item 1</div> |
| | | <div>Item 2</div> |
| | | </div> |
| | | </div> |
| | | <div class="menu-item">Drei</div> |
| | | </div> |
| | | </script> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | <section> |
| | | <section> |
| | | <h2>JS</h2> |
| | | </section> |
| | | <section> |
| | | <ul> |
| | | <li>JavaScript stammt aus dem Jahr 1995 von Netscape</li> |
| | | <li>Syntaktisch an Java angelehnt</li> |
| | | <li>Ursprünglich nur optionale, verzichtbare Effekte (unobstrusive)</li> |
| | | <li>Mittlerweile von ECMA standardisiert</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <table> |
| | | <tr><th>Version</th><th>ECMA Standard</th><th>Jahr</th></tr> |
| | | <tr><td>ES1</td><td>ECMAScript 1</td><td>1997</td></tr> |
| | | <tr><td>ES2</td><td>ECMAScript 2</td><td>1998</td></tr> |
| | | <tr><td><strong>ES3</strong></td><td><strong>ECMAScript 3</strong></td><td><strong>1999</strong></td></tr> |
| | | <tr><td><strong>ES5</strong></td><td><strong>ECMAScript 5</strong></td><td><strong>2009</strong></td></tr> |
| | | <tr><td>ES6</td><td>ECMAScript 2015</td><td>2015</td></tr> |
| | | <tr><td></td><td>...</td><td></td></tr> |
| | | <tr><td></td><td>ECMAScript 2020</td><td>2020</td></tr> |
| | | </table> |
| | | </section> |
| | | <section> |
| | | <p>Code wird zwischen <code>script</code>-Tags geschrieben</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <!DOCTYPE html> |
| | | <html lang="de"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | </head> |
| | | <body> |
| | | <script>// code</script> |
| | | </body> |
| | | </html> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>DOM-API</p> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | // findet das erste Element |
| | | const parent = document.querySelector("#id"); |
| | | |
| | | // findet alle Elemente |
| | | const elements = document.querySelectorAll("#id"); |
| | | |
| | | // Element erstellen |
| | | const newElement = document.createElement("div"); |
| | | |
| | | newElement.addEventListener("click", (event) => { |
| | | // Click-Event |
| | | }); |
| | | |
| | | // Element anhängen |
| | | parent.appendChild(newElement); |
| | | |
| | | newElement.remove(); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | <section> |
| | | <section> |
| | | <h2>Auslagern in verschiedene Dateien</h2> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <!-- CSS --> |
| | | <link href="styles.css" rel="stylesheet"> |
| | | </head> |
| | | <body> |
| | | <!-- JS --> |
| | | <script src="index.js"></script> |
| | | </body> |
| | | </html> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Parsen eines HTML-Dokuments</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers="1|2|3|4|5|6|7|8|9|10"> |
| | | <script type="text/template"> |
| | | <!DOCTYPE html> |
| | | <html lang="de"> |
| | | <head> |
| | | <meta charset="UTF-8"> |
| | | <title>Coole Seite 😀</title> |
| | | </head> |
| | | <body> |
| | | <div>Ganz langer Text</div> |
| | | </body> |
| | | </html> |
| | | </script> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Verschiedene Varianten, JavaScript erst am Ende auszuführen</p> |
| | | <p>Damals mit jQuery:</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <script> |
| | | $(document).ready((event) => { |
| | | const element = document.querySelector("#hello"); |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <div id="hello">Hello World!</div> |
| | | </body> |
| | | </html> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p><code>script</code>-Tag am Ende</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | </head> |
| | | <body> |
| | | <div>Hello World!</div> |
| | | ... |
| | | <script src="index.js"></script> |
| | | </body> |
| | | </html> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Event-basiert, z.B. per DOMContentLoaded</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <!DOCTYPE html> |
| | | <html> |
| | | <head> |
| | | <script> |
| | | document.addEventListener("DOMContentLoaded", (event) => { |
| | | // wird ausgeführt, sobald das Dokument geparst wurde |
| | | const element = document.querySelector("#hello"); |
| | | }); |
| | | </script> |
| | | </head> |
| | | <body> |
| | | <div id="hello">Hello World!</div> |
| | | </body> |
| | | </html> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <p>Moderne Variante</p> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <script src="index.js" defer></script> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <h2><code>document</code>-Operationen</h2> |
| | | <pre> |
| | | <code class="js" data-trim data-line-numbers> |
| | | document.open(); |
| | | document.write("<div>Booo!</div>"); |
| | | document.close(); |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | <section> |
| | | <a href="https://developer.mozilla.org/en-US/docs/Web/API/Document/write"> |
| | | <img data-src="/assets/images/document.write.jpg"> |
| | | </a> |
| | | </section> |
| | | <section> |
| | | <pre> |
| | | <code class="html" data-trim data-line-numbers> |
| | | <body> |
| | | <script>document.write("<p>Dies ist ein Text.</p>")</script> |
| | | <button>Dunkle Magie</button> |
| | | <script> |
| | | const button = document.querySelector("button"); |
| | | |
| | | button.addEventListener("click", () => { |
| | | document.write("Und pfutsch!"); |
| | | }); |
| | | </script> |
| | | </body> |
| | | </code> |
| | | </pre> |
| | | </section> |
| | | </section> |
| | | <section> |
| | | <section> |
| | | <h2>HTTP-Protokoll</h2> |
| | | </section> |
| | | <section> |
| | | <img data-src="/assets/images/osi-model.jpg"> |
| | | </section> |
| | | <section> |
| | | <ul> |
| | | <li>Befindet sich auf den OSI-Schichten 5, 6 und 7</li> |
| | | <li>Basiert auf dem Anfrage-Antwort-Prinzip</li> |
| | | <li>Basiert auf reinem Text</li> |
| | | </ul> |
| | | </section> |
| | | <section> |
| | | <p><code>npm install http-server</code></p> |
| | | <p><code>npx http-server --port 3000</code></p> |
| | | </section> |
| | | </section> |
| | | </div> |
| | | </div> |