Skip to main content

Yoga flexbox layout

Enable flex layout on a <g> with data-dsvg-layout="flex". Nested flex groups compile deepest-first.

Container attributes

AttributeValues
data-dsvg-flex-directionrow, column, row-reverse, column-reverse
data-dsvg-flex-wrapnowrap, wrap, wrap-reverse
data-dsvg-justify-contentflex-start, center, flex-end, space-between, space-around, space-evenly
data-dsvg-align-itemsflex-start, center, flex-end, stretch, baseline
data-dsvg-align-contentflex-start, center, flex-end, stretch, space-between, space-around
data-dsvg-gapfinite number
data-dsvg-row-gapfinite number
data-dsvg-column-gapfinite number
data-dsvg-padding (+ edges)finite number
data-dsvg-width / data-dsvg-heightfinite number

Child attributes

AttributeValues
data-dsvg-flex-growfinite number ≥ 0
data-dsvg-flex-shrinkfinite number ≥ 0
data-dsvg-flex-basisfinite number or auto
data-dsvg-align-selfauto, flex-start, center, flex-end, stretch, baseline
data-dsvg-width / data-dsvg-heightfinite number

Unsupported keywords and non-finite numbers fail validation instead of being silently coerced.

Layout results compose a generated translate / scale ahead of any existing transform, or update native geometry for simple shapes without a prior transform. Flex <text> children are positioned with x / y using the font baseline and are not scaled.

Text measurement

Flex <text> children participate in layout. Size them with supplied OpenType fonts (TTF/OTF/WOFF), not Canvas or installed system fonts.

<g
data-dsvg-layout="flex"
data-dsvg-justify-content="center"
data-dsvg-align-items="center"
data-dsvg-gap="16"
data-dsvg-width="400"
data-dsvg-height="120"
>
<circle r="24" fill="#3366ff" />
<text font-family="Inter" font-size="24" fill="#111">{{title}}</text>
</g>
import { compileDsvg } from '@deckify/dsvg';

const { svg } = await compileDsvg(source, {
variables: { title: 'Hello DSVG' },
fonts: [
{
name: 'Inter',
data: interRegular,
weight: 400,
style: 'normal',
},
],
});
OptionBehavior
fontsFont faces matched against SVG font-family / font-weight / font-style
textMeasurement: 'font'Default. Measure with supplied fonts
textMeasurement: 'skip'Keep legacy 0 × 0 unless data-dsvg-width / data-dsvg-height are set

Missing matching fonts for intrinsic text sizing fail with TEXT_MEASUREMENT_REQUIRED. DSVG 0.1 measures single-line text only and normalizes flex <text> whitespace (collapse + trim) before measuring.

See TypeScript for Node/browser loading examples.