6. Responsive Web Design

6.1. Stopniowe ulepszanie strony

Koncepcja stopniowego ulepszania strony (ang. Progressive Enhancement) dotyczy projektowania i tworzenia stron internetowych w sposób, który zapewnia ich podstawową funkcjonalność i dostępność dla wszystkich użytkowników, niezależnie od wykorzystywanego urządzenia czy przeglądarki, z jednoczesnym rozbudowywaniem interfejsu użytkownika i udostępnianiem bardziej zaawansowanych funkcji dla nowoczesnych przeglądarek i urządzeń.

Stopniowe ulepszanie często jest praktykowane w połączeniu z Responsive Web Design (RWD). Okazuje się, że zdecydowanie łatwiej jest zapewnić responsywność interfejsu użytkownika przy takim sposobie myślenia i projektowania UI, niż przy podejściu odwrotnym, czyli takim, w którym  najpierw projektuje się interfejs zawierający wszystkie funkcjonalności a następnie próbuje się go upraszczać w celu dostosowania do możliwości prostszych urządzeń.

Praktyczny przykład budowy fragmentu prostego interfejsu aplikacji zgodnie z koncepcją stopniowego ulepszania

1. Stwórz solidny fundament w języku HTML

Treść strony i jej struktura powinny być dostępne i funkcjonalne w podstawowej przeglądarce obsługującej tylko HTML.
<nav>
    <ul>
        <li><a href="#home">Strona główna</a></li>
        <li><a href="#about">O nas</a></li>
        <li><a href="#contact">Kontakt</a></li>
    </ul>
</nav>
Nawet bez CSS i JavaScript menu nawigacyjne jest dostępne i funkcjonalne.
2. Dodaj stylizację za pomocą CSS
Stosuj CSS, aby poprawić wygląd strony, jednocześnie upewniając się, że treść pozostaje czytelna nawet w przypadku przeglądarek nieobsługujących CSS lub przy wyłączonym stylowaniu.

nav ul {
    list-style: none;
    display: flex;
    gap: 10px;
}

nav ul li a {
    text-decoration: none;
    color: #007bff;
}
3. Zaimplementuj responsywność za pomocą zapytań medialnych CSS
Zapytania medialne CSS pozwalają dostosować wygląd strony do różnych rozdzielczości ekranu.

@media (max-width: 768px) {
    nav ul {
        flex-direction: column;
    }
}
Nawigacja zmieni układ z poziomego na pionowy, jeśli szerokość ekranu wynosi 768px lub mniej.
4. Dodaj interaktywność za pomocą JavaScriptu
JavaScript może być użyty do wprowadzenia dodatkowej interaktywności, np. rozwijanego menu czy animacji.
Pamiętaj, aby JavaScript był opcjonalny – strona powinna działać nawet bez niego.

document.querySelector('.menu-toggle').addEventListener('click', function() {
    document.querySelector('nav ul').classList.toggle('show');
});
5. Użyj funkcji wykrywania wsparcia technologii (Feature Detection)
Przed dodaniem zaawansowanych funkcji sprawdź, czy przeglądarka je obsługuje. Możesz użyć narzędzi takich jak Modernizr lub pisać własne sprawdzenia.

if ('IntersectionObserver' in window) {
    // Dodaj zaawansowaną funkcjonalność np. lazy loading obrazków
    console.log('IntersectionObserver jest obsługiwany');
} else {
    console.log('Brak wsparcia dla IntersectionObserver');
}
Czym jest Intersection Observer API przeczytasz tutaj.