Pytania rekrutacyjne HTML i CSS z odpowiedziami
HTML, CSS, Flexbox, Grid, Tailwind, responsywność, dostępność i wydajność stylów.
225 pytań na rozmowę rekrutacyjną z tematu HTML i CSS z odpowiedziami i wyjaśnieniami - poziomy Junior, Middle i Senior. Przykładowe pytania, testy online i zadania z kodu.
- HTML
- CSS
- Flexbox
- Grid
- Tailwind
Pytania według poziomu
Junior
Podstawowe pojęcia i składnia · 50 pytań
Middle
Praktyka, niuanse i optymalizacja · 50 pytań
Senior
Architektura, mechanizmy wewnętrzne, przypadki brzegowe · 50 pytań
Przykładowe pytania
Kilka pytań z każdego poziomu z poprawną odpowiedzią i wyjaśnieniem.
HTML i CSS · Junior
- Po co dokumenty HTML zaczynają się od
<!DOCTYPE html>?Poprawna odpowiedź: Aby włączyć tryb standardów zamiast trybu quirks
DOCTYPE nie jest ani znacznikiem, ani odnośnikiem do zasobu. Informuje przeglądarkę, że strona jest zgodna ze współczesnymi standardami, i włącza tryb standardów. Bez niego przeglądarka przechodzi w tryb quirks i emuluje błędy starych przeglądarek (np. inny model pudełkowy). Kodowanie ustawia
<meta charset="utf-8">, a nie DOCTYPE. - Który zestaw zawiera wyłącznie semantyczne elementy HTML5?
Poprawna odpowiedź:
<header>,<nav>,<main>,<article>,<footer>Elementy semantyczne opisują znaczenie treści: nagłówek, nawigację, główną treść, samodzielny artykuł, stopkę.
<div>i<span>to neutralne kontenery bez znaczenia, a<b>i<i>są prezentacyjne (wyróżnienie bez podkreślenia ważności). Semantyka pomaga czytnikom ekranu, wyszukiwarkom i czytelności kodu. - Ile widocznych elementów
<main>może mieć strona i do czego on służy?Poprawna odpowiedź: Jeden - zawiera główną, unikalną treść strony
<main>oznacza główną treść dokumentu, unikalną dla danej strony (bez nagłówka, menu i stopki). Widoczny może być tylko jeden (pozostałe wymagają atrybutuhidden). To punkt orientacyjny (landmark) dla czytników ekranu: użytkownik może od razu przeskoczyć do treści.<section>to sekcja tematyczna, a nie zamiennik<main>. - Czym domyślnie różni się
<div>od<span>?Poprawna odpowiedź:
<div>jest elementem blokowym, a<span>liniowym<div>ma domyślniedisplay: block: rozciąga się na całą szerokość rodzica i zaczyna się od nowej linii.<span>madisplay: inline: płynie w tekście i jest tak szeroki jak jego zawartość. Żaden z nich nie niesie semantyki - oba są kontenerami do grupowania i stylowania.
HTML i CSS · Middle
- Jaka jest specyficzność selektora
nav#main .item:hover > a::before?Poprawna odpowiedź: (1, 2, 3) - identyfikator, klasa + pseudoklasa, dwa typy + pseudoelement
Liczymy kolumnami: identyfikatory -
#main(1); klasy, atrybuty i pseudoklasy -.itemi:hover(2); typy i pseudoelementy -nav,a,::before(3). Kombinatory (>, spacja) nie dodają specyficzności. Pseudoklasa waży jak klasa, a pseudoelement jak selektor typu. - Jak nadpisać regułę z
!importantz zewnętrznej biblioteki, nie ruszając jej kodu?Poprawna odpowiedź: Napisać własną regułę także z
!importanti bardziej specyficznym selektoremZwykła reguła nigdy nie wygra z
!important, niezależnie od specyficzności. Między kilkoma deklaracjami!importantznowu działają specyficzność i kolejność. Inne opcje: styl inline z!importantalbo warstwy kaskadowe - dla!importantkolejność warstw jest odwrócona. Najlepiej po prostu unikać!importantwe własnym kodzie. - Do czego rozwija się skrót
flex: 1?Poprawna odpowiedź:
flex-grow: 1; flex-shrink: 1; flex-basis: 0%flex: 1=1 1 0%: rozmiar bazowy jest zerowy, więc całe miejsce dzieli się ściśle proporcjonalnie doflex-grow- kolumny są równe niezależnie od treści.flex: auto=1 1 auto- dzielona jest tylko wolna przestrzeń ponad rozmiar treści.flex: none=0 0 auto. - Czym
flex-basisróżni się odwidthna elemencie flex w wierszu (flex-direction: row)?Poprawna odpowiedź:
flex-basisto początkowy rozmiar na osi głównej; jeśli nie jestauto, ma pierwszeństwo przedwidthflex-basisustala początkowy rozmiar elementu wzdłuż osi głównej, od którego liczy sięgrowishrink. Przyflex-basis: autoużywane jestwidth(lubheightw kolumnie). Przyflex-direction: columnflex-basisdotyczy wysokości, a nie szerokości - to kluczowa różnica wobecwidth.
HTML i CSS · Senior
- Jak warstwy kaskadowe
@layerwpływają na priorytet stylów?Poprawna odpowiedź: Kolejność warstw wygrywa ze specyficznością: wygrywa późniejsza warstwa
Kaskada najpierw porównuje warstwy, a dopiero potem specyficzność w obrębie warstwy. Dlatego
.btnw warstwiecomponentswygrywa z#app .btnwe wcześniejszej warstwiebase. Style poza warstwami są silniejsze od każdej warstwy. Dla!importantkolejność jest odwrócona: ważne deklaracje we wcześniejszej warstwie wygrywają. Tailwind v4 buduje swoje style na warstwachtheme,base,componentsiutilities. - Jak zwykłe (bez
!important) style w warstwach i poza warstwami mają się do siebie?Poprawna odpowiedź: Style poza warstwami są silniejsze od każdej warstwy
Style poza warstwami niejawnie trafiają do „ostatniej” warstwy i wygrywają ze wszystkimi nazwanymi warstwami. Dzięki temu można opakować zewnętrzny CSS w
@layer vendori łatwo nadpisać go własnymi stylami. Z!importantlogika się odwraca: ważne style w warstwach wygrywają z ważnymi stylami poza warstwami. - Co robi
@scope (.card) to (.card__content) { img { ... } }?Poprawna odpowiedź: Styluje
imgwewnątrz.card, ale nie wewnątrz.card__content@scopedefiniuje korzeń zakresu i opcjonalną „dolną granicę” (donut scope): style działają wewnątrz.card, ale nie sięgają do.card__contenti jego potomków. Dodatkowo przy równej specyficzności wygrywa reguła z bliższym korzeniem (scoping proximity).@scopenie tworzy Shadow DOM. - Jaki problem rozwiązuje
subgrid?Poprawna odpowiedź: Daje zagnieżdżonej siatce ścieżki rodzica, wyrównując części między kartami
Z
grid-template-rows: subgridsiatka potomna dziedziczy linie rodzica. Klasyczny przykład to rząd kart, których tytuły, teksty i przyciski mają być wyrównane, nawet gdy tytuł jednej karty zawija się do dwóch linii. Bez subgrid każda karta wyrównuje się niezależnie.
Testy łączone z tym tematem
Pytania z kilku tematów naraz - jak na rozmowie rekrutacyjnej na konkretne stanowisko.
Zadania z kodu
Napisz rozwiązanie prosto w przeglądarce, a testy od razu je sprawdzą. Klasyka rozmów rekrutacyjnych: debounce, throttle, deepClone, Promise.all, EventEmitter, cache LRU i inne.
Otwórz zadania →