Skip to content

Expressive vs standard ​

One option decides which Material 3 the site speaks:

ts
themeConfig: { md3: { style: "expressive" } } // or "standard"

Flip it right here with the switch in the top bar — this site ships both.

At a glance ​

ExpressiveStandard
Colour schemeexpressive, 2025 spectonal-spot, 2021 spec
SurfacesTinted toward the seedNear-neutral
Cards28px corners12px corners
Callouts20px corners12px corners
Code blocks16px corners12px corners
ButtonsPill, squash to 12px when pressedPill
Spatial motionSprings with visible overshootNear-critically damped springs
Display typeWeight 720, wider (Roboto Flex wdth 118)Weight 400, normal width
HeadlinesWeight 640Weight 500
DecorationCookie, clover and sun shapes on icons, avatars, headingsCircles and rounded squares
Loading indicatorWavyFlat

What stays the same ​

Both styles share the same seed, the same contrast guarantees, the same layout and every default-theme feature. Switching style never moves content; it changes how the same content feels.

Which one to pick ​

  • Expressive for anything product-facing — a project's front door, where personality helps people remember it. This is the vaam-apps default.
  • Standard for reference-heavy sites read for hours at a time — an API reference, a runbook — where calmer surfaces and quieter motion get out of the way.

In your own CSS ​

The difference is mostly carried by tokens, so your own components follow the style without knowing about it:

css
.my-card {
  border-radius: var(--md-sys-shape-card); /* 12px or 28px */
  transition: transform var(--md-sys-motion-spring-spatial-default-duration)
    var(--md-sys-motion-spring-spatial-default);
}

For the occasional thing only one style should do, the <html> element carries the active style:

css
:root[data-md3-style="expressive"] .my-card:hover {
  transform: rotate(-2deg);
}

In a Vue component, useMd3() gives you the same thing reactively:

vue
<script setup lang="ts">
import { useMd3 } from "@vaam-apps/vitepress-md3";

const { style, isExpressive } = useMd3();
</script>

Released under the MIT License.