Tailwind CSS: Jak Tworzyć UI szybciej za pomocą AI
Zapomnij o skakaniu między plikami HTML i CSS. Poznaj Tailwind CSS – framework, który zrewolucjonizował frontend i stał się standardem w erze AI. Naucz się budować responsywne layouty bez wychodzenia z HTML-a.

Witajcie! 👋
Po ostatnich zajęciach znacie już HTML i potraficie pisać własny CSS. Prawdopodobnie zauważyliście jednak pewien problem...
Ciągłe przełączanie się między plikiem index.html a style.css, wymyślanie nazw klas (.wrapper-inner-container-left 🤯) i walka z kaskadowością potrafią być męczące.
Dziś poznacie narzędzie, które rozwiązuje te problemy i jest obecnie standardem rynkowym. Co więcej – jest to ulubiony framework sztucznej inteligencji. Jeśli chcecie efektywnie generować kod z Claude czy GitHub Copilot, musicie znać Tailwind CSS.
Zaczynamy przyspieszenie! 🚀
Czym jest Tailwind CSS? (Utility-First)
Tailwind to framework CSS typu Utility-First.
W przeciwieństwie do Bootstrapa, który daje nam gotowe komponenty (np. gotowy przycisk .btn), Tailwind daje nam "klocki lego" – małe klasy, które robią jedną, konkretną rzecz.
Zamiast pisać w CSS:
/* Tradycyjny CSS */
.chat-notification {
display: flex;
max-width: 24rem;
margin: 0 auto;
padding: 1.5rem;
border-radius: 0.75rem;
background-color: white;
box-shadow: 0 10px 15px -3px rgba(0, 0, 0, 0.1);
}
Piszemy w HTML:
<div class="mx-auto flex max-w-sm rounded-xl bg-white p-6 shadow-lg">...</div>
Brzmi jak bałagan w HTML? Na początku tak. Ale po godzinie pracy zrozumiecie, że nie musisz wymyślać nazw klas i nie musisz skakać po plikach. Widzisz strukturę i styl w jednym miejscu.
Dlaczego Tailwind + AI to "Połączenie Doskonałe"? 🤖
W artykule o Promptowaniu wspominałem, że AI zmienia zasady gry. Tailwind jest tego najlepszym przykładem.
Dlaczego modele AI (Claude, GPT, Gemini) piszą lepszy kod w Tailwindzie niż w czystym CSS?
- Kontekst jest w jednym miejscu: Model AI widzi strukturę (HTML) i wygląd (klasy) w jednej linijce. Nie musi "domyślać się", co jest w pliku CSS.
- Mniej halucynacji: Tailwind ma skończoną liczbę klas. AI rzadziej wymyśla nieistniejące właściwości.
- Tokenizacja: Klasy Tailwinda są krótkie (
p-4,flex), co jest "tańsze" i szybsze dla modelu do wygenerowania.
💡 Wniosek: Jeśli prosisz AI o wygenerowanie landing page'a, dodaj w prompcie: " Użyj Tailwind w stylowaniu / zaimportuj go CDN / stwórz landing w jednym pliku HTML". Wynik będzie o niebo lepszy.
Instalacja (Wersja Edukacyjna)
W profesjonalnych projektach (React, Next.js) Tailwinda instaluje się przez terminal. Na potrzeby nauki i prototypowania użyjemy metody CDN.
Wklej ten skrypt do sekcji <head> swojego pliku HTML:
<script src="https://cdn.tailwindcss.com"></script>
I to wszystko. Możesz już używać klas Tailwinda!
⚠️ Uwaga: Ta metoda służy tylko do nauki i testów. Nie używaj jej na "prawdziwej" produkcji, bo jest wolniejsza niż skompilowany CSS.
Podstawowe Klasy, które Musisz Znać
Tailwind ma tysiące klas, ale 80% czasu będziesz używać tych samych kilkunastu. Oto Twój niezbędnik:
1. Odstępy (Spacing) i Rozmiary
Tailwind używa skali. 1 to zazwyczaj 0.25rem (4px).
m-4= margin: 1rem (16px)p-2= padding: 0.5rem (8px)w-full= width: 100%h-screen= height: 100vh (wysokość całego ekranu)
2. Kolory i Tekst
bg-blue-500- Tło niebieskie (odcień 500)text-white- Biały teksttext-xl- Większa czcionkafont-bold- Pogrubienie
3. Flexbox (Layout)
Pamiętasz CSS Flexbox? W Tailwindzie to bajecznie proste:
<div class="flex h-screen items-center justify-center bg-gray-100">
<div class="p-10 bg-white shadow-lg">Jestem na środku!</div>
</div>
flex- włącza Flexboxjustify-center- wyrównanie w poziomie (oś główna)items-center- wyrównanie w pionie (oś poprzeczna)gap-4- odstęp między elementami
Responsywność: Mobile First 📱
Tailwind ma wbudowane "przedrostki" dla różnych rozmiarów ekranu. Działają one na zasadzie: "Zastosuj ten styl OD tego rozmiaru w górę".
| Przedrostek | Rozmiar Ekranu |
|---|---|
| (brak) | Domyślny (Telefon) |
md: | Tablet (min-width: 768px) |
lg: | Laptop (min-width: 1024px) |
Przykład:
Chcemy siatkę, która na telefonie jest jedną kolumną, a na komputerze trzema.
<div class="grid grid-cols-1 md:grid-cols-3 gap-4">
<div class="bg-red-200 p-4">Kolumna 1</div>
<div class="bg-green-200 p-4">Kolumna 2</div>
<div class="bg-blue-200 p-4">Kolumna 3</div>
</div>
Czytaj to tak: "Domyślnie zrób 1 kolumnę. Ale (md:) na średnich i większych ekranach zmień na 3 kolumny."
Stany: Hover, Focus, Active
Interakcja z użytkownikiem jest kluczowa. W Tailwindzie dodajemy przedrostek hover: i gotowe.
<button
class="bg-blue-500 text-white px-4 py-2 rounded
hover:bg-blue-700 transition duration-300"
>
Najedź na mnie
</button>
Dodałem też transition i duration-300, żeby zmiana koloru była płynna. Proste, prawda?
Dobre Praktyki (Nie zrób bałaganu w HTML)
Częstym zarzutem wobec Tailwinda jest to, że HTML staje się nieczytelny od nadmiaru klas.
Oto jak sobie z tym radzić:
- Formatowanie: Używaj wtyczki "Tailwind CSS IntelliSense" w VS Code. Podpowiada klasy i pokazuje kolory.
- Prettier: Zainstaluj plugin
prettier-plugin-tailwindcss. Automatycznie posortuje Twoje klasy w logicznej kolejności przy zapisywaniu pliku. - Nie nadużywaj @apply: Wiele osób próbuje używać Tailwinda jak starego CSS, tworząc klasy
.btn { @apply bg-blue-500 ... }. Unikaj tego, chyba że wiesz, co robisz. Siłą Tailwinda jest HTML.
Zadania Praktyczne 🛠️
Zadanie 1: Karta Produktu (Refaktoryzacja)
Weź "czysty" HTML i stwórz kartę produktu, która zawiera:
- Obrazek na górze (zaokrąglone rogi).
- Tytuł (
text-xl,font-bold). - Cenę (kolor wyróżniający, np.
text-green-600). - Przycisk "Kup teraz" z efektem hover.
- Dodaj cień do całej karty (
shadow-lg).
Zadanie 2: Responsywne Menu
Stwórz navbar, który:
- Na telefonie wyświetla linki jeden pod drugim (pionowo).
- Na desktopie (
md:) wyświetla linki obok siebie (poziomo) i przesuwa je na prawą stronę (justify-end).
Zadanie 3: Wyzwanie AI (Prompting)
Wróć do lekcji o generowaniu stron przez AI.
Użyj ChatGPT lub Claude i wpisz prompt:
"Stwórz sekcję Hero dla strony Uniwersytetu Civitas (lub innej dowolnej firmy) używając Tailwind CSS. Sekcja ma mieć zdjęcie w tle, ciemną nakładkę (overlay), biały wyśrodkowany tekst i dwa przyciski (lub inny design). Kod ma być gotowy do wklejenia do pliku HTML z CDN."
Przeanalizuj kod, który dostałeś. Zobacz, jakich klas użyło AI.
Podsumowanie
Tailwind CSS to nie tylko "kolejny framework". To zmiana sposobu myślenia o budowaniu interfejsów.
✅ Szybkość: Nie tracisz czasu na wymyślanie nazw klas.
✅ Spójność: Korzystasz ze zdefiniowanego systemu (kolory, odstępy).
✅ AI-Ready: To najlepszy język do komunikacji z generatorami kodu.
Bonus: Kompletna Strona Landing Page 🎁
Czas na coś konkretnego. Poniżej znajdziesz produkcyjny kod pełnej strony landing page z Tailwindem.
To nie jest "tutorial code" – to struktura, którą stosuję w prawdziwych projektach wygenerowana przez AI! Semantyczny HTML5, accessibility, responsywność mobile-first, i czyste separacje sekcji.
Skopiuj, wklej do pliku HTML, otwórz w przeglądarce i zobacz Tailwinda w akcji.
<!DOCTYPE html>
<html lang="pl" class="scroll-smooth">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>Twoja Firma - Profesjonalne Rozwiązania</title>
<script src="https://cdn.tailwindcss.com"></script>
</head>
<body class="font-sans antialiased text-gray-900">
<!-- Hero Section -->
<header
class="relative h-screen flex items-center justify-center bg-gradient-to-br from-blue-600 to-purple-700 text-white"
>
<div class="absolute inset-0 bg-black/40"></div>
<div class="relative z-10 max-w-4xl mx-auto px-6 text-center">
<h1 class="text-4xl md:text-6xl font-bold mb-6 leading-tight">
Tworzymy Rozwiązania, Które
<span class="text-yellow-300">Działają</span>
</h1>
<p class="text-lg md:text-xl mb-8 text-gray-100 max-w-2xl mx-auto">
Specjalizujemy się w tworzeniu nowoczesnych aplikacji webowych, które
pomagają firmom rozwijać się w erze cyfrowej.
</p>
<div class="flex flex-col sm:flex-row gap-4 justify-center">
<a
href="#contact"
class="px-8 py-4 bg-yellow-400 text-gray-900 font-semibold rounded-lg
hover:bg-yellow-300 transition-all duration-300 shadow-lg hover:shadow-xl"
>
Rozpocznij Projekt
</a>
<a
href="#about"
class="px-8 py-4 bg-white/10 backdrop-blur-sm border-2 border-white
hover:bg-white/20 transition-all duration-300 rounded-lg"
>
Dowiedz Się Więcej
</a>
</div>
</div>
</header>
<!-- About Section -->
<section id="about" class="py-20 bg-white">
<div class="max-w-6xl mx-auto px-6">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Kim Jesteśmy?</h2>
<div class="w-20 h-1 bg-blue-600 mx-auto"></div>
</div>
<div class="grid md:grid-cols-2 gap-12 items-center">
<div>
<h3 class="text-2xl font-bold mb-4 text-gray-800">
Ponad 20 Lat Doświadczenia w Branży
</h3>
<p class="text-gray-600 leading-relaxed mb-4">
Od dwóch dekad pomagamy firmom w transformacji cyfrowej. Nasze
rozwiązania łączą nowoczesne technologie z głębokim zrozumieniem
potrzeb biznesowych.
</p>
<p class="text-gray-600 leading-relaxed">
Pracowaliśmy z startupami, średnimi przedsiębiorstwami i
korporacjami, dostarczając rozwiązania od MVP po skalowalne
platformy enterprise.
</p>
</div>
<div
class="bg-gradient-to-br from-blue-50 to-purple-50 p-8 rounded-2xl"
>
<ul class="space-y-4">
<li class="flex items-start gap-3">
<svg
class="w-6 h-6 text-green-500 flex-shrink-0 mt-1"
fill="currentColor"
viewBox="0 0 20 20"
>
<path
fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd"
/>
</svg>
<div>
<strong class="text-gray-900">500+ Projektów</strong>
<p class="text-gray-600 text-sm">Zrealizowanych z sukcesem</p>
</div>
</li>
<li class="flex items-start gap-3">
<svg
class="w-6 h-6 text-green-500 flex-shrink-0 mt-1"
fill="currentColor"
viewBox="0 0 20 20"
>
<path
fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd"
/>
</svg>
<div>
<strong class="text-gray-900">99.9% Uptime</strong>
<p class="text-gray-600 text-sm">Gwarancja dostępności</p>
</div>
</li>
<li class="flex items-start gap-3">
<svg
class="w-6 h-6 text-green-500 flex-shrink-0 mt-1"
fill="currentColor"
viewBox="0 0 20 20"
>
<path
fill-rule="evenodd"
d="M10 18a8 8 0 100-16 8 8 0 000 16zm3.707-9.293a1 1 0 00-1.414-1.414L9 10.586 7.707 9.293a1 1 0 00-1.414 1.414l2 2a1 1 0 001.414 0l4-4z"
clip-rule="evenodd"
/>
</svg>
<div>
<strong class="text-gray-900">24/7 Support</strong>
<p class="text-gray-600 text-sm">
Zawsze do Twojej dyspozycji
</p>
</div>
</li>
</ul>
</div>
</div>
</div>
</section>
<!-- Services Cards -->
<section class="py-20 bg-gray-50">
<div class="max-w-6xl mx-auto px-6">
<div class="text-center mb-16">
<h2 class="text-3xl md:text-4xl font-bold mb-4">Nasze Usługi</h2>
<p class="text-gray-600 max-w-2xl mx-auto">
Kompleksowe rozwiązania dostosowane do Twoich potrzeb biznesowych
</p>
</div>
<div class="grid md:grid-cols-3 gap-8">
<!-- Card 1 -->
<article
class="bg-white p-8 rounded-xl shadow-md hover:shadow-2xl transition-shadow duration-300 group"
>
<div
class="w-14 h-14 bg-blue-100 rounded-lg flex items-center justify-center mb-6 group-hover:bg-blue-600 transition-colors duration-300"
>
<svg
class="w-7 h-7 text-blue-600 group-hover:text-white transition-colors duration-300"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M9.75 17L9 20l-1 1h8l-1-1-.75-3M3 13h18M5 17h14a2 2 0 002-2V5a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
/>
</svg>
</div>
<h3 class="text-xl font-bold mb-3">Aplikacje Webowe</h3>
<p class="text-gray-600 leading-relaxed">
Tworzymy szybkie, responsywne aplikacje wykorzystując React,
Next.js i nowoczesne technologie.
</p>
</article>
<!-- Card 2 -->
<article
class="bg-white p-8 rounded-xl shadow-md hover:shadow-2xl transition-shadow duration-300 group"
>
<div
class="w-14 h-14 bg-purple-100 rounded-lg flex items-center justify-center mb-6 group-hover:bg-purple-600 transition-colors duration-300"
>
<svg
class="w-7 h-7 text-purple-600 group-hover:text-white transition-colors duration-300"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M12 18h.01M8 21h8a2 2 0 002-2V5a2 2 0 00-2-2H8a2 2 0 00-2 2v14a2 2 0 002 2z"
/>
</svg>
</div>
<h3 class="text-xl font-bold mb-3">Mobile-First Design</h3>
<p class="text-gray-600 leading-relaxed">
Projektujemy interfejsy, które wyglądają perfekcyjnie na każdym
urządzeniu – od smartfona po desktop.
</p>
</article>
<!-- Card 3 -->
<article
class="bg-white p-8 rounded-xl shadow-md hover:shadow-2xl transition-shadow duration-300 group"
>
<div
class="w-14 h-14 bg-green-100 rounded-lg flex items-center justify-center mb-6 group-hover:bg-green-600 transition-colors duration-300"
>
<svg
class="w-7 h-7 text-green-600 group-hover:text-white transition-colors duration-300"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M13 10V3L4 14h7v7l9-11h-7z"
/>
</svg>
</div>
<h3 class="text-xl font-bold mb-3">Optymalizacja SEO</h3>
<p class="text-gray-600 leading-relaxed">
Dbamy o widoczność w wyszukiwarkach – struktura, meta tagi,
performance i Core Web Vitals.
</p>
</article>
</div>
</div>
</section>
<!-- Contact Form -->
<section id="contact" class="py-20 bg-white">
<div class="max-w-4xl mx-auto px-6">
<div class="text-center mb-12">
<h2 class="text-3xl md:text-4xl font-bold mb-4">
Skontaktuj Się z Nami
</h2>
<p class="text-gray-600">
Opisz swój projekt – odpowiemy w ciągu 24 godzin
</p>
</div>
<form
class="bg-gray-50 p-8 md:p-12 rounded-2xl shadow-lg"
method="POST"
action="#"
>
<div class="grid md:grid-cols-2 gap-6 mb-6">
<div>
<label
for="name"
class="block text-sm font-medium text-gray-700 mb-2"
>
Imię i Nazwisko <span class="text-red-500">*</span>
</label>
<input
type="text"
id="name"
name="name"
required
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200"
placeholder="Jan Kowalski"
/>
</div>
<div>
<label
for="email"
class="block text-sm font-medium text-gray-700 mb-2"
>
Email <span class="text-red-500">*</span>
</label>
<input
type="email"
id="email"
name="email"
required
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200"
placeholder="jan@przykład.pl"
/>
</div>
</div>
<div class="mb-6">
<label
for="message"
class="block text-sm font-medium text-gray-700 mb-2"
>
Wiadomość <span class="text-red-500">*</span>
</label>
<textarea
id="message"
name="message"
rows="6"
required
class="w-full px-4 py-3 border border-gray-300 rounded-lg focus:ring-2 focus:ring-blue-500 focus:border-transparent transition-all duration-200 resize-none"
placeholder="Opisz swój projekt, wymagania i oczekiwania..."
></textarea>
</div>
<button
type="submit"
class="w-full md:w-auto px-8 py-4 bg-blue-600 text-white font-semibold rounded-lg hover:bg-blue-700 focus:ring-4 focus:ring-blue-300 transition-all duration-300 shadow-lg hover:shadow-xl"
>
Wyślij Wiadomość
</button>
</form>
</div>
</section>
<!-- Footer -->
<footer class="bg-gray-900 text-gray-300 py-12">
<div class="max-w-6xl mx-auto px-6">
<div class="grid md:grid-cols-3 gap-8 mb-8">
<!-- Company Info -->
<div>
<h3 class="text-white text-lg font-bold mb-4">Twoja Firma</h3>
<p class="text-sm leading-relaxed mb-4">
Tworzymy nowoczesne rozwiązania webowe, które pomagają firmom
osiągać cele biznesowe.
</p>
<div class="flex gap-4">
<a
href="#"
class="hover:text-white transition-colors duration-200"
aria-label="Facebook"
>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
<path
d="M24 12.073c0-6.627-5.373-12-12-12s-12 5.373-12 12c0 5.99 4.388 10.954 10.125 11.854v-8.385H7.078v-3.47h3.047V9.43c0-3.007 1.792-4.669 4.533-4.669 1.312 0 2.686.235 2.686.235v2.953H15.83c-1.491 0-1.956.925-1.956 1.874v2.25h3.328l-.532 3.47h-2.796v8.385C19.612 23.027 24 18.062 24 12.073z"
/>
</svg>
</a>
<a
href="#"
class="hover:text-white transition-colors duration-200"
aria-label="Twitter"
>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
<path
d="M23.953 4.57a10 10 0 01-2.825.775 4.958 4.958 0 002.163-2.723c-.951.555-2.005.959-3.127 1.184a4.92 4.92 0 00-8.384 4.482C7.69 8.095 4.067 6.13 1.64 3.162a4.822 4.822 0 00-.666 2.475c0 1.71.87 3.213 2.188 4.096a4.904 4.904 0 01-2.228-.616v.06a4.923 4.923 0 003.946 4.827 4.996 4.996 0 01-2.212.085 4.936 4.936 0 004.604 3.417 9.867 9.867 0 01-6.102 2.105c-.39 0-.779-.023-1.17-.067a13.995 13.995 0 007.557 2.209c9.053 0 13.998-7.496 13.998-13.985 0-.21 0-.42-.015-.63A9.935 9.935 0 0024 4.59z"
/>
</svg>
</a>
<a
href="#"
class="hover:text-white transition-colors duration-200"
aria-label="LinkedIn"
>
<svg class="w-6 h-6" fill="currentColor" viewBox="0 0 24 24">
<path
d="M20.447 20.452h-3.554v-5.569c0-1.328-.027-3.037-1.852-3.037-1.853 0-2.136 1.445-2.136 2.939v5.667H9.351V9h3.414v1.561h.046c.477-.9 1.637-1.85 3.37-1.85 3.601 0 4.267 2.37 4.267 5.455v6.286zM5.337 7.433c-1.144 0-2.063-.926-2.063-2.065 0-1.138.92-2.063 2.063-2.063 1.14 0 2.064.925 2.064 2.063 0 1.139-.925 2.065-2.064 2.065zm1.782 13.019H3.555V9h3.564v11.452zM22.225 0H1.771C.792 0 0 .774 0 1.729v20.542C0 23.227.792 24 1.771 24h20.451C23.2 24 24 23.227 24 22.271V1.729C24 .774 23.2 0 22.222 0h.003z"
/>
</svg>
</a>
</div>
</div>
<!-- Quick Links -->
<div>
<h3 class="text-white text-lg font-bold mb-4">Szybkie Linki</h3>
<ul class="space-y-2 text-sm">
<li>
<a
href="#about"
class="hover:text-white transition-colors duration-200"
>O Nas</a
>
</li>
<li>
<a
href="#services"
class="hover:text-white transition-colors duration-200"
>Usługi</a
>
</li>
<li>
<a
href="#portfolio"
class="hover:text-white transition-colors duration-200"
>Portfolio</a
>
</li>
<li>
<a
href="#contact"
class="hover:text-white transition-colors duration-200"
>Kontakt</a
>
</li>
</ul>
</div>
<!-- Contact Info -->
<div>
<h3 class="text-white text-lg font-bold mb-4">Kontakt</h3>
<ul class="space-y-2 text-sm">
<li class="flex items-start gap-2">
<svg
class="w-5 h-5 flex-shrink-0 mt-0.5"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M3 8l7.89 5.26a2 2 0 002.22 0L21 8M5 19h14a2 2 0 002-2V7a2 2 0 00-2-2H5a2 2 0 00-2 2v10a2 2 0 002 2z"
/>
</svg>
<a
href="mailto:kontakt@twojafirma.pl"
class="hover:text-white transition-colors duration-200"
>
kontakt@twojafirma.pl
</a>
</li>
<li class="flex items-start gap-2">
<svg
class="w-5 h-5 flex-shrink-0 mt-0.5"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M3 5a2 2 0 012-2h3.28a1 1 0 01.948.684l1.498 4.493a1 1 0 01-.502 1.21l-2.257 1.13a11.042 11.042 0 005.516 5.516l1.13-2.257a1 1 0 011.21-.502l4.493 1.498a1 1 0 01.684.949V19a2 2 0 01-2 2h-1C9.716 21 3 14.284 3 6V5z"
/>
</svg>
<a
href="tel:+48123456789"
class="hover:text-white transition-colors duration-200"
>
+48 123 456 789
</a>
</li>
<li class="flex items-start gap-2">
<svg
class="w-5 h-5 flex-shrink-0 mt-0.5"
fill="none"
stroke="currentColor"
viewBox="0 0 24 24"
>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M17.657 16.657L13.414 20.9a1.998 1.998 0 01-2.827 0l-4.244-4.243a8 8 0 1111.314 0z"
/>
<path
stroke-linecap="round"
stroke-linejoin="round"
stroke-width="2"
d="M15 11a3 3 0 11-6 0 3 3 0 016 0z"
/>
</svg>
<span>Warszawa, Polska</span>
</li>
</ul>
</div>
</div>
<div class="border-t border-gray-800 pt-8 text-center text-sm">
<p>© 2025 Twoja Firma. Wszelkie prawa zastrzeżone.</p>
</div>
</div>
</footer>
</body>
</html>
Co warto zauważyć w tym kodzie? 🔍
Semantyczny HTML:
<header>,<section>,<article>,<footer>– struktura zrozumiała dla botów i screen readerów- Atrybuty
aria-labeldla ikon społecznościowych - Prawidłowa hierarchia nagłówków (h1→h2→h3)
Accessibility:
- Focus states (
focus:ring-4) - Wystarczający kontrast kolorów
- Oznaczenia wymaganych pól (
*) - Alternatywne teksty dla ikon
Mobile-First Responsywność:
- Breakpoint
md:używany świadomie - Grid automatycznie przechodzi z 1 do 3 kolumn
- Stack pionowy → poziomy dla przycisków
Performance:
scroll-smoothdla płynnego scrollowania- Transitions tylko tam, gdzie potrzeba
- Brak zewnętrznych fontów (system fonts = 0 KB dodatkowego ładowania)
Realne Praktyki:
grouphover dla kart (efekt dla ikony + tła jednocześnie)backdrop-blurdla przycisku ghost- Wydzielone komponenty (każda karta to
<article>)
Co dalej?
Masz już potężny arsenał: HTML, CSS, AI i Tailwind. W następnej kolejności połączymy to wszystko, aby opublikować Twój pierwszy poważny projekt w sieci!
Masz problem z layoutem? Grid Ci się rozjeżdża? Napisz do mnie: m@zeprzalka.com lub wklej swój kod do ChatGPT z dopiskiem "Fix styling using Tailwind" spróbuj pokombinować, najlepsza nauka to praktyka. 😉
Powodzenia! 🎨