Bewerbungsfragen für Junior Frontend Entwickler: HTML, CSS & JavaScript Grundlagen

Milad Bonakdar
Autor
Meistern Sie die grundlegenden Konzepte mit 32 essentiellen Bewerbungsfragen zu HTML, CSS und JavaScript. Perfekte Vorbereitung für Bewerbungsgespräche als Junior Frontend Entwickler in 2024-2025.
Einführung
Dieser umfassende Leitfaden enthält 32 sorgfältig ausgewählte Interviewfragen, die die grundlegenden Prinzipien der Frontend-Entwicklung abdecken: HTML, CSS und JavaScript. Dies sind die Fragen, denen Junior-Frontend-Entwickler in den Jahren 2024-2025 tatsächlich in Vorstellungsgesprächen begegnen. Jede Frage beinhaltet eine ausführliche Antwort, eine Seltenheitseinschätzung und eine Schwierigkeitsbewertung, die auf der Analyse von Hunderten von echten Vorstellungsgesprächen bei großen Technologieunternehmen und Startups basiert.
Dies ist Teil 1 unseres kompletten Interviewleitfadens. Fragen zu React, Build-Tools, Performance-Optimierung, Debugging, Barrierefreiheit, Testing und Soft Skills findest du in Teil 2: React, Tools & Advanced Topics.
HTML Grundlagen (7 Fragen)
1. Was sind semantische HTML-Elemente und warum sind sie wichtig?
Antwort: Semantische HTML-Elemente beschreiben ihre Bedeutung und ihren Zweck sowohl für Browser als auch für Entwickler eindeutig. Beispiele hierfür sind <header>, <nav>, <main>, <article>, <section>, <aside> und <footer>. Sie sind wichtig, weil sie die Barrierefreiheit für Screenreader und unterstützende Technologien verbessern, die Suchmaschinenoptimierung (SEO) verbessern, indem sie Suchmaschinen helfen, die Inhaltsstruktur zu verstehen, und den Code wartbarer und lesbarer machen. Im Gegensatz zu generischen <div>- und <span>-Elementen, die keinen Kontext liefern, kommunizieren semantische Elemente die Rolle und Bedeutung von Inhalten.
Seltenheit: Häufig
Schwierigkeit: Leicht
2. Erkläre den Unterschied zwischen Inline-, Block- und Inline-Block-Elementen
Antwort:
- Block-Elemente beginnen in einer neuen Zeile und nehmen die gesamte verfügbare Breite ein (z. B.
<div>,<p>,<h1>). Du kannst die Eigenschaften width und height festlegen. - Inline-Elemente bleiben in derselben Zeile und nehmen nur so viel Breite ein, wie benötigt wird (z. B.
<span>,<a>,<strong>). Du kannst width oder height nicht festlegen. - Inline-Block-Elemente bleiben inline, erlauben dir aber, width und height wie bei Block-Elementen festzulegen. Dies kombiniert den Fluss von Inline- mit den Größenbestimmungsfunktionen von Block.
Seltenheit: Häufig
Schwierigkeit: Leicht
3. Was sind Void (Self-Closing) Elemente in HTML?
Antwort: Void-Elemente sind HTML-Elemente, die keine schließenden Tags haben und keinen Inhalt enthalten können. Häufige Beispiele sind: <img>, <br>, <hr>, <input>, <meta>, <link>, <area>, <base>, <col>, <embed> und <source>. Diese Elemente sind mit nur ihrem öffnenden Tag und Attributen vollständig. Zum Beispiel benötigt <img src="photo.jpg" alt="description"> keinen schließenden </img>-Tag.
Seltenheit: Häufig
Schwierigkeit: Leicht
4. Wie gestaltest du eine Website barrierefrei? Welche HTML-Attribute verbessern die Barrierefreiheit?
Antwort: Um Websites barrierefrei zu gestalten:
- Verwende semantische HTML-Elemente (
<nav>,<main>,<header>,<footer>) - Gib für alle Bilder
alt-Attribute an, die ihren Inhalt beschreiben - Behalte eine korrekte Überschriftenhierarchie (H1-H6) bei, ohne Ebenen zu überspringen
- Beschrifte Formulareingaben mit
<label>-Elementen unter Verwendung desfor-Attributs - Stelle die Zugänglichkeit über die Tastatur mit der richtigen Tab-Reihenfolge sicher
- Verwende ARIA-Attribute, wenn semantisches HTML nicht ausreicht:
aria-label,aria-describedby,aria-hidden,aria-live - Füge
role-Attribute für komplexe Widgets hinzu - Stelle einen ausreichenden Farbkontrast sicher (4,5:1 für normalen Text)
- Sorge dafür, dass interaktive Elemente fokussierbar sind und sichtbare Fokusindikatoren vorhanden sind
Seltenheit: Häufig
Schwierigkeit: Mittel
5. Erkläre den Unterschied zwischen GET- und POST-Methoden in Formularen
Antwort:
- GET: Fügt Formulardaten als Query-Parameter an die URL an, wodurch die Daten im Browser sichtbar werden. Hat Längenbeschränkungen (~2000 Zeichen), kann zwischengespeichert und als Lesezeichen gespeichert werden, ist unsicher für sensible Daten. Wird zum Abrufen von Daten verwendet, bei denen die Anfrage den Serverzustand nicht verändert (Suchen, Filter).
- POST: Sendet Daten im Anfrage-Body, nicht sichtbar in der URL. Keine Längenbeschränkungen, kann nicht standardmäßig zwischengespeichert werden, sicherer für sensible Informationen. Wird zum Senden von Daten verwendet, die den Serverzustand verändern (Login-Formulare, Datei-Uploads, Erstellen von Datensätzen).
Beispiel: Suchformulare verwenden typischerweise GET, damit die Ergebnisse als Lesezeichen gespeichert werden können, während Login-Formulare POST verwenden, um Anmeldeinformationen zu verbergen.
Seltenheit: Häufig
Schwierigkeit: Leicht-Mittel
6. Was ist der Zweck des <meta>-Tags?
Antwort: Das <meta>-Tag liefert Metadaten über das HTML-Dokument, die nicht auf der Seite angezeigt werden, aber von Browsern, Suchmaschinen und anderen Webdiensten verwendet werden. Häufige Verwendungen sind:
- Zeichenkodierung:
<meta charset="UTF-8"> - Viewport-Einstellungen für Responsive Design:
<meta name="viewport" content="width=device-width, initial-scale=1.0"> - SEO-Beschreibungen:
<meta name="description" content="Seitenbeschreibung"> - Autoreninformationen:
<meta name="author" content="Name"> - Keywords (weniger relevant heute):
<meta name="keywords" content="keyword1, keyword2">
Seltenheit: Häufig
Schwierigkeit: Leicht
7. Was ist der Unterschied zwischen <script>, <script async> und <script defer>?
Antwort:
- Reguläres
<script>: Blockiert das HTML-Parsing, während das Skript heruntergeladen und ausgeführt wird. Das Seitenrendering stoppt, bis das Skript abgeschlossen ist. <script async>: Lädt das Skript parallel zum HTML-Parsing herunter, führt es aber sofort aus, wenn es bereit ist (blockiert möglicherweise das Parsing). Die Ausführungsreihenfolge ist nicht garantiert. Gut für unabhängige Skripte wie Analytics.<script defer>: Lädt parallel herunter, führt aber erst aus, nachdem das HTML-Parsing abgeschlossen ist, wobei die Skriptreihenfolge beibehalten wird. Am besten für Skripte, die vom DOM oder anderen Skripten abhängen.
Bewährte Methode: Platziere <script defer> im <head>, um eine optimale Performance zu erzielen und gleichzeitig die richtige Ausführungsreihenfolge sicherzustellen.
Seltenheit: Ungewöhnlich
Schwierigkeit: Mittel
CSS Grundlagen (10 Fragen)
8. Erkläre das CSS Box Model
Antwort: Das CSS Box Model beschreibt, wie Elemente mit vier Komponenten gerendert werden (von innen nach außen):
- Content: Der eigentliche Inhalt (Text, Bilder)
- Padding: Raum zwischen Inhalt und Rahmen (innen)
- Border: Der Rahmen, der das Padding umgibt
- Margin: Raum außerhalb des Rahmens (zwischen Elementen)
Die Eigenschaft box-sizing beeinflusst die Berechnungen:
box-sizing: content-box(Standard): Width/height gelten nur für den Inhalt; Padding und Border werden hinzugefügtbox-sizing: border-box: Width/height beinhalten Inhalt + Padding + Border (intuitiver)
Beispiel: Mit box-sizing: border-box bleibt ein Element mit width: 100px; padding: 10px; border: 2px; genau 100px breit.
Seltenheit: Häufig
Schwierigkeit: Leicht-Mittel
9. Erkläre die CSS-Spezifität und wie sie funktioniert
Antwort: Die CSS-Spezifität bestimmt, welche Stile angewendet werden, wenn mehrere Regeln auf dasselbe Element abzielen. Die Spezifität wird durch Zählen von Selektoren berechnet:
- Inline-Stile: 1000 Punkte
- IDs: 100 Punkte pro Stück
- Klassen, Attribute, Pseudo-Klassen: 10 Punkte pro Stück
- Elemente, Pseudo-Elemente: 1 Punkt pro Stück
Beispiele:
#nav .button= 110 (1 ID + 1 Klasse).header .nav a= 21 (2 Klassen + 1 Element)div p= 2 (2 Elemente)
Wenn die Spezifität gleich ist, gewinnt die letzte Regel (Cascading). !important setzt alles außer Kraft, sollte aber vermieden werden. Bewährte Methode: Verwende Klassen für die Gestaltung, vermeide IDs und !important.
Seltenheit: Häufig
Schwierigkeit: Mittel
10. Was ist Flexbox und wann würdest du es verwenden?
Antwort: Flexbox ist ein eindimensionales Layoutsystem zum Anordnen von Elementen entlang einer einzelnen Achse (Zeile oder Spalte).
Eigenschaften des Elternelements (Flex-Container):
display: flex- aktiviert Flexboxflex-direction- row, column, row-reverse, column-reversejustify-content- Ausrichtung entlang der Hauptachse (center, space-between, space-around)align-items- Ausrichtung entlang der Kreuzachse (center, flex-start, flex-end, stretch)flex-wrap- steuert das Umbrechen (nowrap, wrap)
Eigenschaften des Kindelements (Flex-Item):
flex-grow- wie stark das Element relativ zu anderen wächstflex-shrink- wie stark das Element schrumpftflex-basis- anfängliche Größe vor dem Wachsen/Schrumpfenalign-self- überschreibt align-items für einzelne Elemente
Verwende Flexbox für: Navigationsleisten, Kartenlayouts, Zentrieren von Elementen, gleichmäßige Verteilung von Raum, Ausrichten von Elementen innerhalb von Containern.
Seltenheit: Häufig
Schwierigkeit: Mittel
11. Was ist CSS Grid und wie unterscheidet es sich von Flexbox?
Antwort: CSS Grid ist ein zweidimensionales Layoutsystem zum Erstellen komplexer Layouts mit Zeilen UND Spalten gleichzeitig.
Hauptunterschiede:
- Grid: Zweidimensional (Zeilen + Spalten), am besten für Seitenlayouts
- Flexbox: Eindimensional (einzelne Achse), am besten für Komponenten
Grid-Eigenschaften:
Wann zu verwenden:
- Grid: Gesamtseitenlayouts, Designs im Magazinstil, komplexe Gridstrukturen
- Flexbox: Navigationsleisten, Karten, Komponenten innerhalb von Gridzellen
- Beide zusammen: Grid für Makro-Layout, Flexbox für Mikro-Layouts
Seltenheit: Häufig
Schwierigkeit: Mittel
12. Wie zentrierst du einen Div horizontal und vertikal?
Antwort:
Moderne Ansätze (bevorzugt):
Legacy-Ansätze:
Flexbox und Grid sind mittlerweile die Standardlösungen, da sie sauberer und flexibler sind.
Seltenheit: Häufig
Schwierigkeit: Leicht-Mittel
13. Erkläre CSS Positioning: static, relative, absolute, fixed und sticky
Antwort:
- Static (Standard): Normaler Dokumentenfluss, keine spezielle Positionierung
- Relative: Positioniert relativ zu seiner normalen Position unter Verwendung von top/right/bottom/left. Der ursprüngliche Raum im Dokumentenfluss bleibt erhalten. Wird oft als Positionierungskontext für absolute Kinder verwendet.
- Absolute: Aus dem Fluss entfernt, positioniert relativ zum nächsten positionierten Vorfahren (oder Viewport, falls keiner vorhanden). Beeinflusst keine anderen Elemente.
- Fixed: Aus dem Fluss entfernt, positioniert relativ zum Viewport. Bleibt beim Scrollen an Ort und Stelle.
- Sticky: Hybrid aus relativ und fixed. Verhält sich relativ bis zur Scrollschwelle, wird dann fixed. Nützlich für Sticky-Header, die im Fluss beginnen.
Beispiel: Navigation, die nach dem Scrollen fixed wird, verwendet position: sticky; top: 0;
Seltenheit: Häufig
Schwierigkeit: Mittel
14. Was ist der Unterschied zwischen display: none, visibility: hidden und opacity: 0?
Antwort:
display: none: Element vollständig aus dem Dokumentenfluss entfernt, nimmt keinen Platz ein, nicht zugänglich für Screenreader, keine Pointer-Eventsvisibility: hidden: Element unsichtbar, behält aber den Platz im Layout bei, weiterhin im DOM, nicht zugänglich für Screenreader, keine Pointer-Eventsopacity: 0: Element unsichtbar, behält aber den Platz bei, weiterhin im DOM, IMMER NOCH zugänglich für Screenreader, EMPFÄNGT IMMER NOCH Pointer-Events
Anwendungsfälle:
display: none- Umschalten der Sichtbarkeit (Modale, Dropdowns)visibility: hidden- Beibehalten des Layouts beim Ausblendenopacity: 0- Fade-Animationen, Element interaktiv halten
Seltenheit: Häufig
Schwierigkeit: Leicht-Mittel
15. Was sind CSS-Pseudoklassen und Pseudo-Elemente? Gib Beispiele an.
Antwort:
Pseudo-Klassen (einzelner Doppelpunkt) - Wählen Elemente basierend auf Zustand oder Position aus:
Weitere Beispiele: :active, :checked, :first-child, :last-child, :nth-of-type()
Pseudo-Elemente (doppelter Doppelpunkt) - Gestalten bestimmte Teile oder fügen Inhalte ein:
Pseudo-Elemente eignen sich hervorragend für dekorative Elemente, ohne HTML hinzuzufügen.
Seltenheit: Häufig
Schwierigkeit: Mittel
16. Wie erstellst du responsive Layouts? Erkläre Media Queries.
Antwort: Responsive Layouts passen sich an unterschiedliche Bildschirmgrößen an mit:
Media Queries:
Häufige Breakpoints:
- 320px: Kleines Mobilgerät
- 768px: Tablet
- 1024px: Desktop
- 1440px: Großer Desktop
Weitere responsive Techniken:
- Fluide Layouts (Prozentsätze,
vw/vh-Einheiten) - Flexible Flexbox und Grid
- Responsive Bilder (
max-width: 100%,srcset-Attribut) min-width-Queries (Mobile-First) vs.max-width(Desktop-First)
Seltenheit: Häufig
Schwierigkeit: Mittel
17. Was ist z-index und wie funktioniert es?
Antwort: z-index steuert die Stapelreihenfolge von positionierten Elementen (relative, absolute, fixed, sticky) entlang der Z-Achse (vorne nach hinten).
Wichtige Punkte:
- Funktioniert nur bei positionierten Elementen (nicht static)
- Höhere Werte erscheinen im Vordergrund
- Kann negative Werte verwenden
- Der Standardwert ist
auto(effektiv 0) - Erstellt einen "Stapelkontext", der beeinflusst, wie Kinder gestapelt werden
Häufiger Fehler:
Das Kind mit z-index 9999 kann nicht über einem anderen Element mit z-index 2 erscheinen, das sich außerhalb des Stapelkontexts des Elternelements befindet.
Seltenheit: Häufig
Schwierigkeit: Mittel
JavaScript Grundlagen (15 Fragen)
18. Erkläre den Unterschied zwischen var, let und const
Antwort:
var: Funktionsbezogener Gültigkeitsbereich, wird gehoisted und mitundefinedinitialisiert, kann neu deklariert werden, in modernem Code weitgehend veraltetlet: Blockbezogener Gültigkeitsbereich, wird gehoisted, befindet sich aber in der Temporal Dead Zone (TDZ) bis zur Deklaration, kann im selben Gültigkeitsbereich nicht neu deklariert werdenconst: Blockbezogener Gültigkeitsbereich, wird gehoisted, befindet sich aber in der TDZ, muss bei der Deklaration initialisiert werden, kann nicht neu zugewiesen werden (aber Objekt-/Array-Inhalte können geändert werden)
Bewährte Methoden:
- Verwende standardmäßig
const - Verwende
let, wenn du neu zuweisen musst - Verwende niemals
varin modernem JavaScript
Beispiel:
Seltenheit: Häufig
Schwierigkeit: Leicht
19. Was sind Closures und gib ein praktisches Beispiel?
Antwort: Ein Closure liegt vor, wenn eine innere Funktion Zugriff auf Variablen aus dem Gültigkeitsbereich ihrer äußeren (umschließenden) Funktion hat, auch nachdem die äußere Funktion zurückgekehrt ist. Die innere Funktion "schließt" diese Variablen ein.
Beispiel:
Die innere Funktion behält den Zugriff auf count, obwohl createCounter die Ausführung beendet hat. Dies ermöglicht Datenschutz - count kann nicht direkt von außen aufgerufen werden.
Anwendungsfälle: Datenschutz, Funktionsfabriken, Callbacks, Modulmuster, Event-Handler
Seltenheit: Häufig
Schwierigkeit: Mittel
20. Erkläre == vs. === in JavaScript
Antwort:
==(lose Gleichheit): Führt vor dem Vergleich eine Typumwandlung durch, wandelt Typen an, um sie anzupassen===(strikte Gleichheit): Prüft sowohl Wert ALS AUCH Typ, keine Typumwandlung
Beispiele:
Bewährte Methode: Verwende immer === und !==, um unerwartete Fehler durch Typumwandlung zu vermeiden.
Seltenheit: Häufig
Schwierigkeit: Leicht
21. Was ist Hoisting in JavaScript?
Antwort: Hoisting ist das Verhalten von JavaScript, Variablen- und Funktionsdeklarationen während der Kompilierungsphase, vor der Codeausführung, an den Anfang ihres Gültigkeitsbereichs zu verschieben.
Unterschiedliches Hoisting-Verhalten:
Wichtige Punkte:
var-Deklarationen werden gehoisted und mitundefinedinitialisiertlet/constwerden gehoisted, bleiben aber uninitialisiert (Temporal Dead Zone)- Funktionsdeklarationen werden vollständig gehoisted (einschließlich Implementierung)
- Funktionsausdrücke werden nicht vollständig gehoisted
Seltenheit: Häufig
Schwierigkeit: Mittel
22. Erkläre das this-Keyword und wie es sich in Arrow-Funktionen unterscheidet
Antwort: this bezieht sich auf den Kontext, in dem eine Funktion ausgeführt wird. Sein Wert hängt davon ab, WIE die Funktion aufgerufen wird.
Reguläre Funktionen:
Arrow-Funktionen:
Hauptunterschiede:
- Reguläre Funktionen:
thiswird durch die Aufrufstelle bestimmt - Arrow-Funktionen:
thiswird lexikalisch vom umschließenden Gültigkeitsbereich geerbt - Arrow-Funktionen haben kein eigenes
this,argumentsodersuper
Anwendungsfall: Arrow-Funktionen eignen sich hervorragend für Callbacks, bei denen du das äußere this beibehalten möchtest:
Seltenheit: Häufig
Schwierigkeit: Mittel-Schwer
23. Was sind Template Literals und welche Vorteile haben sie?
Antwort: Template Literals sind String-Literale mit Backticks (`), die String-Interpolation und mehrzeilige Strings unterstützen.
Funktionen:
Vorteile:
- Sauberere Syntax als String-Verkettung
- Keine Notwendigkeit für
\nfür Zeilenumbrüche - Kann jeden JavaScript-Ausdruck mit
${}einbetten - Besser für HTML/CSS-Generierung
Seltenheit: Häufig
Schwierigkeit: Leicht
24. Erkläre Promises und ihre drei Zustände
Antwort: Ein Promise repräsentiert den eventuellen Abschluss (oder Misserfolg) einer asynchronen Operation und ihren resultierenden Wert.
Drei Zustände:
- Pending: Anfangszustand, Operation nicht abgeschlossen
- Fulfilled: Operation erfolgreich abgeschlossen
- Rejected: Operation fehlgeschlagen
Beispiel:
Vorteile gegenüber Callbacks:
- Vermeidet Callback-Hölle
- Verkettbar mit
.then() - Bessere Fehlerbehandlung mit
.catch() - Kann Promise.all() für parallele Operationen verwenden
Seltenheit: Häufig
Schwierigkeit: Mittel
25. Was ist async/await und wie verbessert es die Lesbarkeit des Codes?
Antwort: async/await ist syntaktischer Zucker, der auf Promises aufbaut und asynchronen Code eher wie synchronen Code aussehen und sich verhalten lässt.
Beispiel:
Wichtige Punkte:
async-Funktion gibt immer ein Promise zurückawaitpausiert die Ausführung, bis das Promise aufgelöst ist- Verwende
try/catchfür die Fehlerbehandlung - Macht sequentielle Operationen klarer
- Fehlerbehandlung natürlicher als
.catch()
Seltenheit: Häufig
Schwierigkeit: Mittel
26. Erkläre den Event Loop und wie JavaScript asynchrone Operationen verarbeitet
Antwort: JavaScript ist Single-Threaded, verarbeitet aber asynchrone Operationen über den Event-Loop-Mechanismus.
Komponenten:
- Call Stack: Führt synchronen Code aus (LIFO)
- Web APIs: Verarbeiten asynchrone Operationen (setTimeout, fetch, DOM-Events)
- Callback Queue (Task Queue): Enthält Callbacks von Web APIs
- Microtask Queue: Enthält Promise-Callbacks (höhere Priorität)
- Event Loop: Verschiebt Aufgaben von Warteschlangen zum Call Stack, wenn der Stack leer ist
Ausführungsreihenfolge:
Ausführungsreihenfolge: Call Stack → Microtask Queue → Callback Queue (Macrotasks)
Seltenheit: Häufig
Schwierigkeit: Schwer
27. Wie wählst und manipulierst du DOM-Elemente?
Antwort:
Auswahlmethoden:
Manipulation:
Seltenheit: Häufig
Schwierigkeit: Leicht
28. Erkläre Event Delegation und warum sie nützlich ist
Antwort: Event Delegation ist das Anhängen eines einzelnen Event-Listeners an ein Elternelement anstelle von mehreren Listenern an Kindelemente, wodurch Event Bubbling genutzt wird.
Ohne Delegation (ineffizient):
Mit Delegation (effizient):
Vorteile:
- Bessere Performance: Einzelner Listener vs. viele
- Funktioniert mit dynamischen Elementen: Verarbeitet automatisch später hinzugefügte Elemente
- Geringere Speichernutzung: Weniger Event-Listener
- Sauberer Code: Zentralisierte Event-Verarbeitung
Anwendungsfall: Listen, in denen Elemente dynamisch hinzugefügt/entfernt werden können (To-Do-Listen, Warenkörbe, Kommentarbereiche)
Seltenheit: Häufig
Schwierigkeit: Mittel
29. Was ist Event Bubbling? Wie stoppst du die Propagation?
Antwort: Event Bubbling liegt vor, wenn ein Event, das auf einem Kindelement ausgelöst wird, durch seine Vorfahren bis zum Dokumentstamm "aufsteigt" (bubbles up).
Drei Phasen:
- Capturing Phase: Event wandert vom Fenster zum Ziel
- Target Phase: Event erreicht das Zielelement
- Bubbling Phase: Event steigt vom Ziel zum Fenster auf (Standard)
Beispiel:
Propagation stoppen:
Seltenheit: Häufig
Schwierigkeit: Mittel
30. Erkläre Destructuring für Objekte und Arrays
Antwort: Destructuring extrahiert Werte aus Arrays oder Eigenschaften aus Objekten in unterschiedliche Variablen.
Array Destructuring:
Objekt Destructuring:
**


