Skills/Video Composition/CSS Parts Reference

CSS Parts Reference

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.

ef-scrubber

PartDescription
scrubberOuter track container
progressFilled portion indicating current position
handleDraggable circular knob
playheadVertical 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; }

ef-time-display

PartDescription
timeSpan containing the formatted current / duration text
ef-time-display::part(time) { font-family: monospace; color: #aaa; }

ef-workbench

PartDescription
toolbarTop toolbar row with mode indicators and controls
canvasCentral preview area where the composition is rendered

ef-timeline

PartDescription
headerControls row above the tracks (playback, time display, zoom)
tracksScrollable viewport containing all track rows
rulerTime ruler bar along the top of the tracks area
playheadVertical playhead line spanning all tracks

ef-timeline-row

PartDescription
labelRow label area (element name, icon, detail text)
trackRow track area displaying the clip bar

ef-hierarchy

PartDescription
listOuter container wrapping the hierarchy tree
headerOptional header above the tree items

ef-hierarchy-item

PartDescription
rowItem row container (receives data-focused and data-selected attributes)
iconElement-type icon span
labelElement name text span

Combined Example

Style an entire editor theme by targeting parts across multiple elements:

/* Dark coral theme */
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; }

Notes

  • ::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.