Skip to content
TYPO3Soul Design System

Figures

A figure slide shows a picture: a drawing, a screenshot, a matrix. The picture stands in the figure region, <sds-image slot="figure"> or a drawing inline, and takes the room its layout leaves. src and alt are the short form. It grows or shrinks whole into that room. A picture scales as a picture does. Text does not: what stands between the tags keeps its register, and only shrinks when it does not fit.

The head and the foot stand where a content slide has them. Only the picture takes more room: nearly the whole frame under full, and the edges of the frame under bleed. Under full nobody sees the head, and the lockup goes. The count stays at its place, on a plate.

A drawing in a row can carry a caption: what it shows, in a line or two under it. The caption is text in the page's small register. It reads at the size of every other small line and never shrinks with the picture. With framed each drawing stands on a plane with a hairline, its caption inside. That is for a sketch of an interface, which has no edge of its own.

A drawing's key can stand in the head. legend sets it at the right of the title, on its line: ■ MVP | □ First version | ID later. The drawing then leaves its own legend out, and the room under the head is the drawing's.

The drawings of a row share one scale. Each drawing from a text takes the room the densest of the row needs. So a label is one size across the row, and the keys under the frames line up.

Layout Room Ratio For
wide 877 × 354 2.5 : 1 A drawing under the head and its note. The default
full 925 × 505 1.83 : 1 A view that needs the whole frame: an interface, an architecture. Only the count shows, and the head stays for a reader who hears it
headed 877 × 354 2.5 : 1 A view that needs the frame, under a short head and a rule. The eyebrow takes the accent in the dark, and the quiet accent ink on paper. The foot is the count alone
row × 2 422 × 313 1.35 : 1 Two pictures side by side, each under its word, in drawings. The room is each one's
row × 3 238 × 240 1 : 1 Three sketches side by side, each on its plane with its caption under it. framed draws the planes
text-start 519 × 401 1.29 : 1 A column of text at the start and the picture beside it. The text stands in the middle of the column under the title, a step larger
bleed 559 × 538 1.04 : 1 Beside the text, a screenshot that fills its column to the edges of the frame. It keeps its top left corner, and the rest runs over

The room is the format. It is in the frame's own pixels, 960 × 540, and the slide draws at twice that. The figures hold for a title of one line. A note of one line under it takes 32 from the height, and so does a second line of the title. A picture of that ratio fills its room. A narrower one leaves the sides empty, and a flatter one the top and the bottom.

Regions#

What a slide shows goes between its tags, into named regions. What sets it up stays an attribute: its kind, its layout, its ground, its count.

Every kind takes the lines of its head as regions: eyebrow, heading, lead and note. A line in its region keeps its markup, an <em> or a <code>, and wins over the attribute of its name. The attribute stays as the short form for a line of plain text.

html
<sds-slide kind="figure" layout="text-start">
  <span slot="eyebrow">02 · What it consists of</span>
  <h2 slot="heading">One key for <em>two</em> languages</h2>
  <p>The German call fills the slot.</p>
  <svg slot="figure" viewBox="0 0 877 354">…</svg>
</sds-slide>
Layout Regions
content text, the one a child without a slot goes to
figure, wide, full and headed figure
figure, row figure, once for each drawing
figure, text-start text and figure
speaker text and portrait

The figure region takes any markup. A drawing inline reads the page's tokens and faces, so it keeps the system's type and turns with the mode. A drawing alone in the region fills the room as a picture does. Other markup shrinks until it fits. <figure slot="figure"> brings its word as data-label and what it shows as its <figcaption>. A static render takes the same through the drawings property, with content in place of src.

Take an element before you draw. Most figures of a paper are one of a few kinds, and the system has an element for each. Such a figure is markup between the tags of the slide, in the system's type, and a reader can copy its words:

The figure What it is on a slide
Things against criteria, a sign in every cell sds-table with an sds-icon and its label in each cell, under sds-td-sign. The legend is the caption
Figures, each with its sentence sds-stat in sds-grid
Boxes that each say a thing, in no order sds-card or sds-surface in sds-grid
Three screens or sketches side by side Three drawings in row, each drawn at its own room. Never one drawing with three panels in it
One screen, whole One drawing under full

Only what has lines between its parts is a drawing: a flow with branches, an architecture, a sketch of an interface.

A drawing for a slide is its own file:

  • No head and no foot of its own. The slide's title is its title. The note under it is optional, and says the finding where the drawing does not. A drawing for a page carries both, and on a slide says them twice. A fragment of the file cannot cut them off: an image shows the whole file.
  • No margin of its own. The slide's margin is its margin, so it starts at the edge the title starts at.
  • Each part says what it is. A drawing in parts gives each part a plane. Over what the part shows stand its heading and a line of context, and its consequence stands under it.
  • Drawn at its room, in the frame's pixels: its canvas is the room in the table above, viewBox="0 0 877 354" for wide. A label at 13 there is 13 in the frame and 26 on the room's screen. A canvas 1200 wide shrinks with the room. In a row of three, nobody in a room reads its labels.
  • One claim. A drawing that needs more than its room has more than one claim, and is two slides.
Figure
Figure, as a deck holds it
html
<sds-slide kind="figure">
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">One key for two languages</h2>
  <sds-diagram slot="figure" name="slide-lookup"># Two calls, one slot: the lookup for a wide figure slide. flow slide=877,354 columns=340,370 gap=167,16 title "Two calls, one slot" description "A German call writes the slot of a key. An English call for the same key reads the slot and answers in German. The path of the English call is the one accent." de `resolve('answer.empty', 'de')` ink at=0,0 en `resolve('answer.empty', 'en')` ink at=0,2 group "cache[]" empty `answer.empty` value="Nothing found (de)" at=1,0 none `answer.none` value="—" at=1,1 tool `label.tool` value="Tool (de)" at=1,2 de -&gt; empty "writes" en =&gt; empty "answers in de" via=h bend=0.85</sds-diagram>
</sds-slide>
Figure, full
Figure, full, as a deck holds it
html
<sds-slide kind="figure" layout="full">
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">A page of the manual</h2>
  <p slot="note">A view that needs the whole frame shows only the count.</p>
  <sds-image slot="figure" src="assets/screenshots/documentation.png" alt="A page of the manual at the width of a desk. The bar, the column of pages, the page and its contents."></sds-image>
</sds-slide>
Figure, pair
Figure, pair, as a deck holds it
html
<sds-slide kind="figure" layout="row">
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">Now and before</h2>
  <figure slot="figure" data-label="Status">
    <sds-image src="assets/screenshots/status-sources.png" alt="The status page of dev-companion at the table of six sources. Each row names a source, its state as a badge, when it was last checked, and an Open button."></sds-image>
  </figure>
  <figure slot="figure" data-label="Source">
    <sds-image src="assets/screenshots/source-reads.png" alt="The page of the source docs.typo3.org at its lower half. An overview, then two folded rows under Earlier reads, then a note: this is a source, not a service."></sds-image>
  </figure>
</sds-slide>
Figure, row
Figure, row, as a deck holds it
html
<sds-slide kind="figure" layout="row" framed>
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">Three pages at hand</h2>
  <figure slot="figure" data-label="Search">
    <sds-image src="assets/screenshots/search-phone.png" alt="The search page on a phone. The results for label, the filters by kind, and the first hit."></sds-image>
    <figcaption>The filters count the hits, and the first one names where it comes from.</figcaption>
  </figure>
  <figure slot="figure" data-label="Glyph">
    <sds-image src="assets/screenshots/glyph-phone.png" alt="The page of the glyph actions-document-edit on a phone. Its name, what it means, and the versions it is in."></sds-image>
    <figcaption>The name at the top, and the versions that carry it under the sentence.</figcaption>
  </figure>
  <figure slot="figure" data-label="Checkout">
    <sds-image src="assets/screenshots/checkout-phone.png" alt="The page of the checkout 14.3-dev on a phone. The actions, and a warning that the build is two commits behind."></sds-image>
    <figcaption>The one thing to do next is the only orange button.</figcaption>
  </figure>
</sds-slide>
Figure, slots
Figure, slots, as a deck holds it
html
<sds-slide kind="figure" layout="row" framed>
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">Navigation</h2>
  <figure slot="figure" data-label="Pages">
    <svg viewBox="0 0 320 220" role="img" aria-label="Pages open: Summer shop, Home, Offers, Contact">
      <rect x="1" y="1" width="104" height="30" rx="4" fill="var(--surface-sunken, #F5F5F5)" stroke="var(--text-primary, #18181B)"></rect>
      <text x="53" y="21" text-anchor="middle" font-size="13" font-weight="600" fill="var(--text-primary, #18181B)">Pages</text>
      <rect x="107" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="159" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Structure</text>
      <rect x="213" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="265" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Library</text>
      <rect x="1" y="46" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="65" font-size="13" fill="var(--text-secondary, #52525B)">Summer shop</text>
      <rect x="1" y="80" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="99" font-size="13" fill="var(--text-secondary, #52525B)">Home</text>
      <rect x="1" y="114" width="318" height="28" rx="4" fill="var(--surface-sunken, #F5F5F5)"></rect>
      <text x="14" y="133" font-size="13" fill="var(--text-secondary, #52525B)">Offers</text>
      <rect x="1" y="148" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="167" font-size="13" fill="var(--text-secondary, #52525B)">Contact</text>
    </svg>
    <figcaption>A press opens the page in the visual view.</figcaption>
  </figure>
  <figure slot="figure" data-label="Structure">
    <svg viewBox="0 0 320 220" role="img" aria-label="Structure open: Hero, Grid, 2 columns, Text, Image">
      <rect x="1" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="53" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Pages</text>
      <rect x="107" y="1" width="104" height="30" rx="4" fill="var(--surface-sunken, #F5F5F5)" stroke="var(--text-primary, #18181B)"></rect>
      <text x="159" y="21" text-anchor="middle" font-size="13" font-weight="600" fill="var(--text-primary, #18181B)">Structure</text>
      <rect x="213" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="265" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Library</text>
      <rect x="1" y="46" width="318" height="28" rx="4" fill="var(--surface-sunken, #F5F5F5)"></rect>
      <text x="14" y="65" font-size="13" fill="var(--text-secondary, #52525B)">Hero</text>
      <rect x="1" y="80" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="99" font-size="13" fill="var(--text-secondary, #52525B)">Grid, 2 columns</text>
      <rect x="1" y="114" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="133" font-size="13" fill="var(--text-secondary, #52525B)">Text</text>
      <rect x="1" y="148" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="167" font-size="13" fill="var(--text-secondary, #52525B)">Image</text>
    </svg>
    <figcaption>A choice here selects in the page, and back.</figcaption>
  </figure>
  <figure slot="figure" data-label="Library">
    <svg viewBox="0 0 320 220" role="img" aria-label="Library open: Text, Teaser, Contact, Offer block">
      <rect x="1" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="53" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Pages</text>
      <rect x="107" y="1" width="104" height="30" rx="4" fill="none" stroke="var(--border-subtle, #E4E4E7)"></rect>
      <text x="159" y="21" text-anchor="middle" font-size="13" font-weight="400" fill="var(--text-primary, #18181B)">Structure</text>
      <rect x="213" y="1" width="104" height="30" rx="4" fill="var(--surface-sunken, #F5F5F5)" stroke="var(--text-primary, #18181B)"></rect>
      <text x="265" y="21" text-anchor="middle" font-size="13" font-weight="600" fill="var(--text-primary, #18181B)">Library</text>
      <rect x="1" y="46" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="65" font-size="13" fill="var(--text-secondary, #52525B)">Text</text>
      <rect x="1" y="80" width="318" height="28" rx="4" fill="var(--surface-sunken, #F5F5F5)"></rect>
      <text x="14" y="99" font-size="13" fill="var(--text-secondary, #52525B)">Teaser</text>
      <rect x="1" y="114" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="133" font-size="13" fill="var(--text-secondary, #52525B)">Contact</text>
      <rect x="1" y="148" width="318" height="28" rx="4" fill="none"></rect>
      <text x="14" y="167" font-size="13" fill="var(--text-secondary, #52525B)">Offer block</text>
    </svg>
    <figcaption>A drag inserts at the selection.</figcaption>
  </figure>
</sds-slide>
Figure, text
Figure, text, as a deck holds it
html
<sds-slide kind="figure" layout="text-start">
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">Five sources</h2>
  <p>Each source needs a part of the machine before it answers.</p>
  <ul class="sds-list">
    <li>Bundled knowledge and the checkout need nothing.</li>
    <li>Packages need files on disk.</li>
    <li>The installation needs a booted site.</li>
  </ul>
  <sds-diagram slot="figure" name="slide-sources"># The sources against the machine, in the room of a slide. bars slide 519,401 bands "nothing running,files on disk,a booted site,network reach" title "Five sources against the machine" description "Each source is a bar across what the machine has to run: bundled knowledge and the checkout need nothing, packages need files on disk, the installation a booted site, the network outbound reach. Bundled knowledge is the one accent." row `knowledge` sub "bundled, versioned" segments 4 emphasis row `checkout` sub "this repository" segments 4 row `packages` sub "files, never run" segments absent=1 3 row `installation` sub "the booted site" segments absent=2 2 row `network` sub "official services" segments absent=3 1 legend ink "available" absent "what it still needs"</sds-diagram>
</sds-slide>
Figure, bleed
Figure, bleed, as a deck holds it
html
<sds-slide kind="figure" layout="text-start" bleed>
  <span slot="eyebrow">03 · How to build a slide</span>
  <h2 slot="heading">The status page</h2>
  <sds-facts>
    <dt>Row</dt>
    <dd>one source</dd>
    <dt>Badge</dt>
    <dd>what it does now</dd>
    <dt>Checked</dt>
    <dd>when it last answered</dd>
  </sds-facts>
  <sds-image slot="figure" src="assets/screenshots/status-sources.png" alt="The status page of dev-companion at the table of six sources. Each row names a source, its state as a badge, when it was last checked, and an Open button."></sds-image>
</sds-slide>