textLength

Das textLength-Attribut, verfügbar bei den SVG-Elementen <text> und <tspan>, ermöglicht es Ihnen, die Breite des Bereichs anzugeben, in den der Text gezeichnet wird. Der User Agent stellt sicher, dass der Text nicht über diese Distanz hinausgeht, wobei die Methode(n) verwendet werden, die durch das lengthAdjust-Attribut angegeben sind. Standardmäßig wird nur der Abstand zwischen den Zeichen angepasst, aber die Glyphengröße kann ebenfalls angepasst werden, wenn Sie lengthAdjust ändern.

Durch die Verwendung von textLength können Sie sicherstellen, dass Ihr SVG-Text unabhängig von den Bedingungen in gleicher Breite angezeigt wird, einschließlich wenn Webfonts nicht geladen werden (oder noch nicht geladen wurden).

Sie können dieses Attribut mit den folgenden SVG-Elementen verwenden:

Beispiel

html
<svg viewBox="0 0 200 60" xmlns="http://www.w3.org/2000/svg">
  <text y="20" textLength="6em">Small text length</text>
  <text y="40" textLength="120%">Big text length</text>
</svg>

Anwendungshinweise

Wert <length-percentage> | <number>
Standardwert Keine
Animierbar Ja
<length-percentage>

Dieser Wert gibt die Breite des Raums an, den der Text als absolute Länge oder Prozentsatz belegen soll.

<number>

Ein numerischer Wert beschreibt eine Länge in Bezug auf die Einheiten des aktuellen Koordinatensystems.

Interaktives Beispiel

Dieses Beispiel präsentiert Text, den Sie mit einem <input>-Element des Typs "range" in der Größe ändern können.

CSS

css
.controls {
  font:
    16px "Open Sans",
    "Arial",
    sans-serif;
}

SVG

Beginnen wir mit dem SVG. Es ist ziemlich einfach, mit einem 1000 x 300 Pixel großen Bereich, der auf eine Box von 10 Zentimeter mal 3 Zentimeter abgebildet ist.

html
<svg
  width="10cm"
  height="3cm"
  viewBox="0 0 1000 300"
  xmlns="http://www.w3.org/2000/svg">
  <rect
    x="1"
    y="1"
    width="998"
    height="298"
    fill="none"
    stroke="green"
    stroke-width="2" />

  <text
    id="hello"
    x="10"
    y="150"
    font-family="sans-serif"
    font-size="60"
    fill="green">
    Hello world!
  </text>
</svg>

Zuerst wird ein <rect>-Element verwendet, um ein Rechteck zu erstellen und zu umrahmen, das den Text enthalten soll. Dann wird <text> verwendet, um das Textelement selbst zu erstellen, mit einer id von "hello".

HTML

Das HTML umfasst zwei angezeigte Elemente, die in einem gruppierenden <div> enthalten sind:

html
<div class="controls">
  <input type="range" id="widthSlider" min="80" max="978" />
  <span id="widthDisplay"></span>
</div>

Das <input>-Element vom Typ "range" wird verwendet, um das Schieberegler-Kontrollfeld zu erstellen, das der Benutzer manipulieren wird, um die Breite des Textes zu ändern. Ein <span>-Element mit der ID "widthDisplay" wird bereitgestellt, um den aktuellen Breitenwert anzuzeigen.

JavaScript

Abschließend werfen wir einen Blick auf den JavaScript-Code. Es beginnt damit, Referenzen auf die Elemente zu speichern, auf die zugegriffen werden muss, unter Verwendung von Document.getElementById():

js
const widthSlider = document.getElementById("widthSlider");
const widthDisplay = document.getElementById("widthDisplay");
const textElement = document.getElementById("hello");
const baseLength = Math.floor(textElement.textLength.baseVal.value);

widthSlider.value = baseLength;

widthSlider.addEventListener(
  "input",
  (event) => {
    textElement.textLength.baseVal.newValueSpecifiedUnits(
      SVGLength.SVG_LENGTHTYPE_PX,
      widthSlider.valueAsNumber,
    );
    widthDisplay.innerText = widthSlider.value;
  },
  false,
);

widthSlider.dispatchEvent(new Event("input"));

Nach dem Abrufen der Elementreferenzen wird ein Ereignis-Listener durch Aufruf von addEventListener() auf das Schieberegler-Kontrollfeld eingerichtet, um alle input-Ereignisse zu empfangen, die auftreten. Diese Ereignisse werden jedes Mal gesendet, wenn sich der Wert des Schiebereglers ändert, selbst wenn der Benutzer ihn nicht mehr bewegt, sodass wir die Textbreite reaktionsschnell anpassen können.

Wenn ein "input"-Ereignis auftritt, rufen wir newValueSpecifiedUnits() auf, um den Wert von textLength auf den neuen Wert des Schiebereglers festzulegen, wobei der SVGLength-Schnittstelle der Typ SVG_LENGTHTYPE_PX verwendet wird, um anzugeben, dass der Wert Pixel repräsentiert. Beachten Sie, dass wir in textLength eintauchen müssen, um seine baseVal-Eigenschaft zu erhalten; textLength wird als SVGLength-Objekt gespeichert, sodass wir es nicht wie eine einfache Zahl behandeln können.

Nachdem die Textbreite aktualisiert wurde, wird der Inhalt des widthDisplay-Felds ebenfalls mit dem neuen Wert aktualisiert, und wir sind fertig.

Ergebnis

So sieht das Beispiel aus. Versuchen Sie, den Schieberegler zu ziehen, um ein Gefühl dafür zu bekommen, was er bewirkt.

Spezifikationen

Specification
Scalable Vector Graphics (SVG) 2
# TextElementTextLengthAttribute

Browser-Kompatibilität

svg.elements.text.textLength

svg.elements.textPath.textLength

svg.elements.tspan.textLength

Siehe auch