Spec-Zone.ru › Web APIs

TextMetrics

Базовая линия Широко поддерживается *

Эта функция хорошо зарекомендовала себя и работает на многих устройствах и версиях браузеров. Она доступна в браузерах с июля 2015 года.

* Некоторые части этой функции могут иметь различный уровень поддержки.

  • Подробнее
  • Полная совместимость
  • Отправить отзыв

Примечание: Эта функция доступна в Потоках веб-работы.

Интерфейс TextMetrics представляет собой размеры фрагмента текста на холсте; экземпляр TextMetrics можно получить с помощью метода CanvasRenderingContext2D.measureText().

Свойства экземпляра

TextMetrics.width Только для чтения

Возвращает ширину фрагмента инлайнового текста в пикселях CSS. Учитывает текущий шрифт контекста.

TextMetrics.actualBoundingBoxLeft Только для чтения

Расстояние параллельно базовой линии от точки выравнивания, заданной свойством CanvasRenderingContext2D.textAlign, до левой стороны ограничивающего прямоугольника данного текста в пикселях CSS; положительные значения указывают на расстояние влево от заданной точки выравнивания.

TextMetrics.actualBoundingBoxRight Только для чтения

Возвращает расстояние от точки выравнивания, заданной свойством CanvasRenderingContext2D.textAlign, до правой стороны ограничивающего прямоугольника данного текста в пикселях CSS. Расстояние измеряется параллельно базовой линии.

TextMetrics.fontBoundingBoxAscent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной атрибутом CanvasRenderingContext2D.textBaseline, до верхней части самого большого ограничивающего прямоугольника всех шрифтов, используемых для рендеринга текста, в пикселях CSS.

TextMetrics.fontBoundingBoxDescent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной атрибутом CanvasRenderingContext2D.textBaseline, до нижней части ограничивающего прямоугольника всех шрифтов, используемых для рендеринга текста, в пикселях CSS.

TextMetrics.actualBoundingBoxAscent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной атрибутом CanvasRenderingContext2D.textBaseline, до верхней части ограничивающего прямоугольника, используемого для рендеринга текста, в пикселях CSS.

TextMetrics.actualBoundingBoxDescent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной атрибутом CanvasRenderingContext2D.textBaseline, до нижней части ограничивающего прямоугольника, используемого для рендеринга текста, в пикселях CSS.

TextMetrics.emHeightAscent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной свойством CanvasRenderingContext2D.textBaseline, до верхней части квадрата em в блоке строки в пикселях CSS.

TextMetrics.emHeightDescent Только для чтения

Возвращает расстояние от горизонтальной линии, указанной свойством CanvasRenderingContext2D.textBaseline, до нижней части квадрата em в блоке строки в пикселях CSS.

TextMetrics.hangingBaseline Только для чтения

Возвращает расстояние от горизонтальной линии, указанной свойством CanvasRenderingContext2D.textBaseline, до висящей базовой линии блока строки в пикселях CSS.

TextMetrics.alphabeticBaseline Только для чтения

Возвращает расстояние от горизонтальной линии, указанной свойством CanvasRenderingContext2D.textBaseline, до алфавитной базовой линии блока строки в пикселях CSS.

TextMetrics.ideographicBaseline Только для чтения

Возвращает расстояние от горизонтальной линии, указанной свойством CanvasRenderingContext2D.textBaseline, до иероглифической базовой линии блока строки в пикселях CSS.

Примеры

Базовые линии

Этот пример демонстрирует базовые линии, которые содержит объект TextMetrics. Базовая линия по умолчанию — alphabeticBaseline. См. также свойство CanvasRenderingContext2D.textBaseline.

HTML

<canvas id="canvas" width="550" height="500"></canvas>

JavaScript

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");

const baselinesAboveAlphabetic = [
  "fontBoundingBoxAscent",
  "actualBoundingBoxAscent",
  "emHeightAscent",
  "hangingBaseline",
];
const baselinesBelowAlphabetic = [
  "ideographicBaseline",
  "emHeightDescent",
  "actualBoundingBoxDescent",
  "fontBoundingBoxDescent",
];
const baselines = [...baselinesAboveAlphabetic, ...baselinesBelowAlphabetic];
ctx.font = "25px serif";
ctx.strokeStyle = "red";

baselines.forEach((baseline, index) => {
  const text = `Abcdefghijklmnop (${baseline})`;
  const textMetrics = ctx.measureText(text);
  const y = 50 + index * 50;
  ctx.beginPath();
  ctx.fillText(text, 0, y);

  const baselineMetricValue = textMetrics[baseline];
  if (baselineMetricValue === undefined) {
    return;
  }

  const lineY = baselinesBelowAlphabetic.includes(baseline)
    ? y + Math.abs(baselineMetricValue)
    : y - Math.abs(baselineMetricValue);
  ctx.moveTo(0, lineY);
  ctx.lineTo(550, lineY);
  ctx.stroke();
});

Результат

Измерение ширины текста

При измерении направления x фрагмента текста сумма actualBoundingBoxLeft и actualBoundingBoxRight может быть шире, чем ширина инлайнового блока (width), из-за наклонных/курсивных шрифтов, где символы выступают за пределы своей ширины продвижения.

Поэтому для получения более точного значения абсолютной ширины текста полезно использовать сумму actualBoundingBoxLeft и actualBoundingBoxRight.

const canvas = document.getElementById("canvas");
const ctx = canvas.getContext("2d");
const text = "Abcdefghijklmnop";
ctx.font = "italic 50px serif";
const textMetrics = ctx.measureText(text);

console.log(textMetrics.width);
// 459.8833312988281

console.log(
  textMetrics.actualBoundingBoxRight + textMetrics.actualBoundingBoxLeft,
);
// 462.8833333333333

Спецификации

Спецификация
HTML
# textmetrics

Совместимость с браузерами

Рабочий стол Мобильный
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на IOS Samsung Internet WebView Android
TextMetrics 2 12 1.5 9 4 18 31 10.1 3.2 1.0 ≤37
actualBoundingBoxAscent 77 79 74 64 11.1 77 79 55 11.3 12.0 77
actualBoundingBoxDescent 77 79 74 64 11.1 77 79 55 11.3 12.0 77
actualBoundingBoxLeft 77 79 74 64 11.1 77 79 55 11.3 12.0 77
actualBoundingBoxRight 77 79 74 64 11.1 77 79 55 11.3 12.0 77
alphabeticBaseline 118 118 116 104 11.1 118 116 79 11.3 25.0 118
emHeightAscent 77 79 118 64 11.1 77 118 Нет 11.3 Нет Нет
emHeightDescent 77 79 118 64 11.1 77 118 Нет 11.3 Нет Нет
fontBoundingBoxAscent 87 87 116 73 11.1 87 116 62 11.3 14.0 87
fontBoundingBoxDescent 87 87 116 73 11.1 87 116 62 11.3 14.0 87
hangingBaseline 118 118 116 104 11.1 118 116 79 11.3 25.0 118
ideographicBaseline 118 118 116 104 11.1 118 116 79 11.3 25.0 118
width 2 12 1.5 9 4 18 31 10.1 3.2 1.0 4.4

См. также

  • Метод Creator в CanvasRenderingContext2D
  • Элемент <canvas> и связанный интерфейс HTMLCanvasElement

© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/TextMetrics

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API