Het zal je misschien verbazen hoe eenvoudig het is om dit peperkoeken mannetje te tekenen op basis van een aantal lijnen. We leren ook hoe je de uiteinden van lijnen en de hoekpunten van rechthoeken kunt afronden.

Stijleigenschappen verplaatsen naar CSS

We kunnen CSS-klassen toewijzen aan elk element en sommige attributen verplaatsen naar CSS. We kunnen echter alleen de presentatie-attributen verplaatsen. Positieattributen en attributen die de vormen definiƫren moeten in de SVG-tags blijven. Maar attributen voor kleuren, lijnen en lettertypes kunnen naar CSS verplaatst worden.

<svg width="200px" height="200px" viewBox="-100 -100 200 200">
  <style>
    .hoofd {
      fill: #cd803d;
    }
  </style>
  <circle class="hoofd" cx="0" cy="-50" r="30" />
</svg>

Afgeronde lijnen

We zagen al de fill en enkele stroke eigenschappen, maar hier is nog een presentatie-eigenschap. De stroke-linecap. Hiermee kunnen we het uiteinde van onze lijnen afronden. Merk op dat de benen en armen gewoon als lijnen getekend worden.

Ter vergelijking, als we de stroke-linecap verwijderen en een smallere stroke-width instellen, dan zou het er zo uitzien.

<svg width="200px" height="200px" viewBox="-100 -100 200 200">
  <style>
    .ledemaat {
      stroke: #cd803d;
    }
  </style>
  <line class="ledemaat" x1="-40" y1="-10" x2="40" y2="-10" />
  <line class="ledemaat" x1="-25" y1="50" x2="0" y2="-15" />
  <line class="ledemaat" x1="25" y1="50" x2="0" y2="-15" />
</svg>

Maar door een dikke lijnbreedte en een rond uiteinde in te stellen, kunnen we benen en armen vormgeven voor onze figuur.

<svg width="200px" height="200px" viewBox="-100 -100 200 200">
  <style>
    .ledemaat {
      stroke: #cd803d;
      stroke-width: 35px;
      stroke-linecap: round;
    }
  </style>
  <line class="ledemaat" x1="-40" y1="-10" x2="40" y2="-10" />
  <line class="ledemaat" x1="-25" y1="50" x2="0" y2="-15" />
  <line class="ledemaat" x1="25" y1="50" x2="0" y2="-15" />
</svg>

Afgeronde rechthoeken

Let ook op de rx eigenschap bij de rechthoek die de mond definieert. Hierdoor worden de randen afgerond. Het is vergelijkbaar met de border-radius eigenschap voor gewone HTML-elementen.

<svg width="200px" height="200px" viewBox="-100 -100 200 200">
  <style>
    .hoofd {
      fill: #cd803d;
    }
    .mond {
      fill: none;
      stroke: white;
      stroke-width: 2px;
    }
  </style>
  <circle class="hoofd" cx="0" cy="-50" r="30" />
  <rect class="mond" x="-10" y="-40" width="20" height="5" rx="2" />
</svg>

Peperkoeken mannetje

Zodra we alles hebben samengevoegd en ogen en knoppen hebben toegevoegd, ziet de uiteindelijke code er zo uit:

<svg class="gingerbread" width="200px" height="200px" viewBox="-100 -100 200 200">
  <style>
    .hoofd {
      fill: #cd803d;
    }
    .oog {
      fill: white;
    }
    .mond {
      fill: none;
      stroke: white;
      stroke-width: 2px;
    }
    .ledemaat {
      stroke: #cd803d;
      stroke-width: 35px;
      stroke-linecap: round;
    }
  </style>
  <circle class="hoofd" cx="0" cy="-50" r="30" />
  <circle class="oog" cx="-12" cy="-55" r="3" />
  <circle class="oog" cx="12" cy="-55" r="3" />
  <rect class="mond" x="-10" y="-40" width="20" height="5" rx="2" />
  <line class="ledemaat" x1="-40" y1="-10" x2="40" y2="-10" />
  <line class="ledemaat" x1="-25" y1="50" x2="0" y2="-15" />
  <line class="ledemaat" x1="25" y1="50" x2="0" y2="-15" />
  <circle class="knoop" cx="0" cy="-10" r="5" />
  <circle class="knoop" cx="0" cy="10" r="5" />
</svg>