Poprawnie – zapis #stopka w CSS oznacza selektor identyfikatora (ID), więc w HTML musimy użyć atrybutu id="stopka" dokładnie z tą samą nazwą. W CSS znak # wskazuje, że styl jest przypisany do elementu o konkretnym identyfikatorze, a nie do klasy czy czegokolwiek innego. Dlatego jedynym prawidłowym sposobem podpięcia tego stylu do bloku div jest konstrukcja: <div id="stopka">…</div>. W praktyce wygląda to tak: CSS: #stopka { background-color: #333; color: white; padding: 20px; } HTML: <div id="stopka">To jest stopka strony</div> Przeglądarka łączy selektor #stopka z elementem, który ma id="stopka" i nakłada na niego zdefiniowane właściwości. Identyfikator powinien być unikalny w obrębie całego dokumentu HTML, co jest zgodne z zaleceniami W3C i ogólnie przyjętą dobrą praktyką. Do jednego ID odwołujemy się w CSS przez #, a w JavaScript przez document.getElementById("stopka"). Moim zdaniem warto zapamiętać prostą zasadę: # w CSS = id w HTML, kropka (.) w CSS = class w HTML. Gdy projektujesz layout strony, zwykle elementy typu nagłówek, stopka, główna nawigacja mają unikalne ID, bo występują raz na stronie. Natomiast powtarzalne elementy (np. kafelki z produktami) dostają klasy. Dzięki temu kod jest czytelniejszy, łatwiej się go utrzymuje i unikamy dziwnych konfliktów stylów. Dobrą praktyką jest też używanie opisowych nazw, np. id="stopka" zamiast skrótów typu id="s1", bo po miesiącu nikt nie pamięta, co to znaczyło.
Klucz do zrozumienia tego zadania leży w poprawnym skojarzeniu składni CSS z odpowiednimi atrybutami w HTML. Selektor #stopka oznacza, że styl jest przypisany do elementu o identyfikatorze stopka, a nie do klasy, tytułu czy jakiegoś „anonimowego” znacznika. Zgodnie ze specyfikacją CSS, znak # zawsze odnosi się do atrybutu id w HTML, podczas gdy kropka (.) jest powiązana z atrybutem class. Częsty błąd polega na myleniu klasy z identyfikatorem. Wiele osób odruchowo używa class="stopka", bo klasy są częściej stosowane przy wielokrotnym powtarzaniu stylów. Jednak dla klasy właściwy selektor w CSS miałby postać .stopka { ... }, a nie #stopka { ... }. Jeśli w HTML ustawimy class="stopka", a w CSS zostawimy #stopka, przeglądarka w ogóle nie skojarzy tych dwóch rzeczy – styl po prostu nie zostanie zastosowany. To typowy przykład rozjazdu między nazwą selektora a atrybutem w znaczniku. Inny błędny trop to pomijanie nazwy atrybutu i pisanie czegoś w rodzaju <div "stopka">. Taki zapis nie jest poprawnym HTML-em, bo każdy atrybut musi mieć nazwę (id, class, title itd.) i wartość w cudzysłowie lub apostrofach. Przeglądarka albo to zignoruje, albo potraktuje jako uszkodzony kod, co utrudnia debugowanie i walidację. Zdarza się też, że ktoś próbuje użyć atrybutu title="stopka", licząc, że skoro napis jest ten sam, to CSS go „złapie”. Atrybut title służy jednak do opisu elementu (np. podpowiedź po najechaniu myszką), nie do wiązania stylów. Można co prawda w CSS pisać selektory atrybutów, np. [title="stopka"], ale to jest zupełnie inny mechanizm niż klasy i identyfikatory i na pewno nie zadziała z selektorem #stopka. Z mojego doświadczenia wynika, że dobra praktyka to konsekwencja: jeśli w CSS widzisz #nazwa, to w HTML szukaj id="nazwa". Jeśli widzisz .nazwa, to używaj class="nazwa". Mieszanie tych podejść, używanie losowych atrybutów albo pomijanie nazw atrybutów prowadzi do stylów, które „magicznie” nie działają, mimo że na pierwszy rzut oka wszystko wygląda podobnie. Dlatego warto zawsze mentalnie łączyć: # → id, . → class, a pozostałe atrybuty traktować jako dodatkowe, a nie stylujące.