Sign Up

Sign Up to our social questions and Answers Engine to ask questions, answer people’s questions, and connect with other people.

Have an account? Sign In

Have an account? Sign In Now

Sign In

Login to our social questions & Answers Engine to ask questions answer people’s questions & connect with other people.

Sign Up Here

Forgot Password?

Don't have account, Sign Up Here

Forgot Password

Lost your password? Please enter your email address. You will receive a link and will create a new password via email.

Have an account? Sign In Now

Sorry, you do not have permission to ask a question, You must login to ask a question.

Forgot Password?

Need An Account, Sign Up Here

Please type your username.

Please type your E-Mail.

Please choose an appropriate title for the post.

Please choose the appropriate section so your post can be easily searched.

Please choose suitable Keywords Ex: post, video.

Browse

Need An Account, Sign Up Here

Please briefly explain why you feel this question should be reported.

Please briefly explain why you feel this answer should be reported.

Please briefly explain why you feel this user should be reported.

Sign InSign Up

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Logo

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Navigation

  • Home
  • About Us
  • Contact Us
Search
Ask A Question

Mobile menu

Close
Ask a Question
  • Home
  • About Us
  • Contact Us
Home/ Questions/Q 1605

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise Latest Questions

Author
  • 62k
Author
Asked: November 25, 20242024-11-25T09:42:06+00:00 2024-11-25T09:42:06+00:00

Entendendo renderização no browser: CSSOM

  • 62k

Hey, esse artigo faz parte de uma série sobre renderização no browser. Se você ainda não leu os artigos passados, da uma conferida nos links abaixo:

  • Entendendo renderização no browser: DOM

No último artigo, exploramos como o HTML é processado pelo navegador através da DOM (Document Object Model), que define a estrutura da página web. Porém, uma página web não é feita apenas de HTML e algo que muitos ainda não sabem é que o CSS também possui sua própria representação em forma de objeto, chamada CSSOM (CSS Object Model).

O navegador utiliza a CSSOM em conjunto com a DOM para construir a página, combinando estrutura (HTML) e estilos (CSS), resultando em uma apresentação visual harmoniosa.

Neste artigo, vamos aprofundar nosso conhecimento sobre a CSSOM, entendendo sua estrutura, importância e como ela pode ser manipulada.

O que é o CSSOM?

Assim como a DOM, o CSSOM é uma estrutura de dados hierárquica, mas sua função é representar o CSS de um documento web.

O CSSOM é gerado pelos navegadores após o carregamento e processamento dos arquivos de estilo. Embora seja construído separadamente da DOM, ambos trabalham em conjunto para que o navegador possa montar a página com a estrutura correta (DOM) e aplicar os estilos apropriados (CSSOM).

A principal função do CSSOM é fornecer ao navegador um “mapa” detalhado dos estilos que devem ser aplicados a cada elemento da página.

Veja abaixo uma representação visual do CSSOM:

Representação da árvore CSSOM

No código essa representação ficaria assim:

body {   font-size: 16px; }  div {   width: 200px;   height: 100px;   background: blue; }  a {   color: red;   text-decoration: none; }  h1 {   font-weight: bold; } 
Enter fullscreen mode Exit fullscreen mode

E a árvore DOM referente ao CSSOM que vimos anteriormente é representada da seguinte forma:

Representação da árvore DOM

Manipulando o CSSOM

Os navegadores nos fornecem um conjunto de APIs que permitem a manipulação do CSS utilizando javascript. Ela é semelhante a API do DOM, mas para CSS ao invés de HTML.

Com o uso dessa API nós conseguimos ler e manipular o CSS de uma página de forma dinâmica.

A maneira mais simples de você manipular estilos é por meio da propriedade style presente no document.

Para acessar e manipular um elemento do CSSOM pela primeira vez, abra o console do navegador e execute o seguinte código:

document.body.style.background = "gray"; console.log(document.body.style.background); // gray 
Enter fullscreen mode Exit fullscreen mode

Após executar o trecho de código acima recomendo que inspecione os elementos da página e analisem o body. Notem que agora o nosso body tem um estilo inline e vai estar mais ou menos dessa forma:

<body style="background: gray;"></body> 
Enter fullscreen mode Exit fullscreen mode

Isso acontece porque alterar a propriedade style de um elemento só tem efeito para estilos inlines.
A mesma lógica se aplica para leitura de propriedades do style. Se você executar o código abaixo não vai ter nenhum retorno, pois nenhum momento definimos a propriedade color usando estilo inline.

console.log(document.body.style.background); // ''' 
Enter fullscreen mode Exit fullscreen mode

Conseguimos adicionar ou alterar qualquer propriedade CSS da nossa página seguindo sempre o padrão elemento.style.nomeDaProprieda.

Outra forma de manipular os estilos inline são por meio de alguns métodos presentes no style.

  • setProperty: com esse método você consegue adicionar ou altera o valor de uma propriedade inline.
document.body.style.setProperty("background", "red");  // Agora execute o próximo comando  document.body.style.setProperty("background", "blue"); 
Enter fullscreen mode Exit fullscreen mode

  • getPropertyValue: com esse método você consegue acessar o valor de uma propriedade inline.
document.body.style.getPropertyValue("background"); // blue 
Enter fullscreen mode Exit fullscreen mode

  • removeProperty: com esse método você consegue remover uma propriedade inline.
document.body.style.removeProperty("background"); 
Enter fullscreen mode Exit fullscreen mode

O getComputedStyle funciona apenas para leitura. Você conseguirá acessar a informação sobre estilo de qualquer elemento ou pseudo elemento, mas não conseguirá fazer alterações.

E os estilos que não são inlines?

Escrever estilos inline não é algo muito comum, por isso também conseguimos acessar os estilos computados, aquele que definimos na nossa folha de estilo. Para isso podemos acessar e manipular diretamente nossa folha de estilos.

Execute o trecho de código abaixo no console do seu navegador:

document.styleSheets; 
Enter fullscreen mode Exit fullscreen mode

Com ele você vai ter acesso a todas as folhas de estilos declaradas no head do seu html.

Essas folhas de estilos são retornada em formato de lista(parece, mas não é um array) e você pode acessar por meio do índice.

document.styleSheets[1]; 
Enter fullscreen mode Exit fullscreen mode

Daqui em diante recomendo executar os testes em outro local, pois esse blog é feito com tailwind css e a manipulação da folha de estilo fica mais complicada.

Acesse essa página e execute os comando no console dela.

document.styleSheets[0].cssRules; 
Enter fullscreen mode Exit fullscreen mode

Ao executar o código acima você terá acesso a todos o css presentes na folha de estilo. Seguindo a mesma lógica anterior você pode acessar os elementos por meio de índice.

document.styleSheets[0].cssRules[3]; 
Enter fullscreen mode Exit fullscreen mode

No código acima eu estou acessando a declaração de estilo do body da página.

document.styleSheets[0].cssRules[3].style.background = "red"; 
Enter fullscreen mode Exit fullscreen mode

Acessando a propriedade style conseguimos adicionar ou alterar qualquer propriedade CSS, mas sem escrever estilos inlines.

Recomendo que brinque um pouco mais com essa api mudando os índices e alterando o CSS de diversos elementos.

Conclusão

Assim como o DOM o CSSOM é uma representação em forma de arvore utilizada pelos navegadores para o processo de renderização.

Podemos acessar todo o CSS da página e manipulá-lo livremente utilizando javascript. Saber executar esse tipo de operação é essencial para compreender ferramentas de CSS como styled componentes, linária etc.

O conhecimento de base é o mais importante, mas é constantemente negligenciado.
No contexto do desenvolvimento web, conhecer html, css, javascript e como o navegador funciona é essencial. Com essa base sólida, você vai conseguir aprender qualquer tecnologia que derive desses fundamentos.

Muito obrigado!!

Obrigado por ter chegado até aqui!

Espero que tenha aprendido algo novo ao longo dessa leitura.

Até a próxima!

Referências

CSS Object Model

Constructing the Object Model

CSSOM — Modelo de Objeto CSS

An Introduction and Guide to the CSS Object Model (CSSOM)

frontendjavascriptprogrammingwebdev
  • 0 0 Answers
  • 0 Views
  • 0 Followers
  • 0
Share
  • Facebook
  • Report

Leave an answer
Cancel reply

You must login to add an answer.

Forgot Password?

Need An Account, Sign Up Here

Sidebar

Ask A Question

Stats

  • Questions 4k
  • Answers 0
  • Best Answers 0
  • Users 2k
  • Popular
  • Answers
  • Author

    ES6 - A beginners guide - Template Literals

    • 0 Answers
  • Author

    Understanding Higher Order Functions in JavaScript.

    • 0 Answers
  • Author

    Build a custom video chat app with Daily and Vue.js

    • 0 Answers

Top Members

Samantha Carter

Samantha Carter

  • 0 Questions
  • 20 Points
Begginer
Ella Lewis

Ella Lewis

  • 0 Questions
  • 20 Points
Begginer
Isaac Anderson

Isaac Anderson

  • 0 Questions
  • 20 Points
Begginer

Explore

  • Home
  • Add group
  • Groups page
  • Communities
  • Questions
    • New Questions
    • Trending Questions
    • Must read Questions
    • Hot Questions
  • Polls
  • Tags
  • Badges
  • Users
  • Help

Footer

Querify Question Shop: Explore Expert Solutions and Unique Q&A Merchandise

Querify Question Shop: Explore, ask, and connect. Join our vibrant Q&A community today!

About Us

  • About Us
  • Contact Us
  • All Users

Legal Stuff

  • Terms of Use
  • Privacy Policy
  • Cookie Policy

Help

  • Knowledge Base
  • Support

Follow

© 2022 Querify Question. All Rights Reserved

Insert/edit link

Enter the destination URL

Or link to existing content

    No search term specified. Showing recent items. Search or use up and down arrow keys to select an item.