Spec-Zone.ru › Web APIs

API живописи CSS

Ограниченная доступность

Эта функция не является базовой, так как она не работает в некоторых из наиболее широко используемых браузеров.

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

Экспериментальная: Это экспериментальная технология
Перед использованием в производстве внимательно проверьте таблицу совместимости браузеров.

API живописи CSS — часть набора API CSS Houdini — позволяет разработчикам писать функции JavaScript, которые могут рисовать непосредственно в фоновом изображении, границе или содержимом элемента.

Концепции и использование

По существу, API живописи CSS содержит функциональность, позволяющую разработчикам создавать пользовательские значения для paint(), функции CSS <image>. Затем вы можете применять эти значения к свойствам, таким как background-image, чтобы установить сложные пользовательские фоны на элементе.

Например:

aside {
  background-image: paint(myPaintedImage);
}

API определяет worklet, который можно использовать для программирования генерации изображения, реагирующего на изменения вычисленного стиля. Чтобы узнать больше о том, как это используется, обратитесь к Использованию API живописи CSS.

Интерфейсы

PaintWorkletGlobalScope

Глобальный контекст выполнения модуля живописи.

PaintRenderingContext2D

Реализует подмножество API CanvasRenderingContext2D. Он имеет выходной растровый бит, размер которого соответствует объекту, в который он рендерится.

PaintSize

Возвращает только для чтения значения ширины и высоты выходного растрового бита.

Примеры

Следующий пример создает список элементов с фоновым изображением, которое вращается между тремя различными цветами и тремя ширинами. В поддерживающем браузере вы увидите что-то вроде изображения ниже.

The width and color of the background image changes based on the custom properties

Для этого мы определим две пользовательские свойства CSS, --boxColor и --widthSubtractor.

Модуль живописи

Модуль — это внешний файл JavaScript (в данном случае мы назвали его boxbg.js), который определяет модуль живописи worklet. Используя модуль, мы можем получить доступ к свойствам CSS (и пользовательским свойствам) элементов:

registerPaint(
  "boxbg",
  class {
    static get contextOptions() {
      return { alpha: true };
    }
    /*
      Retrieve any custom properties (or regular properties,
      such as 'height') defined for the element, and return
      them as an array.
    */
    static get inputProperties() {
      return ["--boxColor", "--widthSubtractor"];
    }

    paint(ctx, size, props) {
      /*
        ctx -> drawing context
        size -> paintSize: width and height
        props -> properties: get() method
      */
      ctx.fillStyle = props.get("--boxColor");
      ctx.fillRect(
        0,
        size.height / 3,
        size.width * 0.4 - props.get("--widthSubtractor"),
        size.height * 0.6,
      );
    }
  },
);

Мы использовали метод inputProperties() в классе registerPaint() для получения значений двух пользовательских свойств, установленных на элементе, которому применено boxbg, и затем использовали эти значения в нашей функции paint(). Метод inputProperties() может вернуть все свойства, влияющие на элемент, а не только пользовательские свойства.

Использование модуля живописи

HTML

<ul>
  <li>item 1</li>
  <li>item 2</li>
  <li>item 3</li>
  <li>item 4</li>
  <li>item 5</li>
  <li>item 6</li>
  <li>item 7</li>
  <li>item 8</li>
  <li>item 9</li>
  <li>item 10</li>
  <li>item N</li>
</ul>

CSS

В нашем CSS мы определяем пользовательские свойства --boxColor и --widthSubtractor.

body {
  font: 1.2em / 1.2 sans-serif;
}
li {
  background-image: paint(boxbg);
  --boxColor: hsl(55 90% 60%);
}

li:nth-of-type(3n) {
  --boxColor: hsl(155 90% 60%);
  --widthSubtractor: 20;
}

li:nth-of-type(3n + 1) {
  --boxColor: hsl(255 90% 60%);
  --widthSubtractor: 40;
}

JavaScript

Настройка и логика модуля живописи находятся во внешнем скрипте. Для регистрации модуля нам нужно вызвать addModule() из нашего основного скрипта:

CSS.paintWorklet.addModule(
  "https://mdn.github.io/houdini-examples/cssPaint/intro/worklets/boxbg.js",
);

В этом примере модуль размещается по адресу https://mdn.github.io/, но ваш модуль может быть относительным ресурсом, как показано ниже:

CSS.paintWorklet.addModule("boxbg.js");

Результат

Хотя вы не можете взаимодействовать со скриптом модуля, вы можете изменять значения пользовательских свойств в DevTools для изменения цветов и ширины фонового изображения.

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

Спецификация
API живописи CSS уровень 1
# paintworkletglobalscope

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

Десктоп Мобильные устройства
Chrome Edge Firefox Opera Safari Chrome Android Firefox для Android Opera Android Safari на iOS Samsung Internet WebView Android
CSS_Painting_API 65 79 Нет 52 Нет 65 Нет 47 Нет 9.0 65
devicePixelRatio 65 79 Нет 52 Нет 65 Нет 47 Нет 9.0 65
registerPaint 65 79 Нет 52 Нет 65 Нет 47 Нет 9.0 65

См. также

  • Использование API живописи CSS
  • API типизированной объектной модели CSS
  • API Houdini

© 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/CSS_Painting_API

Spec-Zone.ru

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