styled-proper
v1.0.2
Published
A styled-components utility to apply dynamic styles via props with support for pseudo-classes, media queries, and more.
Maintainers
Readme
styled-proper
styled-proper is a library that uses styled-components internally to enable adding dynamic styles to components via props. It supports media queries, pseudo-classes, pseudo-elements, and provides the flexibility to extend components while leveraging the powerful features of styled-components.
Installation
Install the library via npm by running the following command:
npm install styled-properBasic Usage
styled-proper allows you to create styled components using dynamic props. Here's a simple example:
import { Button } from 'styled-proper';
function Component() {
return (
<Button bg="white|:hover=black" color="black|:hover=white" fs="14px|@sm=18px|@md=22px">
I am a button
</Button>
);
}
export default Component;In this example, you can define multiple styles in a single prop. Whether you want to add pseudo-classes or media queries, you only need to separate the values using a vertical bar |.
Style Breakdown
bg="white|:hover=black": Sets a white background by default and changes to black on hover.color="black|:hover=white": Sets a black text color by default and changes to white on hover.fs="14px|@sm=18px|@md=22px": Sets the font size to 14px by default, adjusts to 18px on small screens@sm, and 22px on medium screens@md.
Implementation Options
styled-proper offers multiple ways to import and use styled components, providing flexibility to suit your needs.
- Importing Components from styled-proper:
You can directly import the styled components you need from
styled-proper. This approach is useful for keeping your code clean and modular.
import { Header, Nav, Main, Footer, ..., Button } from 'styled-proper';
function Component() {
return (
<Main p="1rem">
<Header w="100%" p="1rem" flexXY="justify,center" bg="white">
<Nav w="100%" p="1rem">
<Button bg="black" color="white">Click me!</Button>
</Nav>
</Header>
</Main>
);
}- Importing Groups of Components:
If you prefer to organize components into categories or groups, you can import entire sections such as
Box,Text,Media, etc. This approach is helpful for managing large sets of components.
import { Box, Text, Media, FormElement, TableElement, MetaElement, Misc } from 'styled-proper';
function Component() {
return (
<Box.Main p="1rem">
<Box.Header w="100%" p="1rem" flexXY="justify,center" bg="white">
<Box.Nav w="100%" p="1rem">
<FormElement.Button bg="black" color="white">
Click me!
</FormElement.Button>
</Box.Nav>
</Box.Header>
</Box.Main>
);
}- Creating Custom Components with the
ProperFunction: You can use the Proper function to create custom components and tailor them to your needs. This is especially useful if you need full control over component names and configurations.
import Proper from 'styled-proper';
const Button = Proper('button');
const Header = Proper('header');
const Nav = Proper('nav');
const Main = Proper('main');
function Component() {
return (
<Main p="1rem">
<Header w="100%" p="1rem" flexXY="justify,center" bg="white">
<Nav w="100%" p="1rem">
<Button bg="black" color="white">
Click me!
</Button>
</Nav>
</Header>
</Main>
);
}Extending Components Created with
styled-components:You can extend components created with
styled-componentswhile still using the dynamic prop system provided bystyled-proper.
import styled from 'styled-components';
import Proper from 'styled-proper';
const ButtonWithStyledComponents = styled.button`
padding: 10px;
`;
const ExtendedButton = Proper(ButtonWithStyledComponents);
<ExtendedButton p="1rem">Click me!</ExtendedButton>;Media Query Support
styled-proper makes it easy to add responsive styles using media queries. To define them, simply prepend the @ symbol to the alias of the desired media query.
Media Query Example:
Below is an example where the aliases @sm and @md are used to adjust the font size based on the screen width:
<Text.P fs="14px|@sm=18px|@md=22px">Hola</Text.P>14px: Default font size.@sm=18px: Changes the font size to 18px when the screen width is greater than or equal to 640px.@md=22px: Changes the font size to 22px when the screen width is greater than or equal to 768px.
Supported Media Queries:
| Alias | Media Query (CSS) |
| --------- | ---------------------------- |
| @sm | @media (min-width: 640px) |
| @md | @media (min-width: 768px) |
| @lg | @media (min-width: 1024px) |
| @xl | @media (min-width: 1280px) |
| @2xl | @media (min-width: 1536px) |
Pseudo-Class Support
With styled-proper, you can handle pseudo-classes like hover, focus, nth-child, active, and more. The syntax is intuitive and similar to CSS: prepend a : to the pseudo-class name, followed by the desired value separated by =.
Important Note:
Pseudo-class names must be in camelCase format. Examples include:
hoverfocusactiventhChildlastChild
Example with hover Pseudo-Class:
<Button bg="black" color="white|hover:green">
click me
</Button>Description:
bg="black": Fondo negro por defecto.color="white|:hover=green": El color del texto cambia a verde cuando el botón está en estado hover.
Example with active Pseudo-Class:
<Button bg="black" color="white" border="1px solid white|active:green">
click me
</Button>Description:
border="1px solid white": Default border is white.border="|:active=green": Border changes to green when the button is active.
Example with nth-child Pseudo-Class:
import { Box } from 'styled-proper';
const Item = ({ children }) => <Box.Div bg="white|:nthChild(2n)=black">{children}</Box.Div>;
function Component() {
return (
<div>
{Array.from({ length: 10 }).map((_, i) => (
<Item key={i}>{i}</Item>
))}
</div>
);
}
export default Component;Description:
bg="white": Default background is white.:nthChild(2n)=black: Background changes to black for all even-indexed elements.
List of Supported Pseudo-Classes:
| Pseudo-clase original | Pseudo-clase de styled-proper |
| ------------------------- | --------------------------------- |
| :hover | :hover |
| :focus | :focus |
| :active | :active |
| :last-child | :lastChild |
| :first-child | :firstChild |
| :nth-child(param) | :nthChild(param) |
| :nth-of-type(param) | :nthOfType(param) |
| :last-of-type | :lastOfType |
| :first-of-type | :firstOfType |
| :not(param) | :not(param) |
| :empty | :empty |
| :checked | :checked |
| :disabled | :disabled |
| :enabled | :enabled |
| :visited | :visited |
| :link | :link |
| :target | :target |
| :focus-within | :focusWithin |
| :focus-visible | :focusVisible |
| :only-child | :onlyChild |
| :only-of-type | :onlyOfType |
| :read-only | :readOnly |
| :read-write | :readWrite |
| :placeholder-shown | :placeholderShown |
Using Pseudo-Classes as Props
In styled-proper, you can use pseudo-classes as props to add dynamic styles. These must be written in camelCase (e.g., hover, focus, active, lastChild, nthChild, etc.). Additionally, you can combine multiple styles within a single prop using arrays and media queries.
Basic Example
You can directly add pseudo-classes in props by using square brackets [ ] to group styles:
<Button bg="black" color="white" hover="[bg=white;color=black]">
click me
</Button>Combining Pseudo-Classes Within the Same Prop:
<Button bg="black" color="white" hover=":active=[bg=white;color=black]">
click me
</Button>Adding Media Queries Within the Same Prop:
<Button bg="black" color="white" hover="[bg=red;color=white]|@sm=[bg=blue;color=black]">
click me
</Button>Combining Pseudo-Classes and Media Queries Within the Same Prop:
<Button bg="black" color="white" hover=":active=[bg=red;color=white]|:active@sm=[bg=blue;color=black]">
click me
</Button>If the pseudo-class requires parameters, they should be passed as an array, where the first element is the parameter, and the second element is the value:
import { Button } from 'styled-proper';
function Component() {
return <Button nthChild={['2n', '[bg=black;color=white]|@sm=[bg=white;color=black]']}>click me</Button>;
}
export default Component;List of Supported Pseudo-Classes as Props:
| Pseudo-clase original | List Format |
| ------------------------- | ------------------ |
| :hover | hover |
| :focus | focus |
| :active | active |
| :last-child | lastChild |
| :first-child | firstChild |
| :nth-child(param) | nthChild |
| :nth-of-type(param) | nthOfType |
| :last-of-type | lastOfType |
| :first-of-type | firstOfType |
| :not(param) | not |
| :empty | empty |
| :checked | checked |
| :disabled | disabled |
| :enabled | enabled |
| :visited | visited |
| :link | link |
| :target | target |
| :focus-within | focusWithin |
| :focus-visible | focusVisible |
| :only-child | onlyChild |
| :only-of-type | onlyOfType |
| :read-only | readOnly |
| :read-write | readWrite |
| :placeholder-shown | placeholderShown |
Support for Pseudo-Elements
You can also manage pseudo-elements like before, after, first-letter, first-line, selection, marker, placeholder, backdrop, and more. Their usage is similar to CSS: prepend :: followed by the pseudo-element name, then specify the desired value separated by =.
Pseudo-elements should be written in camelCase convention, such as before, after, firstLetter, firstLine, selection, marker, placeholder, backdrop, etc.
Example with the first-letter Pseudo-Element:
<Text.P color="black|::firstLetter=red">Hola</Text.P>Example with the before Pseudo-Element
<Text.P position="relative|::before=absolute" content="::before=hi" top="::before=0" left="::before=0">
Hola
</Text.P>Example with Media Queries and Pseudo-Elements
<Text.P position="relative|::before=absolute" content="@md::before=hi" top="@md::before=0" left="@md::before=0">
Hola
</Text.P>List of Supported Pseudo-Elements:
| Original Pseudo-Element | styled-proper Pseudo-Elements |
| --------------------------- | --------------------------------- |
| ::before | ::before |
| ::after | ::after |
| ::first-letter | ::firstLetter |
| ::first-line | ::firstLine |
| ::selection | ::selection |
| ::marker | ::marker |
| ::placeholder | ::placeholder |
| ::backdrop | ::backdrop |
Using Pseudo-Elements as Props
You can also use pseudo-elements as props.
Pseudo-elements must follow camelCase convention, such as before, after, firstLetter, firstLine, selection, marker, placeholder, backdrop, etc. To apply multiple styles to the same pseudo-element, wrap the styles in square brackets [] and separate each property-value pair with a semicolon ;.
Example::
<Button bg="black" color="white" position="relative" after="[position=absolute;content=hi;top=0;left=0]">click me</Button>Adding Media Queries to the Same Prop:
<Button bg="black" color="white" position="relative" after="@sm=[position=absolute;content=hi;bg=red;right=0;left=0;top=100%]">
click me
</Button>List of Supported Pseudo-Elements as Props:
| Original Pseudo-Element | Usage Format |
| --------------------------- | ---------------- |
| ::before | before |
| ::after | after |
| ::first-letter | firstLetter |
| ::first-line | firstLine |
| ::selection | selection |
| ::marker | marker |
| ::placeholder | placeholder |
| ::backdrop | backdrop |
Support for Combinators
styled-proper supports the use of CSS combinators like >, +, ~, and . To use them, prepend the symbol & followed by the corresponding combinator and then the element to which the style is applied, very similar to CSS.
Example using the direct child combinator >
<Box.Div color="&>div=red">
<div>1</div>
<section>
<div>2</div>
</section>
<div>3</div>
</Box.Div>Example using the adjacent sibling combinator +
<div>
<Box.Div color="&+div=red">1</Box.Div>
<div>2</div>
<div>3</div>
</div>Example using the general sibling combinator ~
<div>
<Box.Div color="&~div=red">1</Box.Div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>Example using the descendant combinator
<Box.Div color="& p=red">
<div>1</div>
<div>
<p>2</p>
</div>
<div>3</div>
</Box.Div>List of Supported Combinators:
| Combinator | Description |
| -------------- | ------------------------------------------------------------- |
| &> | Selects direct children of the current element. |
| &~ | Selects all general sibling elements of the current element. |
| &+ | Selects the immediate sibling element of the current element. |
| & | Selects all descendants of the current element. |
Using Combinators as Props
The use of combinators through props works by receiving an array as a parameter, where the first element is the combinator and the second is the styles:
Example using the direct child combinator > with the directChild prop:
<div>
<Box.Div directChild={['div', '[color=red]']}>
<div>1</div>
<section>
<div>2</div>
</section>
<div>3</div>
</Box.Div>
</div>Example using the adjacent sibling combinator + with the adjacentSibling prop:
<div>
<Box.Div adjacentSibling={['div', '[color=red]']}>1</Box.Div>
<div>2</div>
<div>3</div>
</div>Example using the general sibling combinator ~ with the generalSibling prop:
<div>
<Box.Div generalSibling={['div', '[color=red]']}>1</Box.Div>
<div>2</div>
<div>3</div>
<div>4</div>
<div>5</div>
</div>Example using the descendant combinator with the descendant prop:
<Box.Div descendant={['p', '[color=red]']}>
<div>1</div>
<div>
<p>2</p>
</div>
<div>3</div>
</Box.Div>| Prop Name | Syntax Explanation |
| --------------------- | ------------------------------------------------------------------------------------------------------------------ |
| descendant | descendant={['p', '[color=red]']}: Targets all <p> elements nested within the current element. |
| directChild | directChild={['div', '[color=blue]']}: Targets all direct <div> children of the current element. |
| adjacentSibling | adjacentSibling={['span', '[color=green]']}: Targets the next immediate <span> sibling of the current element. |
| generalSibling | generalSibling={['h1', '[color=yellow]']}: Targets all subsequent <h1> siblings of the current element. |
API Reference
List of Components in styled-proper
| HTML Element | Component |
| ---------------- | ------------- |
| <header> | Header |
| <nav> | Nav |
| <main> | Main |
| <section> | Section |
| <article> | Article |
| <aside> | Aside |
| <footer> | Footer |
| <div> | Div |
| <span> | Span |
| <body> | Body |
| <h1> | H1 |
| <h2> | H2 |
| <h3> | H3 |
| <h4> | H4 |
| <h5> | H5 |
| <h6> | H6 |
| <p> | P |
| <a> | A |
| <abbr> | Abbr |
| <address> | Addr |
| <b> | B |
| <bdi> | Bdi |
| <bdo> | Bdo |
| <blockquote> | Blockquote |
| <cite> | Cite |
| <code> | Code |
| <del> | Del |
| <dfn> | Dfn |
| <em> | Em |
| <i> | I |
| <ins> | Ins |
| <kbd> | Kbd |
| <mark> | Mark |
| <s> | S |
| <samp> | Samp |
| <small> | Small |
| <strong> | Strong |
| <sub> | Sub |
| <sup> | Sup |
| <time> | Time |
| <u> | U |
| <var> | Var |
| <big> | Big |
| <hgroup> | Hgroup |
| <audio> | Audio |
| <img> | Img |
| <video> | Video |
| <picture> | Picture |
| <track> | Track |
| <source> | Source |
| <embed> | Embed |
| <iframe> | Iframe |
| <object> | Obj |
| <canvas> | Canvas |
| <form> | Form |
| <input> | Input |
| <button> | Button |
| <textarea> | Textarea |
| <label> | Label |
| <fieldset> | Fieldset |
| <legend> | Legend |
| <select> | Select |
| <optgroup> | OptGroup |
| <option> | Option |
| <datalist> | Datalist |
| <output> | Output |
| <progress> | Progress |
| <meter> | Meter |
| <table> | Table |
| <caption> | Caption |
| <colgroup> | ColGroup |
| <col> | Col |
| <thead> | THead |
| <tbody> | TBody |
| <tfoot> | TFoot |
| <tr> | Tr |
| <th> | Th |
| <td> | Td |
| <head> | Head |
| <title> | Title |
| <base> | Base |
| <link> | Link |
| <meta> | Meta |
| <style> | Style |
| <script> | Script |
| <html> | Html |
| <br> | Br |
| <hr> | Hr |
| <wbr> | Wbr |
| <area> | Area |
| <map> | MapElement |
| <param> | Param |
| <menu> | Menu |
| <menuitem> | MenuItem |
| <noscript> | Noscript |
| <dialog> | Dialog |
| <data> | Data |
| <details> | Details |
| <summary> | Summary |
| <figure> | Figure |
| <figcaption> | Figcaption |
| <g> | G |
List of Component Groups in styled-proper
| Group | Component |
| ---------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| Box | Header, Nav, Main, Section, Article, Aside, Footer, Div, Span, Body, Ul, Ol, Li |
| Text | H1, H2, H3, H4, H5, H6, P, A, Abbr, Addr, B, Bdi, Bdo, Blockquote, Cite, Code, Del, Dfn, Em, I, Ins, Kbd, Mark, S, Samp, Small, Strong, Sub, Sup, Time, U, Var, Big, Hgroup, Dl, Dt, Dd, Pre, Q, Rp, Rt, Ruby |
| Media | Audio, Img, Video, Picture, Track, Source, Embed, Iframe, Object, Canvas, Svg, Circle, ClipPath, Defs, Ellipse, ForeignObj, Image, Line, LinearGrad, Marker, Mask, Path, Pattern, Polygon, Polyline, RadialGrad, Rect, Stop, Text, Tspan, Use |
| FormElement | Form, Input, Button, Textarea, Label, Fieldset, Legend, Select, OptGroup, Option, Datalist, Output, Progress, Meter, Keygen |
| TableElement | Table, Caption, ColGroup, Col, THead, TBody, TFoot, Tr, Th, Td |
| MetaElement | Head, Title, Base, Link, Meta, Style, Script, Html |
| Misc | Br, Hr, Wbr, Area, Map, Param, Menu, MenuItem, Noscript, Dialog, Data, Details, Summary, Figure, Figcaption, G |
List of Available Props in styled-proper
Layout props
| Prop | Options |
| --------------------- | --------------------------------------- |
| aspect | auto : 1 / 1 |
| | square : 1 / 1 |
| | widescreen : 16 / 9 |
| | standard : 4 / 3 |
| | photo : 3 / 2 |
| | cinema : 2.39 / 1 |
| | ultrawide : 21 / 9 |
| | vertical : 9 / 16 |
| columns | |
| columnCount | |
| columnFill | |
| columnsGap | |
| columnRule | |
| columnRuleColor | |
| columnRuleStyle | |
| columnRuleWidth | |
| columnSpan | |
| columnWidth | |
| breakAfter | auto : auto |
| | avoid : avoid |
| | all : all |
| | avoidPage : avoid-page |
| | page : page |
| | left : left |
| | right : right |
| | column : column |
| breakBefore | auto : auto |
| | avoid : avoid |
| | all : all |
| | avoidPage : avoid-page |
| | page : page |
| | left : left |
| | right : right |
| breakInside | auto : auto |
| | avoid : avoid |
| | avoidPage : avoid-page |
| | avoidColumn : avoid-column |
| boxDecorationBreak | slice : slice |
| | clone : clone |
| boxSizing | border : border-box |
| | content : content-box |
| display | hidden : none |
| | block : block |
| | inline : inline |
| | flex : flex |
| | grid : grid |
| | table : table |
| | inlineBlock : inline-block |
| | inlineFlex : inline-flex |
| | inlineGrid : inline-grid |
| | inlineTable : inline-table |
| | tableCaption : table-caption |
| | tableCell : table-cell |
| | tableColumn : table-column |
| | tableRowGroup : table-row-group |
| | tableRow : table-row |
| | flowRoot : flow-root |
| | contents : contents |
| | listItem : list-item |
| | tableColumnGroup : table-column-group |
| | tableFooterGroup : table-footer-group |
| | tableHeaderGroup : table-header-group |
| float | start : inline-start |
| | end : inline-end |
| | left : left |
| | right : right |
| | none : none |
| clear | none : none |
| | start : inline-start |
| | end : inline-end |
| | left : left |
| | right : right |
| | both : both |
| isolation | auto : auto |
| | isolate : isolate |
| objectFit | contain : contain |
| | cover : cover |
| | fill : fill |
| | none : none |
| | scaleDown : scale-down |
| objectPosition | bottom : bottom |
| | center : center |
| | left : left |
| | leftBottom : left bottom |
| | leftTop : left top |
| | right : right |
| | rightBottom : right bottom |
| | rightTop : right top |
| | top : top |
| overflow | auto : auto |
| | hidden : hidden |
| | clip : clip |
| | visible : visible |
| | scroll : scroll |
| overflowX | auto : auto |
| | hidden : hidden |
| | clip : clip |
| | visible : visible |
| | scroll : scroll |
| overflowY | auto : auto |
| | hidden : hidden |
| | clip : clip |
| | visible : visible |
| | scroll : scroll |
| overflowWrap | normal : normal |
| | breakWord : break-word |
| | anywhere : anywhere |
| overscrollBehavior | auto : auto |
| | contain : contain |
| | none : none |
| overscrollBehaviorX | auto : auto |
| | contain : contain |
| | none : none |
| overscrollBehaviorY | auto : auto |
| | contain : contain |
| | none : none |
| position | static : static |
| | relative : relative |
| | absolute : absolute |
| | fixed : fixed |
| | sticky : sticky |
| top | |
| right | |
| bottom | |
| left | |
| inset | |
| visibility | visible : visible |
| | hidden : hidden |
| | collapse : collapse |
| zIndex | |
Flex and Grid props
| Prop | Options |
| ---------------- | ------------------------------------- |
| basis | auto : auto |
| | REM_OPTIONS |
| | FRACTION_OPTIONS |
| flexDirection | row : row |
| | rowReverse : row-reverse |
| | column : column |
| | columnReverse : column-reverse |
| flexWrap | nowrap : nowrap |
| | wrap : wrap |
| | wrapReverse : wrap-reverse |
| flex | 1 : 1 1 0% |
| | auto : 1 1 auto |
| | initial : 0 1 auto |
| | none : none |
| flexGrow | |
| flexShrink | |
| order | first : -9999 |
| | last : 9999 |
| cols | none : none |
| | subgrid : subgrid |
| | 1 : repeat(1, minmax(0, 1fr)) |
| | 2 : repeat(2, minmax(0, 1fr)) |
| | 3 : repeat(3, minmax(0, 1fr)) |
| | 4 : repeat(4, minmax(0, 1fr)) |
| | 5 : repeat(5, minmax(0, 1fr)) |
| | 6 : repeat(6, minmax(0, 1fr)) |
| | 7 : repeat(7, minmax(0, 1fr)) |
| | 8 : repeat(8, minmax(0, 1fr)) |
| | 9 : repeat(9, minmax(0, 1fr)) |
| | 10 : repeat(10, minmax(0, 1fr)) |
| | 11 : repeat(11, minmax(0, 1fr)) |
| | 12 : repeat(12, minmax(0, 1fr)) |
| colStart | auto : auto |
| colEnd | auto : auto |
| col | auto : auto |
| | span1 : span 1 / span 1 |
| | span2 : span 2 / span 2 |
| | span3 : span 3 / span 3 |
| | span4 : span 4 / span 4 |
| | span5 : span 5 / span 5 |
| | span6 : span 6 / span 6 |
| | span7 : span 7 / span 7 |
| | span8 : span 8 / span 8 |
| | span9 : span 9 / span 9 |
| | span10 : span 10 / span 10 |
| | span11 : span 11 / span 11 |
| | span12 : span 12 / span 12 |
| | spanFull : span 1 / -1 |
| rows | none : none |
| | subgrid : subgrid |
| | 1 : repeat(1, minmax(0, 1fr)) |
| | 2 : repeat(2, minmax(0, 1fr)) |
| | 3 : repeat(3, minmax(0, 1fr)) |
| | 4 : repeat(4, minmax(0, 1fr)) |
| | 5 : repeat(5, minmax(0, 1fr)) |
| | 6 : repeat(6, minmax(0, 1fr)) |
| | 7 : repeat(7, minmax(0, 1fr)) |
| | 8 : repeat(8, minmax(0, 1fr)) |
| | 9 : repeat(9, minmax(0, 1fr)) |
| | 10 : repeat(10, minmax(0, 1fr)) |
| | 11 : repeat(11, minmax(0, 1fr)) |
| | 12 : repeat(12, minmax(0, 1fr)) |
| rowStart | auto : auto |
| rowEnd | auto : auto |
| row | auto : auto |
| | span1 : span 1 / span 1 |
| | span2 : span 2 / span 2 |
| | span3 : span 3 / span 3 |
| | span4 : span 4 / span 4 |
| | span5 : span 5 / span 5 |
| | span6 : span 6 / span 6 |
| | span7 : span 7 / span 7 |
| | span8 : span 8 / span 8 |
| | span9 : span 9 / span 9 |
| | span10 : span 10 / span 10 |
| | span11 : span 11 / span 11 |
| | span12 : span 12 / span 12 |
| | spanFull : span 1 / -1 |
| autoFlow | row : row |
| | column : column |
| | rowDense : row dense |
| | columnDense : column dense |
| autoCols | auto : auto |
| | minContent : min-content |
| | maxContent : max-content |
| | fr : minmax(0, 1fr) |
| autoRows | auto : auto |
| | minContent : min-content |
| | maxContent : max-content |
| | fr : minmax(0, 1fr) |
| gap | REM_OPTIONS |
| gapX | REM_OPTIONS |
| gapY | REM_OPTIONS |
| justifyContent | normal : normal |
| | start : start |
| | end : end |
| | flexStart : flex-start |
| | flexEnd : flex-end |
| | center : center |
| | between : space-between |
| | around : space-around |
| | evenly : space-evenly |
| | stretch : stretch |
| justifyItems | start : start |
| | end : end |
| | center : center |
| | stretch : stretch |
| | flexStart : flex-start |
| | flexEnd : flex-end |
| justifySelf | auto : auto |
| | start : start |
| | end : end |
| | center : center |
| | stretch : stretch |
| | flexStart : flex-start |
| | flexEnd : flex-end |
| alignContent | normal : normal |
| | center : center |
| | start : start |
| | end : end |
| | flexStart : flex-start |
| | flexEnd : flex-end |
| | between : space-between |
| | around : space-around |
| | evenly : space-evenly |
| | stretch : stretch |
| | baseline : baseline |
| alignItems | flexStart : flex-start |
| | flexEnd : flex-end |
| | start : start |
| | end : end |
| | center : center |
| | baseline : baseline |
| | stretch : stretch |
| | |
| alignSelf | auto : auto |
| | flexStart : flex-start |
| | flexEnd : flex-end |
| | start : start |
| | end : end |
| | center : center |
| | baseline : baseline |
| | stretch : stretch |
| placeContent | |
| placeItems | |
| placeSelf | |
| flexXY | |
| flexRow | |
| flexRowReverse | |
| flexCol | |
| flexColReverse | |
Spacing props
| Prop | Options |
| -------- | ------------------------------------- |
| p | REM_OPTIONS |
| pt | REM_OPTIONS |
| pr | REM_OPTIONS |
| pb | REM_OPTIONS |
| pl | REM_OPTIONS |
| py | REM_OPTIONS |
| px | REM_OPTIONS |
| m | REM_OPTIONS |
| mt | REM_OPTIONS |
| mr | REM_OPTIONS |
| mb | REM_OPTIONS |
| ml | REM_OPTIONS |
| my | REM_OPTIONS |
| mx | REM_OPTIONS |
| w | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | auto : auto |
| | full : 100% |
| | screen : 100vw |
| | min : min-content |
| | max : max-content |
| | fit : fit-content |
| minW | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | px : 1px |
| | min : min-content |
| | max : max-content |
| | full : 100% |
| | fit : fit-content |
| maxW | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | px : 1px |
| | min : min-content |
| | max : max-content |
| | full : 100% |
| | fit : fit-content |
| h | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | auto : auto |
| | full : 100% |
| | screen : 100vh |
| | min : min-content |
| | max : max-content |
| | fit : fit-content |
| minH | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | px : 1px |
| | min : min-content |
| | max : max-content |
| | full : 100% |
| | fit : fit-content |
| maxH | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | px : 1px |
| | min : min-content |
| | max : max-content |
| | full : 100% |
| | fit : fit-content |
| size | REM_OPTIONS |
| | FRACTION_OPTIONS |
| | auto : auto |
| | full : 100% |
| | screen : 100vw |
| | min : min-content |
| | max : max-content |
| | fit : fit-content |
Typography props
| Prop | Options |
| ------------------------- | ------------------------------------------------------------------------------------------------------------------------------------------ |
| family | sans : ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue", Arial, "Noto Sans", sans-serif |
| | serif : ui-serif, Georgia, Cambria, "Times New Roman", Times, serif |
| | mono : ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace |
| fs | xs : 0.625rem |
| | sm : 0.75rem |
| | base : 1rem |
| | lg : 1.125rem |
| | xl : 1.25rem |
| | 2xl : 1.5rem |
| | 3xl : 1.875rem |
| | 4xl : 2.25rem |
| | 5xl : 3rem |
| | 6xl : 3.75rem |
| | 7xl : 4.5rem |
| | 8xl : 6rem |
| | 9xl : 8rem |
| fontSmoothing | antialiased : antialiased |
| | subpixel : auto |
| fontStyle | normal : normal |
| | italic : italic |
| fw | thin : 100 |
| | extraLight : 200 |
| | light : 300 |
| | normal : 400 |
| | medium : 500 |
| | semiBold : 600 |
| | bold : 700 |
| | extraBold : 800 |
| | black : 900 |
| fontVariant | |
| fontVariantAlternates | |
| fontVariantCaps | |
| fontVariantEastAsian | |
| fontVariantLigatures | |
| fontVariantNumeric | |
| fontVariantPosition | |
| fontFeatureSettings | |
| fontKerning | |
| fontLanguageOverride | |
| lh | xs : 1rem |
| | sm : 1.25rem |
| | base : 1.5rem |
| | lg : 1.75rem |
| | xl : 1.75 |
| | 2xl : 2rem |
| | 3xl : 2.25rem |
| | 4xl : 2.5rem |
| | 5xl : 1 |
| | 6xl : 1 |
| | 7xl : 1 |
| | 8xl : 1 |
| | 9xl : 1 |
| letterSpacing | REM_OPTIONS |
| wordSpacing | REM_OPTIONS |
| listStyle | |
| listStyleType | none : none |
| | disc : disc |
| | decimal : decimal |
| listStylePosition | inside : inside |
| | outside : outside |
| listStyleImage | none : none |
| textAlign | left : left |
| | right : right |
| | center : center |
| | justify : justify |
| textAlignLast | left : left |
| | right : right |
| | center : center |
| | justify : justify |
| color | COLOR OPTIONS |
| textDecoration | none : none |
| | underline : underline |
| | overline : overline |
| | lineThrough : line-through |
| textDecorationColor | current : currentColor |
| | transparent : transparent |
| | COLOR OPTIONS |
| textDecorationLine | none : none |
| | underline : underline |
| | overline : overline |
| | lineThrough : line-through |
| | blink : blink |
| textDecorationStyle | solid : solid |
| | double : double |
| | dotted : dotted |
| | dashed : dashed |
| | wavy : wavy |
| textDecorationThickness | auto : auto |
| | fromFont : from-font |
| | 1 : 1px |
| | 2 : 2px |
| | 3 : 3px |
| | 4 : 4px |
| | 5 : 5px |
| | 6 : 6px |
| | 7 : 7px |
| | 8 : 8px |
| | 9 : 9px |
| | 10 : 10px |
| textUnderlineOffset | auto : auto |
| | 1 : 1px |
| | 2 : 2px
