adoptStyles / adoptSheetText

Injeta CSS num Shadow DOM, preferindo as Constructable Stylesheets: um mesmo CSS é analisado uma única vez e depois compartilhado por referência entre todas as instâncias do componente, de modo que mil instâncias continuam tendo um único resultado analisado. Onde elas não existem, ambas recorrem a injetar uma tag <style>.

As duas são seguras no servidor (retornam de imediato quando não há document) e idempotentes.

Uso

import css from './index.less?inline';
import { adoptStyles } from 'ranuts/utils';

class MyElement extends HTMLElement {
  constructor() {
    super();
    const root = this.shadowRoot || this.attachShadow({ mode: 'closed' });
    adoptStyles(root, css);
  }
}

API

adoptStyles

Para os estilos estáticos de um componente. O caminho alternativo evita repetição por raiz: um shadow root guarda exatamente uma tag <style> marcada, e quem escreve primeiro fica. Os estilos estáticos de um componente devem existir uma vez por raiz, então uma segunda chamada significa que quem chamou errou.

Parâmetros

Parâmetro Descrição Tipo Padrão
shadowRoot O shadow root de destino ShadowRoot Obrigatório
cssText O texto do estilo string Obrigatório
marker Atributo que marca a tag <style> alternativa string 'data-adopted-style'

Retorna

Sem valor de retorno (void)

adoptSheetText

Para os estilos dinâmicos que chegam em tempo de execução (a propriedade sheet de um componente, por exemplo). A única diferença em relação a adoptStyles é sobre o que o caminho alternativo evita repetição: aqui é o cssText, então uma mesma raiz pode empilhar várias folhas dinâmicas distintas, enquanto uma idêntica é injetada só uma vez.

Parâmetros

Parâmetro Descrição Tipo Padrão
shadowRoot O shadow root de destino ShadowRoot Obrigatório
cssText O texto do estilo string Obrigatório
marker Atributo que marca a tag <style> alternativa string 'data-adopted-sheet'

Retorna

Sem valor de retorno (void)

Constantes

Nome Valor Significado
ADOPTED_STYLE_MARKER 'data-adopted-style' Marca padrão da tag alternativa de adoptStyles
ADOPTED_SHEET_MARKER 'data-adopted-sheet' Marca padrão da tag alternativa de adoptSheetText

O parâmetro marker existe para que uma biblioteca possa assinar os estilos que injeta e reencontrá-los depois. O ranui, por exemplo, passa data-ranui e data-ranui-sheet.