文字長度
textLength 屬性,適用於 SVG 的 <text> 和 <tspan> 元素,可讓您指定文字繪製所佔用的空間寬度。使用者代理將確保文字不會超出該距離,並使用 lengthAdjust 屬性指定的方法來執行此操作。預設情況下,僅調整字元之間的間距,但如果您更改 lengthAdjust,還可以調整字形大小。
透過使用 textLength,您可以確保您的 SVG 文字以相同的寬度顯示,無論網路字型載入失敗(或尚未載入)等情況如何。
你可以將此屬性與以下 SVG 元素一起使用
示例
<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>
用法說明
| 值 |
<length-percentage> | <number> |
|---|---|
| 預設值 | None |
| 可動畫的 | 是 |
<length-percentage>-
此值指定文字將調整為佔據的空間寬度,可以是絕對長度或百分比。
<number>-
數值指定了相對於當前座標系單位的長度。
互動式示例
本示例展示了可以透過一個型別為 "range" 的 <input> 元素來調整大小的文字。
CSS
.controls {
font:
16px "Open Sans",
"Arial",
sans-serif;
}
SVG
讓我們從 SVG 開始。它非常基礎,在一個 1000x300 畫素的空間中對映到一個 10 釐米 x 3 釐米的框。
<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>
首先,使用 <rect> 元素建立並描邊一個矩形來容納文字。然後使用 <text> 建立文字元素本身,其 id 為 "hello"。
HTML
HTML 包含兩個顯示元素,它們都包含在一個分組的 <div> 中。
<div class="controls">
<input type="range" id="widthSlider" min="80" max="978" />
<span id="widthDisplay"></span>
</div>
型別為 "range" 的 <input> 元素用於建立使用者將用來改變文字寬度的滑塊控制元件。提供了一個 ID 為 "widthDisplay" 的 <span> 元素來顯示當前的寬度值。
JavaScript
最後,讓我們看看 JavaScript 程式碼。它首先使用 Document.getElementById() 來儲存它需要訪問的元素的引用。
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;
});
widthSlider.dispatchEvent(new Event("input"));
獲取元素引用後,透過在滑塊控制元件上呼叫 addEventListener() 來建立一個事件監聽器,以接收發生的任何 input 事件。每當滑塊的值發生變化時,這些事件都會被髮送,即使使用者還沒有停止移動它,這樣我們就可以響應式地調整文字寬度。
當發生 "input" 事件時,我們呼叫 newValueSpecifiedUnits(),使用 SVGLength 介面的 SVG_LENGTHTYPE_PX 單位型別來指示該值代表畫素,將 textLength 的值設定為滑塊的新值。請注意,我們必須深入到 textLength 來獲取其 baseVal 屬性;textLength 儲存為一個 SVGLength 物件,所以我們不能將其視為普通數字。
更新文字寬度後,widthDisplay 框的內容也會用新值進行更新,我們就完成了。
結果
這是示例的樣子。嘗試拖動滑塊來感受它的作用。
規範
| 規範 |
|---|
| Scalable Vector Graphics (SVG) 2 # TextElementTextLengthAttribute |
瀏覽器相容性
svg.elements.text.textLength
載入中…
svg.elements.textPath.textLength
載入中…
svg.elements.tspan.textLength
載入中…