@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"
let:width
let:height
>
<Plane
{width}
{height}
color="yellow"
depth={1}
/>
</Box>
<Box
class="flex-1"
let:width
>
<Plane
color="blue"
{width}
height={44}
depth={1}
/>
</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"
let:width
let:height
>
<!-- … -->
</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-10will 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.5will 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-leftpadding-right | px-10, px-full, px-55% |
py-{value} | padding-toppadding-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-leftmargin-right | mx-10, mx-full, mx-55% |
my-{value} | margin-topmargin-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 |
