← Back to course

Tła, Obramowania i Cienie

Tła, Obramowania i Cienie

Witaj ponownie.

W poprzedniej lekcji nauczyłeś się responsive design.

Twój layout rozumie już telefony.

Bardzo dobrze.

Dzisiaj sprawimy, że wszystko będzie wyglądało bardziej dopracowanie.

Nie przesadnie ozdobione.

Nie w stylu: “odkryłem 47 efektów i użyłem wszystkich przed śniadaniem.”

Dopracowane.

Będziemy pracować z:

To małe detale, które sprawiają, że strona wygląda na skończoną.

Bez nich website może działać idealnie, ale nadal wyglądać tak, jakby był projektowany podczas awarii prądu.

Czego Się Nauczysz

W tej lekcji nauczysz się:

Dlaczego Visual Polish Ma Znaczenie

CSS nie dotyczy tylko layoutu.

Layout decyduje, gdzie rzeczy się znajdują.

Visual polish decyduje, jak się czują.

Prosta card działa.

Dopracowana card wygląda celowo.

Przykład:

.card {
  background-color: white;
  border: 1px solid #e5e7eb;
  border-radius: 18px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
}

Ta prosta kombinacja może sprawić, że sekcja wygląda nowocześnie i czysto.

Ale uważaj.

Za dużo shadow i za dużo borders może sprawić, że strona będzie wyglądała jak stos unoszących się plastikowych tacek.

CSS daje moc.

Używaj jej jak dorosły.

Przynajmniej w większości przypadków.

Stwórz Projekt

Stwórz folder dla tej lekcji:

mkdir css-lesson8
cd css-lesson8
touch index.html
touch style.css

Powinieneś mieć:

css-lesson8/
  index.html
  style.css

Otwórz folder w swoim edytorze.

Zbudujemy małą stronę services z cards i hero section.

To praktyczne.

Możesz użyć tego patternu dla:

Czyli wszędzie tam, gdzie website musi przestać wyglądać jak surowy HTML w skarpetkach.

Napisz HTML

Otwórz index.html i dodaj to:

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Tła, Obramowania i Cienie</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header class="hero">
    <nav class="navbar">
      <h1 class="logo">PolishCSS</h1>

      <div class="nav-links">
        <a href="#">Home</a>
        <a href="#">Usługi</a>
        <a href="#">Projekty</a>
        <a href="#">Kontakt</a>
      </div>
    </nav>

    <section class="hero-content">
      <p class="eyebrow">CSS Visual Design</p>
      <h2>Spraw, Żeby Twój Layout Wyglądał na Skończony</h2>
      <p>
        Backgrounds, borders i shadows pomagają stronie wyglądać czyściej, bardziej strukturalnie i profesjonalnie.
      </p>
      <a href="#" class="button">Poznaj Style</a>
    </section>
  </header>

  <main class="page">
    <section class="intro-card">
      <h2>Małe Detale, Duża Różnica</h2>
      <p>
        Dobre detale wizualne prowadzą użytkownika. Oddzielają content, tworzą głębię i sprawiają, że strona jest łatwiejsza do zrozumienia.
      </p>
    </section>

    <section class="cards">
      <article class="card">
        <h2>Backgrounds</h2>
        <p>Używaj kolorów tła, obrazów i gradients, aby stworzyć atmosferę.</p>
      </article>

      <article class="card featured">
        <h2>Borders</h2>
        <p>Używaj borders, aby oddzielać content i podkreślać ważne obszary.</p>
      </article>

      <article class="card">
        <h2>Shadows</h2>
        <p>Używaj shadows ostrożnie, aby stworzyć głębię bez efektu, że wszystko zaraz odleci.</p>
      </article>
    </section>
  </main>

  <footer class="site-footer">
    <p>Stworzone podczas nauki backgrounds, borders i shadows.</p>
  </footer>
</body>
</html>

To daje nam:

Teraz możemy sprawić, że będzie wyglądało mniej jak szkielet, a bardziej jak prawdziwa web page.

Bez obrazy dla szkieletów.

One robią ważną robotę.

Zacznij od Bazowego CSS

Otwórz style.css i dodaj:

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: Arial, sans-serif;
  background-color: #f3f4f6;
  color: #111827;
}

a {
  color: inherit;
  text-decoration: none;
}

To daje nam czysty punkt startowy.

Strona ma:

Teraz możemy dodać visual polish.

Powoli.

Jak przyprawianie zupy.

Nie jak wrzucenie całego pojemnika soli do garnka.

Background Color

Property background-color ustawia tło elementu.

Przykład:

body {
  background-color: #f3f4f6;
}

Możesz używać jej na sections:

.hero {
  background-color: #111827;
}

Dodaj to:

.hero {
  background-color: #111827;
  color: white;
}

Teraz hero ma ciemne tło.

To tworzy contrast.

Hero wygląda jak mocna sekcja otwierająca.

Dobre hero powinno mówić:

“Witaj.”

A nie:

“HTML przypadkowo mnie tutaj położył.”

Background Gradients

CSS może tworzyć gradients bez obrazów.

Przykład:

background: linear-gradient(135deg, #111827, #1e3a8a);

Dodaj to do .hero:

.hero {
  background: linear-gradient(135deg, #111827, #1e3a8a);
  color: white;
}

Teraz hero background przechodzi od ciemnoszarego do niebieskiego.

Subtelne gradients mogą wyglądać nowocześnie.

Ale nie przesadzaj.

Gradient powinien szeptać.

Nie wchodzić w okularach przeciwsłonecznych i krzyczeć: “Jestem design!”

Wystylizuj Navbar

Dodaj:

.navbar {
  max-width: 1100px;
  margin: 0 auto;
  padding: 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}

.logo {
  margin: 0;
  font-size: 24px;
}

.nav-links {
  display: flex;
  gap: 20px;
  font-weight: 700;
}

Teraz navigation jest wyrównana.

Logo jest po lewej.

Links są po prawej.

Znasz to już z poprzednich lekcji.

CSS nie zawsze jest nowym chaosem.

Czasem to stary chaos w lepszej kurtce.

Wystylizuj Hero Content

Dodaj:

.hero-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 80px 24px 96px;
  text-align: center;
}

.eyebrow {
  margin: 0 0 16px;
  color: #bfdbfe;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

.hero-content h2 {
  margin: 0 0 20px;
  font-size: 56px;
  line-height: 1.1;
}

.hero-content p {
  color: #dbeafe;
  font-size: 20px;
  line-height: 1.7;
}

Hero ma teraz:

letter-spacing daje label bardziej czysty wygląd.

Używaj tego ostrożnie.

Za dużo letter spacing sprawia, że słowa wyglądają, jakby powoli odchodziły od siebie.

Borders

Borders tworzą widoczne oddzielenie.

Przykład:

.card {
  border: 2px solid #e5e7eb;
}

Border ma:

Przykład:

border: 2px solid #e5e7eb;

Możesz używać borders na cards, buttons, sections i images.

Borders są użyteczne.

Ale zbyt dużo borders może sprawić, że design będzie ciężki.

Border powinien pomagać użytkownikowi zrozumieć strukturę.

Nie sprawiać, że strona wygląda jak więzienie ze spreadsheet.

Border Radius

border-radius zaokrągla rogi.

Przykład:

.card {
  border-radius: 18px;
}

Dodaj style dla page i cards:

.page {
  max-width: 1100px;
  margin: 40px auto;
  padding: 0 24px;
}

.intro-card {
  background-color: white;
  padding: 32px;
  border: 2px solid #e5e7eb;
  border-radius: 24px;
  margin-bottom: 24px;
}

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.card {
  background-color: white;
  padding: 28px;
  border: 2px solid #e5e7eb;
  border-radius: 24px;
}

Teraz cards wyglądają łagodniej i bardziej nowocześnie.

Ostre rogi nie są złe.

Ale rounded corners często wyglądają przyjaźniej.

Jakby strona wypiła kawę i zdecydowała, że nie będzie agresywna.

Box Shadow

Property box-shadow dodaje cień za elementem.

Przykład:

.card {
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);
}

Wartości oznaczają:

horizontal offset
vertical offset
blur
color

Przykład:

box-shadow: 0 10px 25px rgba(0, 0, 0, 0.08);

To oznacza:

Dodaj:

.intro-card,
.card {
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.06);
}

Teraz cards mają subtelną głębię.

Subtelny to słowo klucz.

Shadow powinien wspierać design.

Nie wyglądać, jakby card próbowała uciec z ziemskiej grawitacji.

Featured Card

Sprawmy, żeby jedna card się wyróżniała.

Dodaj:

.featured {
  border-color: #2563eb;
  background-color: #eff6ff;
}

To daje featured card:

Prosto.

Czytelnie.

Bez krzyku.

Featured element powinien być zauważalny.

Nie zachowywać się, jakby wygrał konkurs neonowych kostiumów.

Button Styling

Teraz wystylizuj button.

Dodaj:

.button {
  display: inline-block;
  background-color: white;
  color: #1e3a8a;
  padding: 14px 22px;
  border-radius: 999px;
  font-weight: 700;
  margin-top: 16px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.18);
}

.button:hover {
  transform: translateY(-2px);
}

Ten button ma:

Hover effects mogą sprawić, że buttons czują się interaktywne.

Ale nie każ im skakać jak nerwowe żaby.

Mały ruch wystarczy.

Dodaj Transitions

Hover movement będzie wyglądał lepiej z transition.

Dodaj:

.button,
.card {
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 35px rgba(0, 0, 0, 0.1);
}

Teraz cards delikatnie unoszą się przy hover.

To daje przyjemne interactive feel.

Znowu: subtelnie.

Jeśli każda card skacze dramatycznie, strona zaczyna wyglądać jak park trampolin.

Fajne dla dzieci.

Nie zawsze idealne dla web design.

Pełny CSS

Twój style.css powinien wyglądać tak:

* {
  box-sizing: border-box;
}

body {
  margin: 0;
  font-family: Arial, sans-serif;
  background-color: #f3f4f6;
  color: #111827;
}

a {
  color: inherit;
  text-decoration: none;
}

.hero {
  background: linear-gradient(135deg, #111827, #1e3a8a);
  color: white;
}

.navbar {
  max-width: 1100px;
  margin: 0 auto;
  padding: 24px;
  display: flex;
  align-items: center;
  justify-content: space-between;
  gap: 24px;
}

.logo {
  margin: 0;
  font-size: 24px;
}

.nav-links {
  display: flex;
  gap: 20px;
  font-weight: 700;
}

.hero-content {
  max-width: 800px;
  margin: 0 auto;
  padding: 80px 24px 96px;
  text-align: center;
}

.eyebrow {
  margin: 0 0 16px;
  color: #bfdbfe;
  font-weight: 700;
  text-transform: uppercase;
  letter-spacing: 0.12em;
}

.hero-content h2 {
  margin: 0 0 20px;
  font-size: 56px;
  line-height: 1.1;
}

.hero-content p {
  color: #dbeafe;
  font-size: 20px;
  line-height: 1.7;
}

.button {
  display: inline-block;
  background-color: white;
  color: #1e3a8a;
  padding: 14px 22px;
  border-radius: 999px;
  font-weight: 700;
  margin-top: 16px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.18);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.button:hover {
  transform: translateY(-2px);
}

.page {
  max-width: 1100px;
  margin: 40px auto;
  padding: 0 24px;
}

.intro-card {
  background-color: white;
  padding: 32px;
  border: 2px solid #e5e7eb;
  border-radius: 24px;
  margin-bottom: 24px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.06);
}

.intro-card h2,
.card h2 {
  margin-top: 0;
}

.intro-card p,
.card p {
  color: #4b5563;
  font-size: 18px;
  line-height: 1.7;
}

.cards {
  display: grid;
  grid-template-columns: repeat(3, 1fr);
  gap: 24px;
}

.card {
  background-color: white;
  padding: 28px;
  border: 2px solid #e5e7eb;
  border-radius: 24px;
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.06);
  transition: transform 0.2s ease, box-shadow 0.2s ease;
}

.card:hover {
  transform: translateY(-4px);
  box-shadow: 0 16px 35px rgba(0, 0, 0, 0.1);
}

.featured {
  border-color: #2563eb;
  background-color: #eff6ff;
}

.site-footer {
  text-align: center;
  padding: 32px 24px;
  color: #6b7280;
}

@media (max-width: 800px) {
  .hero-content h2 {
    font-size: 42px;
  }

  .cards {
    grid-template-columns: repeat(2, 1fr);
  }
}

@media (max-width: 560px) {
  .navbar {
    flex-direction: column;
    align-items: flex-start;
  }

  .nav-links {
    flex-direction: column;
    gap: 12px;
  }

  .hero-content {
    padding: 56px 20px 72px;
    text-align: left;
  }

  .hero-content h2 {
    font-size: 34px;
  }

  .hero-content p {
    font-size: 18px;
  }

  .cards {
    grid-template-columns: 1fr;
  }

  .intro-card,
  .card {
    padding: 24px;
  }
}

Zapisz plik.

Odśwież browser.

Powinieneś teraz zobaczyć:

Strona powinna wyglądać bardziej complete.

Nie dlatego, że dodaliśmy przypadkowe dekoracje.

Tylko dlatego, że użyliśmy visual details z sensem.

To różnica między designem a rzucaniem CSS confetti.

Częste Błędy

Za Dużo Shadow

Źle:

.card {
  box-shadow: 0 30px 80px rgba(0, 0, 0, 0.5);
}

To jest zbyt mocne dla normalnej card.

Wygląda dramatycznie.

Zbyt dramatycznie.

Jakby card miała sekretną villain identity.

Lepiej:

.card {
  box-shadow: 0 10px 25px rgba(0, 0, 0, 0.06);
}

Małe shadows zwykle wystarczą.

Za Dużo Borders

Borders są użyteczne, ale nie wszystko potrzebuje border.

Jeśli każda section, card, image, button, heading i paragraph ma border, strona robi się noisy.

Używaj borders, żeby wyjaśniać strukturę.

Nie po to, żeby zamykać każdy element w klatce jak małe cyfrowe zwierzę.

Słaby Contrast

Nie dawaj low-contrast text na kolorowych backgrounds.

Źle:

.hero p {
  color: #9ca3af;
}

na ciemnoniebieskim background może być za słabe.

Lepiej:

.hero p {
  color: #dbeafe;
}

Najpierw readable.

Potem pretty.

Pretty but unreadable to tylko decorative confusion.

Praktyka

Stwórz services section z trzema cards.

Każda card powinna mieć:

Zrób jedną card featured.

Użyj:

Utrzymaj design clean.

Nie dekoruj wszystkiego jak tort urodzinowy walczący z tęczą.

Mini Wyzwanie

Stwórz pricing section z trzema plans:

Użyj:

Zrób ją responsive:

To realny landing page pattern.

Możesz użyć go dla swoich services.

Tak, to jest użyteczne.

CSS wreszcie płaci czynsz.

Podsumowanie

Dzisiaj nauczyłeś się, że:

Dobry design nie polega na dodawaniu więcej.

Polega na dodawaniu właściwych rzeczy.

Mały shadow.

Czysty border.

Dobry background.

Wystarczający spacing.

Często to wszystko, czego potrzeba.

CSS nie musi krzyczeć.

Czasem musi tylko uczesać włosy.

Następna Lekcja

W następnej lekcji nauczymy się transitions i prostych animations.

Sprawimy, że elementy będą poruszać się płynnie.

Nie jak cyrk.

Jak profesjonalna strona z dobrymi manierami.