KSS Style Guide

12 #permalink API - sekcja z cytatami

Toggle example guides Toggle HTML markup

  1. .chat-container: Jest to główny kontener sekcji chatu. Ma ustaloną pozycję na stałe na dolnej krawędzi i prawym rogu strony (position: fixed; bottom: 0; right: 0;). Posiada szerokość 350 pikseli i zaokrąglone rogi na górze (border-radius: 15px 15px 0 0;). Tło jest białe (background: #ffffff;) z lekkim cieniem na dole, który nadaje efekt unoszenia się nad stroną (box-shadow: 0 -5px 10px rgba(0, 0, 0, 0.2);). Na początku jest poza widokiem strony i przesunięty w dół o 100% swojej wysokości, ale pojawia się płynnie w wyniku animacji (transition: transform 0.3s ease;). Z-index ustawiony jest na 1000, co oznacza, że chat jest wyżej niż inne elementy na stronie.

  2. .chat-header: To nagłówek sekcji chatu. Zawiera nazwę "DRAW A QUOTE!", przycisk zmiany motywu ("change theme") oraz przycisk rozwijania/zwijania chatu ("-"). Nagłówek ma niebieskie tło (background: #b15f01;), białą czcionkę (color: white;) i zaokrąglone rogi na górze (border-radius: 15px 15px 0 0;). Elementy wewnątrz nagłówka są rozmieszczone w jednym rzędzie (display: flex;) i wycentrowane zarówno w pionie, jak i poziomie (justify-content: space-between; align-items: center;). Kursor myszy zmienia się na wskaźnik, co wskazuje na możliwość interakcji (cursor: pointer;).

  3. .chat-content: Jest to zawartość sekcji chatu, która początkowo jest ukryta (display: none;), ale pojawia się po rozwinieciu chatu (.expanded .chat-content). Ma wewnętrzny padding 20 pikseli i jest wyśrodkowana poziomo (text-align: center;).

  4. .przycisk: Stylizacja przycisków używanych w sekcji chatu. Przyciski mają padding 10 pikseli na górze i dole, 15 pikseli poziomo, margin 10 pikseli na górze, brak obramowania, zaokrąglone rogi (5 pikseli), kursor myszy zmienia się na wskaźnik, tło jest niebieskie, a czcionka biała.

  5. .expanded .chat-content: Stylizacja zawartości chatu, która jest widoczna po rozwinieciu chatu.

  6. .dark-mode .chat-header: Stylizacja nagłówka chatu w trybie ciemnym. Tło jest ciemnoszare.

  7. .dark-mode .chat-container: Stylizacja kontenera chatu w trybie ciemnym. Tło jest jeszcze ciemniejsze.

  8. .dark-mode button: Stylizacja przycisków w trybie ciemnym. Przyciski mają ciemnoszare tło.

  9. .quote-style: Stylizacja elementów zawierających cytaty w chatu. Mają lewe obramowanie o grubości 3 pikseli w kolorze pomarańczowym, kursywę, białą czcionkę na tle odcienia szarości i padding 10 pikseli na górze i dole, a także margines 10 pikseli na górze.

Example
DRAW A QUOTE!

See what someone has to say to you today. Think about it...

Markup
        <div class="chat-container">
            <div class="chat-header">
                <span>DRAW A QUOTE!</span>
                <button class="przycisk" id="toggle-theme">change theme</button>
                <button class="przycisk" id="expand-collapse-btn">-</button>
            </div>
            <div class="chat-content">
                <p>See what someone has to say to you today. Think about it...</p>
                <button class="przycisk" id="get-quote">Download quote</button>
                <div class="przycisk" id="quote-display"></div>
            </div>
        </div>
        <script>
          document.getElementById('toggle-theme').addEventListener('click', toggleTheme);
          document.getElementById('expand-collapse-btn').addEventListener('click', toggleChat);
          document.getElementById('get-quote').addEventListener('click', fetchRandomQuote);
          function toggleTheme() {
              // Pobierz element kontenera czatu
              const chatContainer = document.querySelector('.chat-container');
              // Przełącz klasę 'dark-mode', która kontroluje motyw
              chatContainer.classList.toggle('dark-mode');
          }
          function toggleChat() {
              const chatContainer = document.querySelector('.chat-container');
              const chatContent = document.querySelector('.chat-content');
              const chatHeaderSpan = chatContainer.querySelector('.chat-header span');
              const toggleThemeButton = chatContainer.querySelector('#toggle-theme');
              const isExpanded = chatContainer.classList.toggle('expanded');
              chatContent.style.display = isExpanded ? 'block' : 'none';
              document.getElementById('expand-collapse-btn').textContent = isExpanded ? '−' : '+';
              chatContainer.style.transform = isExpanded ? 'translateY(0)' : 'translateY(calc(100% - 50px))';
              if (window.innerWidth <= 600) {
                  if (isExpanded) {
                      // Rozwiń kontener czatu do pełnego widoku
                      chatContainer.style.width = '350px'; // Przywróć standardową szerokość
                      chatHeaderSpan.style.display = 'block'; // Pokaż tytuł
                      toggleThemeButton.style.display = 'block'; // Pokaż przycisk zmiany motywu
                  } else {
                      // Zwiń kontener czatu do widoku z tylko przyciskiem '+'
                      chatContainer.style.width = '70px'; // Zmień szerokość na minimalną
                      chatHeaderSpan.style.display = 'none'; // Ukryj tytuł
                      toggleThemeButton.style.display = 'none'; // Ukryj przycisk zmiany motywu
                  }
              }
              chatContent.style.display = isExpanded ? 'block' : 'none';
              const expandCollapseBtn = document.getElementById('expand-collapse-btn');
              expandCollapseBtn.textContent = isExpanded ? '−' : '+';
          }
          function displayProverbAndNavigate(data) {
              const quoteDisplay = document.getElementById('quote-display');
              quoteDisplay.textContent = `"${data.content}" — ${data.author}`;
              // Użyj BOM do nawigacji, ustaw hasz na 'quote'
              window.location.hash = 'quote';
          }
          function fetchQuote() {
              return new Promise((resolve, reject) => {
                  fetch('https://api.quotable.io/random')
                      .then(response => response.json())
                      .then(data => resolve(data))
                      .catch(error => reject(error));
              });
          }
          async function fetchRandomQuote() {
              const chatContainer = document.querySelector('.chat-container');
              const quoteDisplay = document.getElementById('quote-display');
              try {
                  const data = await fetchQuote(); // Pobierz cytatu korzystając z Promise
                  quoteDisplay.textContent = `"${data.content}" — ${data.author}`;
                  quoteDisplay.classList.add('quote-style'); // Stylizacja cytatu
                  chatContainer.style.backgroundColor = '#7c4200'; // Sukces: zmiana koloru tła na pomarańczowy
              } catch (error) {
                  quoteDisplay.textContent = 'Nie udało się pobrać przysłowia.';
                  console.error('Error fetching random quote:', error);
                  chatContainer.style.backgroundColor = ''; // Niepowodzenie: przywrócenie standardowego koloru tła
              }
          }
          window.addEventListener('DOMContentLoaded', () => {
              toggleChat();
          });
      </script>
Source: styleFaq.css, line 870