The artwork is the residue of a process, of a project, rather than something that you see and then have to realize thereafter.


David Shrigley, 2016

T H E O R I E

Projekt Ziel

Jede:r Studierende wird eine eigene kleine Archiv-Website umsetzen. Diese soll gestalterisch, semantisch und interaktiv weiterentwickelt und bis zum Semesterende (22.6.) fertiggestellt werden.

Lane is never coming back

Projekt Umfang (Einzelseiten und Features)

Projekt Struktur

Diese Ordnung kann als Ausgangspunkt für die Website herangezogen werden.

📂 vorname-bag 📂 fonts 📦 beispiel-regular.woff2 📁 media 🖼️ beispiel-grafik.png 📹 beispiel-video.mp4 📂 objekte 🧃 beispiel.html (Detailseite) 📂 scripts 🪩 vorname.js 📂 styles 🎨 vorname.css 🏠 index.html (Startseite)
Ordnerstruktur

P R A X I S

Projekt anlegen

Filter und Listen

Die aktuell ausgewählte Kategorie im Filter visuell hervorheben.

#filter .active { color: seagreen; }
CSS
function filter(kategorie) { … buttonAlles.classList.remove("active"); buttonSnacks.classList.remove("active"); buttonTools.classList.remove("active"); buttonRund.classList.remove("active"); document.getElementById(kategorie).classList.add("active"); }
JS

Seitenaufruf als Auslöser

Eine Funktion beim Laden der Website ausführen.

<section> <h1 id="zitat" >Im Moment habe ich kein E-lan</h1> <img src="media/beispiel-grafik.png" alt="Schwere Füße"> <button id="wow">WOW</button> </section>
HTML
function quote() { … titel.textContent = "That’s hot"; bild.src = "media/andere-beispiel-grafik.jpg"; } button.onclick = quote; window.onload = quote;
JS

Zufallsgenerator

Bei jedem Neuladen der Website ein zufälliges Text-Element einer Liste auswählen.

<section> <h1 id="zitat" >Im Moment habe ich kein E-lan</h1> <img src="media/beispiel-grafik.png" alt="Schwere Füße"> <button id="wow">WOW</button> </section>
HTML
function quote() { … var randomZahl = Math.floor(Math.random() * zitate.length); var zitate = ["Im Moment habe ich kein E-lan", "Cringe", "Zahlen bitte!"]; titel.textContent = zitate[0]; // Im Moment habe ich kein E-lan titel.textContent = zitate[randomZahl]; // ? bild.src = "media/andere-beispiel-grafik.jpg"; } button.onclick = quote; window.onload = quote;
JS

Bei jedem Neuladen der Website ein zufälliges Bild-Element einer Liste auswählen.

<section> <h1 id="zitat" >Im Moment habe ich kein E-lan</h1> <img src="media/beispiel-grafik.png" alt="Schwere Füße"> <button id="wow">WOW</button> </section>
HTML
function quote() { … var randomZahl = Math.floor(Math.random() * zitate.length); var zitate = ["Im Moment habe ich kein E-lan", "Cringe", "Zahlen bitte!"]; var bilder = ["media/andere-beispiel-grafik.jpg", "media/foto-2.jpg", "media/foto-3.png"]; titel.textContent = zitate[0]; // Im Moment habe ich kein E-lan titel.textContent = zitate[randomZahl]; // ? bild.src = "media/andere-beispiel-grafik.jpg"; bild.src = bilder[randomZahl]; // ? } button.onclick = quote; window.onload = quote;
JS

Sounds

Audiofiles abspielen und pausieren.

<div id="box">🔊</div> <audio id="sound" src="media/beispiel-audio.mp3" controls>🥵 Oje</audio>
HTML
#box { position: fixed; bottom: 20px; left: 20px; z-index: 2; font-size: 50px; } audio { display: none; }
CSS
var audioButton = document.getElementById("box"); var audioFile = document.getElementById("sound"); function audio(sound) { console.log(sound); if(sound.paused) { sound.play(); } else { sound.pause(); } } audioButton.onclick = () => audio(audioFile);
JS

Animation

Die Veränderung von Elementen unabhängig von Interaktionen animieren.

<div id="box">🔊</div> <audio id="sound" src="media/beispiel-audio.mp3" controls>🥵 Oje</audio>
HTML
@keyframes slide { 0% { transform: translateX(0%); } 100% { transform: translateX(100%); } } #box { … animation-name: slide; animation-duration: 2s; animation-iteration-count: infinite; animation-direction: alternate; animation: slide 2s infinite alternate; // Kurze Schreibweise }
CSS

Mauszeiger

Das Aussehen vom Cursor anpassen.

* { cursor: pointer; cursor: help; cursor: zoom-in; cursor: url("../media/cursor.png") 16 16, auto; // 32x32px }
CSS

Den Cursor durch ein komplexeres Element ergänzen oder ersetzen.

<body> … <div id="cursor">🐝</div> </body>
HTML
* { cursor: none; } #cursor { position: fixed; z-index: 100; pointer-events: none; user-select: none; }
CSS
var cursorIcon = document.getElementById("cursor"); function cursor(event) { console.log("x:", event.clientX, "y:", event.clientY); cursorIcon.style.left = event.clientX; cursorIcon.style.top = event.clientY; } window.onmousemove = cursor;
JS

Light und Dark Mode

Das Design der Website den visuellen Präferenzen des Betriebssystems anpassen.

body { background-color: #f0fff0; } @media (prefers-color-scheme: dark) { body { background-color: indigo; color: ivory; } }
CSS

Theme

Dokument um Farbschema und Icon ergänzen.

<html lang="de"> <head> … <meta name="theme-color" content="#ff69b4"> <link href="media/favicon.png" rel="icon"> // 192x192px </head> <body> … </body> </html>
HTML

Beschreibung

Dokument um erklärendes Snippet ergänzen. Suchmaschinen, Social Media und Messenger zeigen diese Information meistens neben dem Titel und dem Link an.

<html lang="de"> <head> <meta charset="utf-8"> <title>Meine erste Website</title> <meta name="description" content="What’s In My Bag Yo!"> <meta property="og:title" content="Ur cooler Website Spezialtitel für Social Media"> <meta property="og:description" content="Wer das liest ist schön."> <meta property="og:image" content="media/website-thumbnail.jpg"> </head> <body> … </body> </html>
HTML

Projekt Abgabe

Die fertige What’s In My Bag-Website muss bis zum Semesterende (22.06.2024) als ein verpackter Ordner mit maximal 100MB inklusive aller relevanten Dateien (HTML, CSS, JS, Medien, Fonts, …) per Slack DM abgegeben werden.

📂 → 🗜️ → 🎁 → 💬 → ✅