Day 55: HTML Rendering
Tags: typescript, html, 100daysofcode
Published: 2023-09-26 13:30:37


## The Basics of HTML Rendering

### What is HTML Rendering? 🌐

HTML rendering is the process of converting HTML (Hypertext Markup Language) code into a visual representation that users can interact with. It involves several steps, including parsing, rendering, and painting.

🕵️‍♂️ **Parsing HTML**

Parsing is the first step in rendering an HTML page. During parsing, the browser's HTML parser reads the HTML code and creates a Document Object Model (DOM) tree. This tree represents the structure of the HTML document, with each HTML element as a node.

👨‍🎨 **Rendering the DOM**

Once the DOM is constructed, the browser proceeds to render it. This involves determining the layout of elements, their styles, and positioning on the screen. This step results in a Render Tree.

🎨 **Painting**

Painting is the final step in the rendering process. It involves drawing the pixels on the screen based on the information in the Render Tree. This is what users ultimately see as a web page.

## Understanding the Render Tree

Let's dive deeper into the rendering process with a code example. Consider the following HTML:

```html
<!DOCTYPE html>
<html>
<head>
    <title>Render Tree Example</title>
    <link rel="stylesheet" href="styles.css">
</head>
<body>
    <h1>Welcome to the Render Tree!</h1>
    <p>This is a simple example.</p>
</body>
</html>
```

In this updated example, we've added an external stylesheet linked with a `<link>` tag. The stylesheet, `styles.css`, contains CSS rules that apply styles to the HTML elements.

### Building the Render Tree 🌳

- The HTML parser begins by parsing the `<html>` element and its children.
- It constructs the DOM tree, representing the structure of the document.
```
- Document (root)
  - html
    - head
      - title
        - Text: "Render Tree Example"
    - body
      - h1
        - Text: "Welcome to the Render Tree!"
      - p
        - Text: "This is a simple example."
```
- Simultaneously, the browser's CSS engine parses the external stylesheet (`styles.css`) and constructs the CSS Object Model (CSSOM), which contains the CSS rules.
```
- Stylesheet
  - Selector: h1
    - Property: font-size
      - Value: 24px
    - Property: color
      - Value: #333
  - Selector: p
    - Property: font-size
      - Value: 16px
    - Property: color
      - Value: #666
```

- Next, it creates the Render Tree by mapping each node in the DOM tree to the corresponding rendering objects and applying styles from the CSSOM.
```
- RenderDocument (root)
  - RenderHTML
    - RenderHead
      - RenderTitle
        - Text: "Render Tree Example"
    - RenderBody
      - RenderH1
        - Text: "Welcome to the Render Tree!"
        - Styles:
          - font-size: 24px
          - color: #333
      - RenderP
        - Text: "This is a simple example."
        - Styles:
          - font-size: 16px
          - color: #666
```

- The browser calculates the layout and positioning of each rendering object, considering CSS styles and other factors.

- Finally, it paints the pixels on the screen.

## Browser-Specific Rendering Engines

Different browsers use different rendering engines, such as Blink (Chrome), Gecko (Firefox), and WebKit (Safari). These engines may implement the rendering process slightly differently, but the fundamental concepts remain the same.