Graphics op je website II: <svg>-tag

In het artikel Graphics op je website I: <canvas>-tag wordt beschreven hoe je de <canvas> kunt gebruiken in je website. Een nadeel van <canvas> is dat de geproduceerde figuur niet schaalbaar is. Als de afmetingen van het browser-window of het <canvas>-element worden gewijzigd, moet de hele figuur steeds opnieuw worden opgebouwd. Dat geldt ook als er beweging is, zoals bij een analoge klok.

<svg> heeft dat probleem niet. Ieder element kan worden aangepast, onafhankelijk van de rest. Dat komt doordat elk element in <svg> is opgebouwd met wiskundige formules, waar <canvas> een bitmap produceert. Bij het resizen van het browser-window of het <svg>-element worden de formules simpelweg gewijzigd en daarmee is het klaar.

Op deze pagina wordt iets gezegd over het gebruiken van <svg> in je website.

De <svg>-tag is nieuw in de HTML5-standaard. Alle grote browsers ondersteunen het.

Net als <canvas> is <svg> een container. Binnen die container programmeer je de figuur-elementen met XML-tags. Als voorbeeld zie je hieronder een paar basisfiguren, die zijn ontleend aan w3schools.com:

Mooi Sorry, uw browser heeft geen ondersteuning voor de <svg>-tag.

De code van het voorbeeld ziet er zo uit:

<svg width="600" height="320" style="border:1px solid black">
  <!-- Cirkel -->
  <circle cx="500" cy="210" r="80" stroke="green" stroke-width="4"
    fill="#ff7" />
  <!-- Rechthoek -->
  <rect x="290" y="10" width="300" height="100"
    style="fill:rgb(0,0,240);stroke-width:5;stroke:#888" />
  <!-- Vierkant met afgeronde hoeken -->
  <rect x="10" y="160" rx="20" ry="20" width="150" height="150"
    style="fill:red;stroke:black;stroke-width:5;opacity:0.5" />
  <!-- Ster -->
  <polygon points="270,110 210,298 360,178 190,178 330,298"
    style="fill:lime;stroke:purple;stroke-width:5;fill-rule:evenodd;" />
  <!-- Ellips met verlopende achtergrond -->
  <defs>
    <linearGradient id="grad1" x1="0%" y1="0%" x2="0%" y2="80%" >
      <stop offset="0%"
        style="stop-color:rgb(255,255,0);stop-opacity:1" />
      <stop offset="100%"
        style="stop-color:rgb(255,0,0);stop-opacity:1" />
    </linearGradient>
  </defs>
  <ellipse cx="100" cy="70" rx="85" ry="55" fill="url(#grad1)" />
  <text fill="#ffffff" font-size="45" font-family="Verdana"
    x="50" y="86">Mooi</text>
  <line x1="300" y1="0" x2="500" y2="200"
    style="stroke:rgb(255,0,0);stroke-width:5" />
  Sorry, uw browser heeft geen ondersteuning voor de &lt;svg&gt;-tag.
</svg>

Toelichting bij de code

En verder:

Tenslotte:
Werken met <svg> is niet beperkt tot het tekenen van elementen zoals op deze pagina is gedaan. Het voert te ver om alle mogelijkheden te bespreken, want dat zijn er heel veel. Op internet zijn daar voldoende voorbeelden van te vinden.

 
terug

html-426; Laatste wijziging: 21 september 2022