Moduł 4 - Zajęcia 6 - Grafika wektorowa

1.1 Grafika wektorowa

SVG (Scalable Vector Graphics) to format graficzny i język służący do opisywania obrazów wektorowych. Plik nie jest plikiem binarnym, ale zawiera zwykły tekst (XML) opisujący obiekty, ich efekty oraz zachowanie.

Grafika wektorowa ma szereg zalet.

  • Skalowanie - w przeciwieństwie do grafiki rastrowej, SVG nie traci jakości podczas skalowania.
  • Rozmiar pliku - obrazy wektorowe ważą znacznie mniej niż obrazy rastrowe, gdy są używane do zapisywania ikon lub innych abstrakcyjnych grafik. Używanie plików wektorowych do zapisywania realistycznych obrazów prowadzi jednak do powstawania plików o dużych rozmiarach.
  • Dynamika - używając CSS i JavaScript, możesz zmienić parametry obrazu wektorowego, takie jak kolor lub obramowanie.

Wiemy już, że grafika wektorowa, podobnie jak obrazy rastrowe, może być dodawana za pomocą elementu img. Wystarczy określić:

  • ścieżkę do obrazu
  • tekst opisu
  • inne atrybuty (jeśli to konieczne).
             <img src="path/to/image.svg" alt="Description" />
          

1.2 Wbudowany SVG

W przypadku statycznych grafik, takich jak abstrakcyjne tła lub ikony, do których nie trzeba dodawać efektu po najechaniu kursorem lub fokusu, najczęściej stosuje się dodawanie obrazów wektorowych za pomocą elementu <img> lub jako tła za pomocą elementu background-image.

Metody te mają jedną istotną wadę: nie pozwalają na dynamiczną zmianę koloru oraz innych cech obrazu wektorowego z poziomu CSS. Obrazy SVG mogą być dodawane w HTML. Otwierasz po prostu plik SVG w edytorze tekstu, kopiujesz jego zawartość i wklejasz ją do dokumentu HTML. Nazywa się to "wbudowanym SVG" (inline SVG).

Podejście to ma jednak szereg ograniczeń.

  • Wbudowany kod SVG zwiększa wielkość pliku HTML.
  • Niemożliwe jest ponowne użycie tego samego obrazu bez powielania kodu.
  • Utrzymywanie i naprawianie wbudowanego SVG jest czasochłonne i trzeba szukać go w kodzie HTML.
  • Przeglądarka nie może buforować takich obrazów, w przeciwieństwie do zewnętrznych plików SVG.

W CSS możesz dynamicznie zmieniać niektóre parametry wbudowanego obrazu wektorowego, takie jak kolor. Właściwość fill kontroluje kolor wypełnienia. Możesz ustawić kolor w dowolnym, wygodnym formacie.

            /* Ustawiamy kolor wypełnienia w spokojnym stanie. */
            .icon {
              fill: #2a2a2a;
            }

            /* Zmieniamy kolor wypełnienia po najechaniu kursorem. */
            .icon:hover {
              fill: #03a9f4;
            }
          

Jeśli nie określono koloru wypełnienia, kształt zostanie wypełniony bieżącym kolorem tekstu (domyślnie czarnym).

Możesz usunąć wypełnienie za pomocą wartości none, co spowoduje, że kształt będzie całkowicie przezroczysty.

SVG Sprites to technika używana najczęściej podczas pracy z grafiką wektorową.

  • Wszystkie ikony wektorowe są gromadzone w jednym pliku.
  • Plik sprite jest buforowany przez przeglądarkę i nie będzie ponownie ładowany, przy ponownych odwiedzinach strony.
  • Możesz zmienić kolor i inne cechy ikon sprite za pomocą CSS.

Algorytm tworzenia SVG Sprites

  1. Otwórz layout w programie Figma, wybierz wszystkie ikony i wyeksportuj je w formacie SVG na swój komputer.
  2. Wejdź na stronę icomoon.io , kliknij przycisk Import Icons w lewym górnym rogu i dodaj wszystkie ikony.
  3. Kliknij Generate SVG & More w lewym dolnym rogu.
  4. Kliknij Download w lewym dolnym rogu.

Na Twoim komputerze pojawi się plik .svg. Jest to właśnie SVG sprite.

Dokument SVG to po prostu plik tekstowy, który - w przeciwieństwie do grafiki rastrowej - opisuje kształty, które będa renderowane przez przeglądarkę. W jednym pliku za pomocą elementu <symbol> możesz opisać wiele różnych grup kształtów, a następnie, nadając każdemu symbolowi unikalny id, możesz uzyskać dostęp do dowolnego z nich z poziomu dokumentu HTML.

    <svg aria-hidden="true" style="position:absolute;width:0;height:0" xmlns="<http://www.w3.org/2000/svg>" overflow="hidden">
    <defs>
      <!-- Trash can icon -->
      <symbol id="delete" viewBox="0 0 32 32">
        <path d="M8 25.333C8 26.8 9.2 28 10.667 28h10.667c1.467 0 2.667-1.2 2.667-2.667v-16h-16v16zm17.333-20h-4.667L19.333 4h-6.667l-1.333 1.333H6.666V8h18.667V5.333z" />
      </symbol>
      <!-- Camera icon -->
      <symbol id="camera" viewBox="0 0 32 32">
        <path d="M20.267 16a4.267 4.267 0 11-8.534 0 4.267 4.267 0 018.534 0z" />
        <path d="M12 2.667L9.56 5.334H5.333a2.675 2.675 0 00-2.667 2.667v16c0 1.467 1.2 2.667 2.667 2.667h21.333c1.467 0 2.667-1.2 2.667-2.667v-16c0-1.467-1.2-2.667-2.667-2.667h-4.227l-2.44-2.667h-8zm4 20c-3.68 0-6.667-2.987-6.667-6.667S12.32 9.333 16 9.333 22.667 12.32 22.667 16 19.68 22.667 16 22.667z" />
      </symbol>
      <!-- Portfolio icon -->
      <symbol id="work" viewBox="0 0 32 32">
        <path d="M26.667 8h-5.333V5.333a2.658 2.658 0 00-2.667-2.667h-5.333a2.658 2.658 0 00-2.667 2.667V8H5.334a2.646 2.646 0 00-2.653 2.667l-.013 14.667a2.658 2.658 0 002.667 2.667h21.333a2.658 2.658 0 002.667-2.667V10.667A2.658 2.658 0 0026.668 8zm-8 0h-5.333V5.333h5.333V8z" />
      </symbol>
    </defs>
  </svg>
          

Wewnątrz SVG sprite, znajduje się zestaw elementów <svg> i <symbol>, które opisują cały SVG sprite i każdy kształt osobno. Każdy <symbol> ma unikalny identyfikator.

Aby użyć ikony ze sprite'a w dokumencie HTML, musisz dodać znaczniki elementu <svg> i zagnieżdżonego elementu <use> z atrybutem href, który zawiera ścieżkę do ikony. Ścieżkę należy określić jak ścieżkę do zwykłego pliku, ale na końcu dodać kotwicę z identyfikatorem symbolu w sprite.

            <svg>
              <use href="./ścieżka-do-svg-sprite/imię-sprite˙a.svg#identyfikator-symbolu"></use>
            </svg>