← ← ← 5/16/2023, 1:38:30 PM | Posted by: Felippe Regazio
Pois é, vc pode assinar Objetos CSS (CSS in JS) nativamente em JS utilizando:
Object.assign(element.style, <StyleObject>);
Ou seja, vc pode extender a propriedade style de qualquer elemento JS e essa propriedade será espelhada para o atributo style da tag. É melhor do que fazer ligação direta via element.style = '...'
rs. Ex:
// div sem estilo <div></div>
const div = document.createElement('div');
// estilizando a div
Object.assign(div.style, {
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
});
// pronto, atribuimos novos valores a interface
// CSSStyleDeclaration que se refletirá em estilo na div:
console.log(div);
// <div style="display: flex; align-items: center; justify-content: center">
Porém se vc fizer atribuição direta de um objeto, não vai funcionar
// criando uma div qualquer
// <div></div>
const div = document.createElement('div');
// Isso NÃO vai funcionar
div.style = {
display: 'flex',
alignItems: 'center',
justifyContent: 'center'
};
// a saída seria <div></div>
console.log(div);
Isso tem uma explicação bacana: a propriedade "style" dos elementos é um objeto com uma interface CSSStyleDeclaration
.
Usando o Object.assign
vc extende o ObjectStyle de forma elegante e segura sem sobre-escrever a interface, ao invés de fazer override pra uma string com element.style = '...'
.
Quando vc faz element.style="display: flex"
vc faz o override da interface de style pra uma string que será diretamente refletida no estilo. E quando vc faz element.style = {...}
vc faz o override da interface de style para um objeto simples que não será traduzido para o atributo style.
Vide bula: MDN: HTMLElement: style property.