Made with modern web features
This site intentionally uses modern web platform features to showcase them, and because I trust my audience to use auto-updating browsers.
Baseline describes web platform features that work across the core browser set. For this page, any Baseline browser released after should support every feature listed here.
- Container style queries
-
Baseline since:
Fallback: Author-provided — Unsupported browsers ignore the query block, so the default styles must be authored as the fallback. See also.
Example
Viewport tokens such as --viewport: tablet and --viewport: narrow are queried by layout and card styles.
:root { --viewport: desktop; @media (max-width: 900px) { --viewport: tablet; } } @container style(--viewport: tablet) { .box { width: var(--width-panel-tablet); } } - Custom highlights
-
Baseline since:
Fallback: Progressive enhancement — Code remains readable if CSS.highlights or ::highlight() is ignored; only syntax coloring is lost.
Example
MicroLighter registers syntax-token ranges with the CSS Custom Highlight API and the site themes those highlight names without wrapping source code in extra spans.
::highlight(keyword) { color: var(--color-syntax-highlighting-keyword); } ::highlight(string) { color: var(--color-syntax-highlighting-string); } - Popover
-
Baseline since:
Fallback: Polyfillable — Unsupported browsers need JavaScript to emulate show, hide, focus, and backdrop behavior; otherwise popover content may appear inline. See also.
Example
Collection counters expose their detail panel as a native popover so it can enter the top layer and light-dismiss.
<div id="collection-stats-talks" popover> <h2>Talks</h2> <p>42 counted talks.</p> </div> - light-dark()
-
Baseline since:
Fallback: Author-provided — Unsupported browsers drop declarations using the unknown color function, so fallback color declarations are needed. See also.
Example
Design tokens select light and dark theme values directly in CSS.
:root { color-scheme: light dark; --color-background: light-dark(#ffffff, #111111); --color-text: light-dark(#555555, #f1f3f5); } - text-wrap: balance
-
Baseline since:
Fallback: Progressive enhancement — Unsupported browsers ignore the declaration and fall back to default text wrapping. See also.
Example
Home-page headings use balanced wrapping to avoid awkward short final lines.
.home-hero h1 { text-wrap: balance; } - :has()
-
Baseline since:
Fallback: Author-provided — Our usage only improves code-block styling; the base code styles are authored as the fallback for unsupported browsers. See also.
Example
Code-block styling targets pre elements that contain language-marked code.
pre:has(> code[class*="language-"]) { background-color: var(--color-code-background); overflow: auto; } - CSS nesting
-
Baseline since:
Fallback: Build-time transform — Build tools can flatten nested CSS to equivalent unnested rules. See also.
Example
Viewport token media queries are nested inside :root, keeping token defaults and overrides together.
:root { --viewport: desktop; @media (max-width: 900px) { --viewport: tablet; } } - Import maps
-
Baseline since:
Fallback: Polyfillable — Browsers without import maps need a loader or build step that rewrites bare module specifiers to URLs. See also.
Example
The site maps bare module specifiers to generated asset URLs, then imports those modules by name.
<script type="importmap"> { "imports": { "microlighter": "/assets/vendor/microlighter/microlighter.js", "scroll-to-top-element": "/assets/elements/ScrollToTopElement.mjs", "secret-email-button-element": "/assets/elements/SecretEmailButtonElement.mjs" } } </script> <script type="module"> import "microlighter"; import "scroll-to-top-element"; import "secret-email-button-element"; </script> - Small, large, and dynamic viewport units
-
Baseline since:
Fallback: Author-provided — Unsupported browsers drop dvw and dvh declarations unless separate viewport-unit fallbacks are authored.
Example
Popovers are capped against the dynamic viewport so they fit mobile browser UI changes.
.collection-stats-popover { max-width: min(34rem, calc(100dvw - 2rem)); max-height: min(28rem, calc(100dvh - 2rem)); } - Cascade layers
-
Baseline since:
Fallback: Build-time transform — A build step can order and flatten layers for older browsers. Without that transform, unsupported browsers ignore layered rules. See also.
Example
The CSS bundle is organized into theme, base, layout, block, page, and utility layers.
@layer argh.theme, argh.base, argh.layout, argh.blocks, argh.pages, argh.utilities; @layer argh.blocks { .nav-item { display: flex; } } - color-scheme
-
Baseline since:
Fallback: Progressive enhancement — Unsupported browsers keep their default control and browser chrome colors. See also.
Example
The document advertises support for light and dark form controls and browser chrome.
<meta name="color-scheme" content="light dark">Example
CSS also opts the page into both schemes for built-in controls and system colors.
:root { color-scheme: light dark; } - Logical properties
-
Baseline since:
Fallback: Author-provided — Unsupported browsers drop logical declarations, so physical-property fallbacks are needed where the spacing or sizing is essential. See also.
Example
Home-page sections use block-axis padding and borders so spacing follows the document writing mode.
.home-section { padding-block: var(--space-2xl); border-block: var(--border-width) solid var(--color-border); } - Autonomous custom elements
-
Baseline since:
Fallback: Polyfillable — Unsupported browsers can use a JavaScript polyfill; without it, these custom elements wrap ordinary HTML and the page remains usable when they are not upgraded. See also.
Example
The scroll-to-top control is a <scroll-to-top> custom element.
<scroll-to-top></scroll-to-top> <script type="module"> class ScrollToTop extends HTMLElement { connectedCallback() { this.innerHTML = `<button type="button">Top</button>`; } } customElements.define("scroll-to-top", ScrollToTop); </script>