Editframe elements use Shadow DOM to encapsulate internal markup. Each component exposes named parts via the part attribute, letting you style internals with ::part() CSS selectors without breaking encapsulation.
| Part | Description |
|---|
scrubber | Outer track container |
progress | Filled portion indicating current position |
handle | Draggable circular knob |
playhead | Vertical line at the current time position |
ef-scrubber::part(scrubber) { background: #1a1a2e; border-radius: 4px; }
ef-scrubber::part(progress) { background: #e94560; }
ef-scrubber::part(handle) { background: #e94560; width: 14px; height: 14px; }
| Part | Description |
|---|
time | Span containing the formatted current / duration text |
ef-time-display::part(time) { font-family: monospace; color: #aaa; }
| Part | Description |
|---|
toolbar | Top toolbar row with mode indicators and controls |
canvas | Central preview area where the composition is rendered |
| Part | Description |
|---|
header | Controls row above the tracks (playback, time display, zoom) |
tracks | Scrollable viewport containing all track rows |
ruler | Time ruler bar along the top of the tracks area |
playhead | Vertical playhead line spanning all tracks |
| Part | Description |
|---|
label | Row label area (element name, icon, detail text) |
track | Row track area displaying the clip bar |
| Part | Description |
|---|
list | Outer container wrapping the hierarchy tree |
header | Optional header above the tree items |
| Part | Description |
|---|
row | Item row container (receives data-focused and data-selected attributes) |
icon | Element-type icon span |
label | Element name text span |
Style an entire editor theme by targeting parts across multiple elements:
ef-workbench::part(toolbar) { background: #1a1a2e; }
ef-workbench::part(canvas) { background: #0f0f1a; }
ef-scrubber::part(scrubber) { background: #16213e; height: 6px; }
ef-scrubber::part(progress) { background: #e94560; }
ef-scrubber::part(handle) { background: #e94560; }
ef-timeline::part(header) { background: #16213e; }
ef-timeline::part(ruler) { background: #0f3460; }
ef-timeline::part(playhead) { background: #e94560; }
ef-time-display::part(time) { color: #e94560; font-variant-numeric: tabular-nums; }
ef-hierarchy-item::part(row):hover { background: rgba(255, 255, 255, 0.05); }
ef-hierarchy-item::part(label) { font-size: 0.75rem; }
::part() selectors cannot be chained -- ::part(a)::part(b) is invalid. Style each part independently.
- Parts work inside media queries, container queries, and
:host() selectors.
- For nested shadow roots, use
exportparts on the host to forward inner parts to outer consumers.