Jak zrobić sklep w HTML?

Aby stworzyć sklep internetowy w HTML z elementami CSS i JavaScript, warto podejść do tematu etapami: od podstawowej struktury i dodania produktów, po prostą funkcjonalność koszyka oraz wytyczne dotyczące dobrych praktyk i optymalizacji SEO. Poniżej znajduje się szczegółowy poradnik z praktycznymi przykładami kodu oraz propozycjami rozbudowy funkcjonalności.

Struktura projektu sklepu internetowego

Podstawowy sklep można zbudować z trzech głównych plików:

  • index.html (strona sklepu),
  • style.css (style graficzne),
  • script.js (logika JavaScript, np. koszyk).

Struktura katalogów:

/sklep/
|-- index.html
|-- style.css
|-- script.js
|-- /images/

Przykład prostego sklepu – krok po kroku

Krok 1 – html – podstawowa strona produktu

<!DOCTYPE html>
<html lang="pl">
<head>
  <meta charset="UTF-8">
  <title>Mój Sklep Internetowy</title>
  <link rel="stylesheet" href="style.css">
</head>
<body>
  <header>
    <h1>Mój Sklep Internetowy</h1>
    <div id="cart">Koszyk: <span id="cart-count">0</span> produktów</div>
  </header>
  <main>
    <section class="product-list">
      <article class="product">
        <img src="images/product1.jpg" alt="Produkt 1">
        <h2>Produkt 1</h2>
        <p class="price">19,99 zł</p>
        <button onclick="addToCart('Produkt 1', 19.99)">Dodaj do koszyka</button>
      </article>
      <article class="product">
        <img src="images/product2.jpg" alt="Produkt 2">
        <h2>Produkt 2</h2>
        <p class="price">29,99 zł</p>
        <button onclick="addToCart('Produkt 2', 29.99)">Dodaj do koszyka</button>
      </article>
      <!-- Kolejne produkty -->
    </section>
    <section id="cart-details" style="display: none;">
      <h2>Zawartość koszyka</h2>
      <ul id="cart-items"></ul>
      <p id="cart-total"></p>
    </section>
  </main>
  <script src="script.js"></script>
</body>
</html>

Krok 2 – css – podstawowy wygląd sklepu

body {
  font-family: Arial, sans-serif;
  background: #fafafa;
  margin: 0;
  padding: 0;
}
header {
  background: #0052cc;
  color: white;
  padding: 1em 2em;
  display: flex;
  justify-content: space-between;
  align-items: center;
}
.product-list {
  display: flex;
  flex-wrap: wrap;
  justify-content: center;
  gap: 2em;
  margin: 2em 0;
}
.product {
  background: white;
  border: 1px solid #eee;
  border-radius: 6px;
  text-align: center;
  padding: 1em;
  width: 220px;
}
.product img {
  max-width: 100%;
  height: auto;
}
button {
  background: #029a48;
  color: white;
  border: none;
  border-radius: 3px;
  padding: 0.7em 2em;
  cursor: pointer;
  margin-top: 1em;
}
button:hover {
  background: #026437;
}

Krok 3 – javascript – prosty koszyk

let cart = [];
function addToCart(product, price) {
  cart.push({ product, price });
  updateCart();
}
function updateCart() {
  document.getElementById('cart-count').textContent = cart.length;
  renderCartDetails();
}
function renderCartDetails() {
  const cartDetails = document.getElementById('cart-details');
  const cartItems = document.getElementById('cart-items');
  const cartTotal = document.getElementById('cart-total');
  if (cart.length === 0) {
    cartDetails.style.display = 'none';
    return;
  }
  cartDetails.style.display = 'block';
  cartItems.innerHTML = '';
  let total = 0;
  cart.forEach(item => {
    let li = document.createElement('li');
    li.textContent = item.product + ' - ' + item.price.toFixed(2) + ' zł';
    cartItems.appendChild(li);
    total += item.price;
  });
  cartTotal.textContent = 'Łącznie: ' + total.toFixed(2) + ' zł';
}

Najważniejsze funkcje i rozbudowa

  • Dodawanie kilku produktów – zobacz powyżej przykład struktury <article class="product"> dla wielu pozycji;
  • Podgląd koszyka – w sekcji <section id="cart-details"> wyświetlają się wybrane produkty oraz łączna cena;
  • Obsługa usuwania z koszyka – możesz rozbudować funkcję removeFromCart(index) do usuwania danego produktu;
  • Realizacja zamówienia – w pełni funkcjonalny sklep wymaga zapisu zamówień po stronie serwera. W czystym HTML/JS możesz jedynie symulować finalizację, np. wyświetlając podsumowanie;
  • Responsywność – za pomocą media queries w CSS dostosuj widok sklepu do urządzeń mobilnych.

Wytyczne praktyczne

  • Struktura SEO – stosuj poprawne nagłówki (<h1>, <h2>), unikalne tytuły stron i opisy produktów, optymalizuj nazwy obrazków;
  • Optymalizacja wydajności – używaj lekkich obrazów, minimalizuj kod CSS i JS, korzystaj z cache;
  • Bezpieczeństwo – rozbudowane sklepy wymagają backendu do bezpiecznej obsługi zamówień i płatności;
  • Zgodność z prawem – publikując sklep, zadbaj o politykę prywatności, regulamin i warunki zwrotów.

Zastosowania i rozwinięcia

  1. Prosty katalog produktów – idealny do prezentacji kilku pozycji bez obsługi płatności online;
  2. Skrypt do nauki html/css/js – nauka obsługi DOM, zdarzeń i prostych skryptów;
  3. Podstawa pod integrację z backendem – możesz dodać obsługę zamówień przez API np. z PHP, Node.js lub innych technologii serwerowych;
  4. Landing page kampanii produktowej – szybka sprzedaż pojedynczego produktu z podstawowym koszykiem.

Co dalej?

  • By stworzyć profesjonalny sklep, rozważ wykorzystanie gotowych rozwiązań e-commerce lub frameworków takich jak React, Next.js, Vue, a także systemów takich jak WooCommerce czy PrestaShop.
  • Dobrą praktyką jest ciągła optymalizacja SEO i analityka (Google Analytics), co pozwala zwiększyć konwersje i zdobyć klientów.

Stworzenie sklepu w HTML, nawet w wersji bardzo uproszczonej, to doskonały sposób na naukę frontend developmentu oraz przygotowanie się do budowy bardziej rozbudowanych aplikacji i stron internetowych.

Programista i twórca serwisu Creative Coding, absolwent Politechniki Warszawskiej (WEiTI). Od 10+ lat łączy front‑end, grafikę generatywną i narzędzia dla twórców; opublikował 120+ projektów i artykułów, prowadził warsztaty dla 2 000+ uczestników. Pracuje z JavaScriptem, Three.js, P5.js i GLSL, bada wydajność i dokumentuje procesy, tworząc praktyczne przewodniki dla osób łączących kod z obrazem, dźwiękiem i interakcją.
Zostaw komentarz

Komentarze

Brak komentarzy. Dlaczego nie rozpoczniesz dyskusji?

Dodaj komentarz

Twój adres e-mail nie zostanie opublikowany. Wymagane pola są oznaczone *