This section contains an overview of web technologies I have designed, proposed, or significantly influenced.
Each feature includes a complete timeline from proposal to shipping across browsers.
Beyond listing my body of work, I’m hoping it can provide insight into the process and timeline of how the Web evolves.
This does not incude any of my high level web architecture work as a W3C TAG member,
spread across two areas:
a) design reviews of web technology proposals,
and
b) documenting Design Principles for the Web Platform,
an effort I took the lead on since my early days as a TAG member.
Index (27 proposals)
Status | Description |
---|---|
Baseline | The feature has been shipped in all major browsers. |
Shipped | The feature has shipped in one or more major browsers, but not all.
0 proposals |
Developer Trial | The feature has only shipped in browsers behind a flag.
1 proposal |
In spec | The feature has been added to the official specification (by me or someone else). Keep in mind that often additional fleshing out may be needed to bring the spec to a state that it can be implemented in browsers. |
Accepted | There a resolution that there is Working Group consesnsus to work on the feature, but it has not yet been added to the specification. |
Proposal | The feature does not yet have WG consensus. |
Relaxed CSS Nesting Syntax Baseline
Drove several milestones to progressively refine and simplify the syntax in a way that prioritizes user needs
by reducing boilerplate and thus inreasing efficiency, readability, and reducing error-proneness.
Interim syntax Superseded
This was a proposal for a simplified CSS nesting syntax
that significantly reduced the use cases that had to explicitly include a nesting selector (
&
).
It was also fully compatible with the North Star syntax, and basically got us halfway there.
Originally known as “Lea’s proposal”, and later as “Option 3” due to its position in the pros & cons table.
Proposal
3
m
Accepted
3
m
Shipped
4
m
In spec
- Proposal
- WG Resolution
- Specced (by Tab & Adam)
- Shipped in Chrome 112
- Shipped in Safari 16.5
North Star CSS Nesting Syntax Baseline
This was the ideal syntax where the nesting selector (
&
) is only needed to express user intent,
and never for technical reasons.
We knew all along that this was the ideal syntax, but for many years it was considered infeasible.
Proposal
6
m
Accepted
3
w
In spec
3
m
Shipped
4
m
Baseline
- Proposal
- Feasibility confirmed for Chrome (by andruud)
- WG Resolution
- Specced (by Tab)
- Shipped in Firefox 117
- Shipped in Chrome 120
- Shipped in Safari 17.2
Relative Colors (RCS) Baseline
Adds the capability of creating new colors by tweaking the components of existing colors in any color space,
to facilitate dynamic design systems that generate several hues and tints from a few input colors.
Proposal
8
m
Accepted
7
m
In spec
3
y
Shipped
1
y
3
m
Baseline
- Proposal
- WG Resolution
- Specced
- Shipped in Safari 16.4
- Shipped in Chrome 118
- Shipped in Chrome 119
- Interop 2024 focus area
- Shipped in Firefox 128
Conical gradients Baseline
Conical gradients are a type of gradient that allows for smooth color transitions around a center point.
Possibly my earliest proposal that actually got implemented in browsers.
Proposal
8
m
In spec
7
y
Shipped
2
y
Baseline
- Proposal
- Specced
- Refined spec and integrated to CSS Images (by Tab)
- Polyfill
- Shipped in Chrome 69
- Shipped in Safari 12.1
- Shipped in Firefox 83
Decouple selector logic from specificity (:where()
)
Baseline
Traditionally, CSS included a heuristic that inferred selector importance from its querying logic.
Often this inference was wrong, and authors had little recourse, giving rise to patterns like BEM
that avoided the issue by giving up on most querying logic altogether.
:where()
was a new pseudo-class that allows
CSS authors to include querying criteria in their selectors without affecting specificity (the selector score that determines precedence),
decoupling the two.
Proposal
7
m
Accepted
3
y
Shipped
7
m
Baseline
- Proposal
- WG Resolution
- Naming resolution
- Shipped in Firefox 78
- Shipped in Safari 14
- Shipped in Chrome 88
CSS Trigonometric functions Baseline
Adds trigonometric functions to CSS, to facilitate the creation of complex shapes and animations.
Proposal
1
y
Accepted
4
w
In spec
3
y
Shipped
1
y
Baseline
- Proposal
- WG Resolution
- Specced (by Tab)
- Shipped in Safari 15.4
- Shipped in Firefox 108
- Shipped in Chrome 111
Auto-size text fields and dropdowns Developer Trial
A way to specify that form elements should be sized by their input value.
This is a big pain point for authors, as it is very commonly needed
and quite tricky to implement manually.
Proposal
1
y
3
m
In spec
3
d
Developer Trial
-
Initial proposal for
<textarea>
(by Ian Kilpatrick) -
Proposal to extend to
<input>
and<select>
- Specced (by Florian & Kent Tamura)
- Shipped in Chrome 119
- Shipped in Chrome 123
CSS-wide syntax for color interpolation Baseline
Defined the syntax used across CSS to specify how color interpolate.
It is currently used in
color-mix()
and gradients, and soon in transitions, animations, and more.
- Specced
Use OKLab for gradient color interpolation by default In spec
Proposal
5
m
Accepted
3
m
In spec
- Proposal
- WG Resolution
- Specced (by Chris Lilley)
caret-color
Baseline
caret-color
is a property that allows authors to customize the color of the text input caret.
Proposal
3
y
Accepted
2
y
Shipped
1
y
1
m
Baseline
- Proposal
- WG Resolution
- Shipped in Chrome 57
- Shipped in Firefox 53
- Shipped in Safari 11.1
Relaxed box-shadow
syntax
Baseline
One of my first web standards proposals.
Relaxed the syntax of
box-shadow
to minimize author errors.
Gave birth to one of CSS’s design principles, which Elika called “Lea Verou reordering principle”.
- Proposal
Color API In spec
A proposal for a
Color
object API for the web platform.
The purpose is twofold: to give APIs a way to represent color inputs and outputs that does not depend on strings, and to give authors a way to manipulate colors.
In spec
2
m
Accepted
- Proposal
- WG Resolution
- Initial spec draft (by me & Chris Lilley)
contrast-color()
MVP
In spec
Automatically generating contrasting colors is a big author pain point, but discussusions around fleshing out a full
contrast-color()
function were taking too long.
I proposed an MVP that would cover the most common use cases, and got it accepted.
While I did not initially propose contrast-color()
, I drove aggressively reducing scope to facilitate shipping an MVP that would cover >80% of use cases.
Proposal
6
m
In spec
- Proposal
- Tweak (by Tab & Nicole)
- Specced
Inline if()
MVP
Accepted
An inline
if()
function that will allow branching based on custom property values, media queries, and supports conditions, on the element itself, allowing web components to implement higher level CSS properties.
Proposal
3
m
Accepted
- Proposal
- WG Resolution
Simplified :local-link
Accepted
This addresses the common author pain point of styling links to the current page (e.g. in a navigation menu)
in a different way.
It built on an existing proposal that had been removed,
but simplified it to cover the most common use cases without the complexity of the previous proposal.
Proposal
1
m
Accepted
- Proposal
- WG Resolution
- Specced (by Elika)
Continuous image borders Accepted
Address a common pain point by adding a
border-area
keyword to background-clip
Proposal
4
m
Accepted
- Proposal
- WG Resolution
Arbitrary rounded polygons Accepted
This proposal allows authors to add rounding to arbitrary polygon shapes, addressing a common pain point that previously required pre-generated images
Proposal
3
w
Accepted
- Proposal
- WG Resolution
Value clamping in one direction In spec
…by allowing
none
values for clamp()
Proposal
2
m
Accepted
3
w
In spec
- Proposal
- WG Resolution
- Specced (by Tab)
Multi-color borders via stripes()
In spec
This is a reusable primitive that was designed to allow borders of multiple colors,
something that was requested by accessiblity groups.
Proposal
3
m
Accepted
5
y
In spec
- Proposal
- WG Resolution
- Specced (by Sebastian)
Tooltip styling (::tooltip
)
Accepted
Styling tooltips in a custom way is a huge author pain point.
Since browser-generated tooltips cannot be styled, authors end up having to recreate the tooltip functionality entirely from scratch,
with significantly worse DX and accessibility.
This proposal would allow browser-generated tooltips to be styled in a limited way.
Proposal
1
m
Accepted
- Proposal
- WG Resolution
Reading parent values of arbitrary CSS properties via inherit()
Accepted
Allow authors to read arbitary properties from their parent and use them in calculations, solving several diverse use cases at once.
Proposal
3
y
Accepted
- Proposal
- WG Resolution
- Second WG resolution (naming & MVP)
@image
Accepted
A new at-rule to define and manipulate images in CSS, solving several image-related pain points at once.
Proposal
1
y
1
m
Accepted
- Proposal
- WG Resolution
color-extract()
Accepted
A function to extract individual color components (e.g. lightness) from an arbitrary CSS color, facilitating the creation of dynamic design systems.
Proposal
3
d
Accepted
- Proposal
- WG Resolution
Conditionless container queries Accepted
Make the query part of container queries optional.
Proposal
3
m
Accepted
- Proposal
- WG Resolution
CSS Variable Groups Proposal
A way to group related variables and pass them around, to make it less painful to write CSS for design systems and to integrate third-party components.
- Proposal
CSS Color Scales Proposal
A way to define continuous color scales in CSS and pick arbitrary colors on them, to facilitate the creation of dynamic design systems.
- Proposal
Improve DX of element reference attributes by allowing relative references instead of only ids Proposal
An attempt to improve usability of HTML across several APIs by improving the ergonomics of how an element can reference another.
- Proposal
Custom attributes Proposal
An ambitious attempt to solve several web components pain points at once
- Original proposal (naming only)
- Proposal