HTML Evolution: Key Tags from 1990 to HTML5
Blink28628 Aug 2025

HTML Evolution: Key Tags from 1990 to HTML5

This document outlines the chronological evolution of HTML tags and CSS features from the web's inception in 1991 to 2024. It tracks the introduction, purpose, and eventual fate of various elements, illustrating HTML's growth from a basic set of 18 tags to over 140 elements, alongside CSS's development from simple style rules to robust layout systems. The overview highlights foundational tags that have endured, such as

Avsnitt(391)

blink::PaintChunk and blink::DisplayItemList

blink::PaintChunk and blink::DisplayItemList

grouping and content. PaintChunk: groups sequential display items that share the same property‑tree state and cull/visibility; it’s the unit we layerize and invalidate.DisplayItemList: the recorded Skia/paint operations (text, images, paths, etc.). This split lets us reason about “where/how to draw” (chunk) vs. “what to draw” (items). (Chromium Git Repositories)Hands off to: PaintArtifactCompositor for compositing decisions, then PropertyTreeManager to mirror trees into cc.

10 Okt 202537min

blink::PaintArtifact

blink::PaintArtifact

the immutable “what to draw” package for this frame. A PaintArtifact is the product of Blink painting: a DisplayItemList plus an ordered vector of PaintChunks. It is immutable post‑creation and designed for reuse (granular caching at item/chunk level) across frames. (Chromium Git Repositories)Notable API/fieldsconst DisplayItemList& GetDisplayItemList() const;const PaintChunks& GetPaintChunks() const; — the input that compositing consumes. (Chromium Git Repositories)Hands off to: PaintArtifactCompositor.

10 Okt 202531min

blink::PaintController

blink::PaintController

builds the display list + paint chunks and manages caching. As painters call into GraphicsContext, they also drive a PaintController which groups drawing into display items and paint chunks (each keyed by the current property‑tree state). It also handles reuse of cached items to avoid repaint when nothing visually changed. Output is an immutable PaintArtifact. (Chromium Git Repositories)Key fieldsPaintArtifact* new_paint_artifact_ — being built for this frame;PaintArtifact* old_paint_artifact_ — previous frame for cache matching;PaintChunker paint_chunker_ — forms chunk boundaries based on property state;PaintControllerPersistentData* persistent_data_ — holds prior artifact & subsequences. (Chromium Git Repositories)Most important methodsUpdateCurrentPaintChunkProperties(const PropertyTreeStateOrAlias&) — starts/updates the current chunk when property state changes. (Chromium Git Repositories)template <class T> CreateAndAppend(...) — appends a display item (records drawing op + metadata). (Chromium Git Repositories)bool UseCachedItemIfPossible(...) — reuses prior items to skip repaints. (Chromium Git Repositories)void BeginFrame(const void* frame) / FrameFirstPaint EndFrame(const void* frame) — delimit a painting pass for metrics + cache book‑keeping. (Chromium Git Repositories)(Internals also maintain id→index maps to support O(1)/linear cache lookups.) (Chromium Git Repositories)Hands off to: the PaintArtifact it produces.

10 Okt 202529min

blink::GraphicsContext

blink::GraphicsContext

immediate drawing API that records to a display list. Painters for layout objects use GraphicsContext to “draw”—but in modern Blink those calls get recorded into a display list (PaintRecord) backed by Skia commands. This recording is scoped and batched between BeginRecording(...)/EndRecording(). (Chromium Git Repositories)Key methods (how display items get their pixels)Recording: BeginRecording(const FloatRect&) → sk_sp<PaintRecord> EndRecording() — wraps a run of drawing commands for later replay. (Chromium Git Repositories)Draw ops (representative): DrawRect, DrawImage(...), DrawText(...), BeginLayer/EndLayer — the stuff that becomes Skia ops inside display items. (Chromium Git Repositories)Important fieldscc::PaintCanvas* canvas_ (owned by recorder), PaintRecorder paint_recorder_ — actual recording guts;float device_scale_factor_, state stacks/flags — needed for correct pixel snapping/appearance. (Chromium Git Repositories)Hands off to: PaintController, which packages these recorded ops into chunks/items.

10 Okt 202544min

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

blink::TransformPaintPropertyNode / ClipPaintPropertyNode / EffectPaintPropertyNode / ScrollPaintPropertyNode

These are the nodes within those four trees. Every piece of painted content (a “paint chunk”) is associated with a tuple of (Transform, Clip, Effect, Scroll) nodes—its PropertyTreeState. This precisely defines where and how to draw it and enables efficient partial updates. (Chromium Git Repositories)What they carry (high‑value fields)Transform: a 4×4 matrix, a 3‑D transform origin, and flags like “flattens” (affects 3D→2D projection). (Chromium Git Repositories)Clip: clip rect (possibly rounded), optional clip path, and the associated transform space. (Chromium Git Repositories)Effect: opacity, blend mode, filters, masks—i.e., how content is composited into what’s beneath. (Chromium Git Repositories)Scroll: the scroll translation (and identity info) that ties content to a scroller. (Chromium Git Repositories)Change tracking Nodes track change types (PaintPropertyChangeType) so we can choose fast paths (e.g., update value without rebuilding topology). (Chromium Git Repositories)Hands off to: painting/recording with GraphicsContext + PaintController.

10 Okt 202533min

blink::PaintPropertyTreeBuilder

blink::PaintPropertyTreeBuilder

builds/updates paint property trees.Consumes the layout/fragment data and produces the four paint property trees (Transform, Clip, Effect, Scroll) for the current frame. These trees encode coordinate systems, clipping, visual effects, and scrolling in a way that can be reused across frames and mapped into cc. (Chromium Git Repositories)Key idea
It decides when nodes change values vs. structure (important for fast paths like “directly update compositor node”), and prepares the property state used to key paint chunks later. (Chromium Git Repositories)Hands off to: the actual recording of display items with property‑tree state.

10 Okt 202547min

blink::PrePaintTreeWalk

blink::PrePaintTreeWalk

cross‑frame pre‑paint traversal. Runs in the InPrePaint lifecycle phase. Walks the entire layout tree starting at the root LocalFrameView, updating paint invalidation state and computing the context needed by the tree‑building step (e.g., event‑handler flags, fragmentation context, containers for out‑of‑flow). (Chromium Git Repositories)Key types & fields* void WalkTree(LocalFrameView& root_frame) — entry to pre‑paint traversal. (Chromium Git Repositories)* struct PrePaintTreeWalkContext — per‑walk state (e.g., paint_invalidator_context, inside_blocking_touch_event_handler, fragmentation containers). These flags determine whether descendants need updates. (Chromium Git Repositories)Hands off to: PaintPropertyTreeBuilder and then painting.

10 Okt 202531min

blink::NGPhysicalFragment and friends

blink::NGPhysicalFragment and friends

Layout takes the styled DOM and produces a fragment tree of positioned boxes. In modern Blink this is LayoutNG; the core artifact is NGPhysicalFragment, which stores geometry and is used downstream for pre‑paint (e.g., to compute clips, overflow, and hit regions). (Chromium Git Repositories)Representative APIs
Geometry/ink overflow helpers and accessors on NGPhysicalFragment expose the post‑layout shape of the page that pre‑paint/paint will consume. (See header for geometry utilities.) (Chromium Git Repositories)Hands off to: PrePaintTreeWalk (to build/refresh property trees and invalidations over the laid‑out fragments).

10 Okt 202537min

Populärt inom Teknik

uppgang-och-fall
elbilsveckan
market-makers
rss-elektrikerpodden
natets-morka-sida
bilar-med-sladd
skogsforum-podcast
rss-laddstationen-med-elbilen-i-sverige
gubbar-som-tjotar-om-bilar
rss-uppgang-och-fall
rss-technokratin
bosse-bildoktorn-och-hasse-p
developers-mer-an-bara-kod
bli-saker-podden
hej-bruksbil
rss-it-sakerhetspodden
rss-veckans-ai
rss-heja-framtiden
rss-sogeti-sweden-podcasts
rss-milpodden