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-proper
Basic 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
Proper
Function: 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-components
while 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:
hover
focus
active
nthChild
lastChild
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 |