threlte logo
@threlte/flex

tailwindParser

@threlte/flex ships with a default parser for Tailwind-like classes on <Flex> and <Box> components. If you are familiar with Tailwind, you will feel right at home.

<Flex
  width={300}
  height={300}
  classParser={tailwindParser}
  class="flex-col items-center justify-center gap-10 p-10"
>
  <Box class="w-100 h-full shrink-0">
    {#snippet children({ width, height })}
      <Plane
        {width}
        {height}
        color="yellow"
        depth={1}
      />
    {/snippet}
  </Box>

  <Box class="flex-1">
    {#snippet children({ width })}
      <Plane
        color="blue"
        {width}
        height={44}
        depth={1}
      />
    {/snippet}
  </Box>
</Flex>

Usage

Add the classParser prop to your <Flex> or <Box> component and pass in the tailwindParser function.

<script>
  import { Flex, Box, Plane, tailwindParser } from '@threlte/flex'
</script>

<Flex
  width={300}
  height={300}
  classParser={tailwindParser}
  class="flex-col items-center justify-center gap-10 p-10"
>
  <Box class="h-100 w-100">
    {#snippet children({ width, height })}
      <!-- … -->
    {/snippet}
  </Box>
</Flex>

Differences to Tailwind

The syntax is very similar to Tailwind, with a few differences:

  • If a value is a number, it is interpreted as a unit in Three.js. For example, gap-10 will set the gap to 10 Three.js units.
  • As opposed to Tailwind, you are not limited to the default set of values. You can use any value: gap-17.5 will set the gap to 17.5 Three.js units. p-56% will set the padding to 56% of the parent’s width. Do not wrap the value in brackets as you would do with custom values in Tailwind CSS.

Supported Props

The following props are supported by the Tailwind parser:

Flex Direction

| Class | CSS Properties | | ------------------ | -------------------------------- | | flex-row | flex-direction: row | | flex-col | flex-direction: column | | flex-row-reverse | flex-direction: row-reverse | | flex-col-reverse | flex-direction: column-reverse |

Flex Wrap

| Class | CSS Properties | | ------------------- | ------------------------- | | flex-wrap | flex-wrap: wrap | | flex-wrap-reverse | flex-wrap: wrap-reverse | | flex-nowrap | flex-wrap: nowrap |

Justify Content

| Class | CSS Properties | | ----------------- | -------------------------------- | | justify-start | justify-content: flex-start | | justify-end | justify-content: flex-end | | justify-center | justify-content: center | | justify-between | justify-content: space-between | | justify-around | justify-content: space-around | | justify-evenly | justify-content: space-evenly |

Align Items

| Class | CSS Properties | | ---------------- | ------------------------- | | items-start | align-items: flex-start | | items-end | align-items: flex-end | | items-center | align-items: center | | items-baseline | align-items: baseline | | items-stretch | align-items: stretch |

Align Content

| Class | CSS Properties | | ------------------ | ------------------------------ | | content-normal | align-content: normal | | content-start | align-content: flex-start | | content-end | align-content: flex-end | | content-center | align-content: center | | content-between | align-content: space-between | | content-around | align-content: space-around | | content-stretch | align-content: stretch | | content-baseline | align-content: baseline |

Gap

value is a number (e.g. 10)

| Class | CSS Properties | Examples | | --------------- | -------------- | ---------- | | gap-{value} | gap | gap-10 | | gap-x-{value} | column-gap | gap-x-10 | | gap-y-{value} | row-gap | gap-y-10 |

Flex Grow

value is a number (e.g. 1)

| Class | CSS Properties | Examples | | -------------- | -------------- | ------------------ | | grow-{value} | flex-grow | grow-1, grow-0 |

Flex Shrink

value is a number (e.g. 1)

| Class | CSS Properties | Examples | | ---------------- | -------------- | ---------------------- | | shrink-{value} | flex-shrink | shrink-1, shrink-0 |

Flex Basis

value can be auto, full, a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | --------------- | -------------- | --------------------------------------------------- | | basis-{value} | flex-basis | basis-10, basis-full, basis-55%, basis-auto |

Flex

value is a number (e.g. 1)

| Class | CSS Properties | Examples | | -------------- | -------------- | -------------------- | | flex-{value} | flex | flex-1, flex-0.5 |

Align Self

| Class | CSS Properties | | --------------- | ------------------------ | | self-auto | align-self: auto | | self-start | align-self: flex-start | | self-end | align-self: flex-end | | self-center | align-self: center | | self-stretch | align-self: stretch | | self-baseline | align-self: baseline |

Padding

value can be full, a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | ------------ | ----------------------------------- | ---------------------------- | | p-{value} | padding | p-10, p-full, p-55% | | pt-{value} | padding-top | pt-10, pt-full, pt-55% | | pr-{value} | padding-right | pr-10, pr-full, pr-55% | | pb-{value} | padding-bottom | pb-10, pb-full, pb-55% | | pl-{value} | padding-left | pl-10, pl-full, pl-55% | | px-{value} | padding-left
padding-right | px-10, px-full, px-55% | | py-{value} | padding-top
padding-bottom | py-10, py-full, py-55% |

Margin

value can be full, a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | ------------ | --------------------------------- | ---------------------------- | | m-{value} | margin | m-10, m-full, m-55% | | mt-{value} | margin-top | mt-10, mt-full, mt-55% | | mr-{value} | margin-right | mr-10, mr-full, mr-55% | | mb-{value} | margin-bottom | mb-10, mb-full, mb-55% | | ml-{value} | margin-left | ml-10, ml-full, ml-55% | | mx-{value} | margin-left
margin-right | mx-10, mx-full, mx-55% | | my-{value} | margin-top
margin-bottom | my-10, my-full, my-55% |

Width

value can be auto, full, a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | ----------- | -------------- | ----------------------------------- | | w-{value} | width | w-10, w-full, w-55%, w-auto |

Height

value can be auto, full, a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | ----------- | -------------- | ----------------------------------- | | h-{value} | height | h-10, h-full, h-55%, h-auto |

Top, Right, Bottom, Left

value can be a percentage (e.g. 55%) or a number (e.g. 10).

| Class | CSS Properties | Examples | | ---------------- | -------------- | ------------------------- | | top-{value} | top | top-10, top-55% | | right-{value} | right | right-10, right-55% | | bottom-{value} | bottom | bottom-10, bottom-55% | | left-{value} | left | left-10, left-55% |

Aspect Ratio

value can be square, portrait, landscape or an arbitrary ratio (e.g. 32/9).

| Class | CSS Properties | Examples | | ------------------ | ----------------------- | --------------------------- | | aspect-square | aspect-ratio: 1 / 1 | | aspect-portrait | aspect-ratio: 9 / 16 | | aspect-landscape | aspect-ratio: 16 / 9 | | aspect-{value} | aspect-ratio: {value} | aspect-32/9, aspect-2/1 |