рдХреБрд╢рд▓ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рд╕рд╛рде рдХреБрд╢рд▓ рдШрдЯрдХ рдирд┐рд░реНрдорд╛рдг

рдЫрд╡рд┐

рд╣рдорд╛рд░реА рдЯреАрдо рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рд╢реИрд▓реА рдХреЗ рдШрдЯрдХреЛрдВ рдХреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

рд╣реИрдмреЗ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдкрд░ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд▓реЗрдЦ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЗрд╕ рдкрд░ рд╡рд┐рд╕реНрддрд╛рд░ рд╕реЗ рдзреНрдпрд╛рди рдирд╣реАрдВ рджреЗрдВрдЧреЗред

рдкреЗрд╢ рд╣реИ рд╕реНрдЯрд╛рдЗрд▓ рд╡рд╛рд▓реЗ рдШрдЯрдХ
рдмреЗрд╣рддрд░, рддреЗрдЬ, рдЕрдзрд┐рдХ рд╢рдХреНрддрд┐рд╢рд╛рд▓реА: рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ v4

рдХрдИ рдШрдЯрдХреЛрдВ рдХреЛ рд▓рд┐рдЦрдиреЗ рдХреЗ рдмрд╛рдж, рд╣рдордиреЗ рдкрд╛рдпрд╛ рдХрд┐ рд▓рдЧрднрдЧ рд╣рд░ рдШрдЯрдХ рдореЗрдВ рд╣рдо рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЧреБрдгреЛрдВ рдХреА рдирдХрд▓ рдХрд░рддреЗ рд╣реИрдВред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдХрдИ рдШрдЯрдХреЛрдВ рдореЗрдВ рдЗрд╕ рддрд░рд╣ рд▓рд┐рдЦрд╛ рд╣реИ:

padding-top: ${props => props.paddingTop || '0'}; padding-bottom: ${props => props.paddingBottom || '0'}; padding-right: ${props => props.paddingRight || '0'}; padding-left: ${props => props.paddingLeft || '0'}; 

рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо


рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рд╕рдВрдкрддреНрддрд┐рдпреЛрдВ рдХреА рдирдХрд▓ рдХрд░рдирд╛ рдХрд╖реНрдЯрдкреНрд░рдж рд╣реЛрдиреЗ рд▓рдЧрд╛, рдФрд░ рд╣рдордиреЗ рдЕрд▓рдЧ-рдЕрд▓рдЧ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рдХреЛрдб рдХреЗ рдбреБрдкреНрд▓рд┐рдХреЗрдЯ рдЯреБрдХрдбрд╝реЛрдВ рдХреЛ рдЦреАрдВрдЪ рд▓рд┐рдпрд╛ред рд▓реЗрдХрд┐рди рдореБрдЭреЗ рд▓рдЧрд╛ рдХрд┐ рд╢рд╛рдпрдж рдХрд┐рд╕реА рдиреЗ рд╣рдорд╛рд░реЗ рд╕рд╛рдордиреЗ рдХреБрдЫ рдЗрд╕ рддрд░рд╣ рд╕реЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рд╣реИ рдФрд░ рд╢рд╛рдпрдж рдЕрдзрд┐рдХ рдЦреВрдмрд╕реВрд░рддреА рдФрд░ рд╕рд╛рд░реНрд╡рднреМрдорд┐рдХ рд░реВрдк рд╕реЗред рдореИрдВрдиреЗ рдЧреВрдЧрд▓ рдХрд░рдирд╛ рд╢реБрд░реВ рдХрд┐рдпрд╛ рдФрд░ рдПрдХ рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рдпрд╛ред

рд╕реНрдЯрд╛рдЗрд▓-рд╕рд┐рд╕реНрдЯрдо рд╢реИрд▓реА рд╕реБрд╡рд┐рдзрд╛рдУрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рдкреНрд░рддреНрдпреЗрдХ рд╢реИрд▓реА рдлрд╝рдВрдХреНрд╢рди рдЧреБрдгреЛрдВ рдХрд╛ рдЕрдкрдирд╛ рд╕реЗрдЯ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИ рдЬреЛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдереАрдо рдореЗрдВ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдореВрд▓реНрдпреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╢реИрд▓реА рддрддреНрд╡реЛрдВ рдХреЛ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рд╕рдореГрджреНрдз рдПрдкреАрдЖрдИ рд╣реИред

рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЙрджрд╛рд╣рд░рдг

 import { space, width, fontSize, color } from 'styled-system'; import styled, { ThemeProvider } from 'styled-components'; import theme from './theme'; const Box = styled.div` ${space} ${width} ${fontSize} ${color} `; render( <ThemeProvider theme={theme}> <Box p={3} bg="whites.10" color="orange"> This is a Box </Box> </ThemeProvider>, ); 

рдореБрдЦреНрдп рд▓рд╛рдн


  • рдЙрди рдЧреБрдгреЛрдВ рдХреЛ рдЬреЛрдбрд╝рддрд╛ рд╣реИ рдЬрд┐рдирдХрд╛ рдЙрдкрдпреЛрдЧ рдЖрдк рдЕрдкрдиреЗ рд╕реНрд╡рдпрдВ рдХреЗ рдереАрдо рдореЗрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВред
  • рддреНрд╡рд░рд┐рдд рд╕реЗрдЯрд┐рдВрдЧ рдЙрддреНрддрд░рджрд╛рдпреА рдлрд╝реЙрдиреНрдЯ рдЖрдХрд╛рд░, рдорд╛рд░реНрдЬрд┐рди, рдкреИрдбрд┐рдВрдЧ, рдЪреМрдбрд╝рд╛рдИ рдФрд░ рдЕрдиреНрдп рд╕реАрдПрд╕рдПрд╕ рдЧреБрдгреЛрдВ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╕рд╣рд╛рд░рд╛
  • рдЯрд╛рдЗрдкреЛрдЧреНрд░рд╛рдлреА рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА
  • рдорд╛рд░реНрдЬрд┐рди рдФрд░ рдкреИрдбрд┐рдВрдЧ рд╕реНрдХреЗрд▓реЗрдмрд┐рд▓рд┐рдЯреА
  • рдХрд┐рд╕реА рднреА рд░рдВрдЧ рдкреИрд▓реЗрдЯ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди
  • рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕реАрдПрд╕рдПрд╕-рдЗрди-рдЬреЗрдПрд╕ рдкреБрд╕реНрддрдХрд╛рд▓рдпреЛрдВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓-рдШрдЯрдХреЛрдВ рдФрд░ рднрд╛рд╡рдирд╛рдПрдВ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ
  • Rebass , Rebass рдЧреНрд░рд┐рдб рдФрд░ рдЯреНрд░реЗрди рдбрд┐рдЬрд╝рд╛рдЗрди рд╕рд┐рд╕реНрдЯрдо рджреНрд╡рд╛рд░рд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ

рдХрдиреЗрдХреНрдЯрд┐рдВрдЧ рдереАрдореНрд╕


рдКрдкрд░, рдореИрдВрдиреЗ рдХреЛрдб рдЙрджрд╛рд╣рд░рдг рдкреНрд░рджрд╛рди рдХрд┐рдпрд╛ рдЬреЛ рдереАрдордкреНрд░реЛрд╡рд┐рдбрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддрд╛ рд╣реИред рд╣рдо рдкреНрд░рджрд╛рддрд╛ рдХреЗ рд▓рд┐рдП рдЕрдкрдиреА рдереАрдо рдкрд╛рд╕ рдХрд░рддреЗ рд╣реИрдВ, рдФрд░ рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдЗрд╕реЗ рдкреНрд░реЙрдкреНрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдПрдХреНрд╕реЗрд╕ рдХрд░рддрд╛ рд╣реИред

рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

 export const theme = { /**   */ fontSizes: [ 12, 14, 16, 18, 24, 32, 36, 72, 96 ], /**    */ space: [ // margin and padding 0, 4, 8, 16, 32, 64, 128, 256 ], /**   */ colors: { UIClientError: '#ff6c00', UIServerError: '#ff0000', UITriggerRed: '#fe3d00', UITriggerBlue: '#00a9f6', UIModalFooterLightBlueGray: '#f3f9ff', UIModalTitleDefault: colorToRgba('#5e6670', 0.4), UICheckboxIconCopy: colorToRgba('#909cac', 0.2) }, /**   */ buttonSizes: { xs: ` height: 16px; padding: 0 16px; font-size: 10px; `, sm: ` height: 24px; padding: 0 24px; font-size: 13px; `, md: ` height: 34px; padding: 0 34px; font-size: 14px; letter-spacing: 0.4px; `, lg: ` height: 56px; padding: 0 56px; font-size: 20px; `, default: ` height: 24px; padding: 0 30px; font-size: 13px; `, }, /**   */ buttonColors: { green: ` background-color: #a2d628; color: ${colorToRgba('#a2d628', 0.5)}; `, blue: ` background-color: #507bfc; color: ${colorToRgba('#507bfc', 0.5)}; `, lightBlue: ` background-color: #10aee7; color: ${colorToRgba('#10aee7', 0.5)}; `, default: ` background-color: #cccccc; color: ${colorToRgba('#cccccc', 0.5)}; ` } } 

рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдкрд╛рд░рд┐рдд рдШрдЯрдХ рдЧреБрдгреЛрдВ рдХреЗ рдЖрдзрд╛рд░ рдкрд░ рд╡рд┐рд╖рдп рд╡рд╕реНрддреБ рдореЗрдВ рдореВрд▓реНрдп рдЦреЛрдЬрдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░реЗрдЧрд╛ред рдЧреБрдгреЛрдВ рдХреЗ рдЧрд╣рди рдШреЛрдВрд╕рд▓реЗ рдХреЗ рд╢рд┐рдХрд╛рд░ рдХрд╛ рд╕рдорд░реНрдерди рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдпрджрд┐ рд╡рд┐рд╖рдп рдореЗрдВ рд╕рдВрдЪрд░рд┐рдд рдореВрд▓реНрдп рдирд╣реАрдВ рдорд┐рд▓рддрд╛ рд╣реИ, рддреЛ рдорд╛рди рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХреА рдЬрд╛рддреА рд╣реИред

рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рд╣рдордиреЗ рдШрдЯрдХ рд░рдВрдЧ = "рд▓рд╛рд▓" рдкрд╛рд╕ рдХрд┐рдпрд╛ред рд╡рд┐рд╖рдп рд╡рд╕реНрддреБ рдореЗрдВ рдХреЛрдИ color.red рдорд╛рди рдирд╣реАрдВ рд╣реИ, рд▓реЗрдХрд┐рди рд▓рд╛рд▓ рдорд╛рди рдХреЛ css рдореЗрдВ рд▓рд╛рд▓ рдХреЗ рд░реВрдк рдореЗрдВ рдЕрдиреБрд╡рд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕рд▓рд┐рдП рдЗрдВрд╕реНрдкреЗрдХреНрдЯрд░ рдореЗрдВ рдмрджрд▓рд╛рд╡ рдХреЗ рдмрд╛рдж рд╣рдо рджреЗрдЦреЗрдВрдЧреЗ

 color: red; 


рд╡рд┐рд╖рдп рдореВрд▓реНрдпреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рдЕрдиреНрдп рдЙрджрд╛рд╣рд░рдг
 // font-size: 24px (theme.fontSizes[4]) <Box fontSize={4} /> // margin: 16px (theme.space[3]) <Box m={3} /> // color: #ff6c00 (theme.colors.UIClientError) <Box color="UIClientError" /> // background color (theme.colors.UITriggerBlue) <Box bg="UITriggerBlue" /> // width: 50% <Box width={1/2} /> 

рдЙрддреНрддрд░рджрд╛рдпреА рд╢реИрд▓рд┐рдпреЛрдВ


рдЙрддреНрддрд░рджрд╛рдпреА рдЧреБрдгреЛрдВ рдХрд╛ рд╢реАрдШреНрд░ рд╡рд░реНрдгрди рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдмрд╕ рдорд╛рдиреЛрдВ рдХрд╛ рдПрдХ рд╕рд░рдгреА рдкрд╛рд╕ рдХрд░реЗрдВ

 <Box width={[ 1, // 100% below the smallest breakpoint 1/2, // 50% from the next breakpoint and up 1/4 // 25% from the next breakpoint and up ]} /> // responsive font size <Box fontSize={[ 1, 2, 3, 4 ]} /> // responsive margin <Box m={[ 1, 2, 3, 4 ]} /> // responsive padding <Box p={[ 1, 2, 3, 4 ]} /> 

рд╡реЗрд░рд┐рдПрдВрдЯ


рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рд╣рдореЗрдВ рдЕрдкрдиреЗ рд╡рд┐рд╖рдп рдореЗрдВ рдкреБрди: рдкреНрд░рдпреЛрдЬреНрдп рд╡рд╕реНрддреБрдУрдВ рдХреЛ рдкрд░рд┐рднрд╛рд╖рд┐рдд рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рд░рдВрдЧ, рдкрд╛рда рд╢реИрд▓реА рдФрд░ рдЗрддрдиреЗ рдкрд░ рд╕реЗрдЯ рд╣реЛрддреЗ рд╣реИрдВред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, рдКрдкрд░ рд╣рдорд╛рд░реЗ рд╡рд┐рд╖рдп рдореЗрдВ, рд╣рдо
рд╣рдо рдмрдЯрди рдХреЗ рдЖрдХрд╛рд░ рдФрд░ рд░рдВрдЧреЛрдВ рдХреЗ рд╡рд┐рдХрд▓реНрдкреЛрдВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВред

  /**   */ buttonSizes: { xs: ` height: 16px; padding: 0 16px; font-size: 10px; `, sm: ` height: 24px; padding: 0 24px; font-size: 13px; `, default: ` height: 24px; padding: 0 30px; font-size: 13px; `, }, /**   */ buttonColors: { green: ` background-color: #a2d628; color: ${colorToRgba('#a2d628', 0.5)}; `, blue: ` background-color: #507bfc; color: ${colorToRgba('#507bfc', 0.5)}; `, lightBlue: ` background-color: #10aee7; color: ${colorToRgba('#10aee7', 0.5)}; `, default: ` background-color: #cccccc; color: ${colorToRgba('#cccccc', 0.5)}; ` } 

рд╡рд┐рдХрд▓реНрдк рдХрд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди:

 /**    */ export const buttonSize = variant({ /**   */ prop: 'size', /**  */ key: 'buttonSizes' }); /**    */ export const buttonColor = variant({ /**   */ prop: 'colors', /**  */ key: 'buttonColors' }); 


рдмрдЯрди рдШрдЯрдХ
 /**   */ export const Button = styled(Box.withComponent('button'))` ${buttonSize} ${buttonColor} `; Button.propTypes = { ...buttonSize.propTypes, ...buttonColor.propTypes, } 

рдордзреНрдпрдо рдЖрдХрд╛рд░ рдХреЗ рдиреАрд▓реЗ рдмрдЯрди рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХрд╛ рдПрдХ рдЙрджрд╛рд╣рд░рдг

 <Button size="md" colors="blue" /> 

рдХрд╛рд░реНрдпрд╛рд▓рдп рдореЗрдВ рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХрд╛ рдЕрдзрд┐рдХ рд╡рд┐рд╕реНрддреГрдд рд╡рд┐рд╡рд░рдг рдФрд░ рдкреНрд░рд▓реЗрдЦрди ред рдЬреАрдердм рдкреГрд╖реНрда

UPD: рдПрдХ рд▓реЗрдЦ рд▓рд┐рдЦрддреЗ рд╕рдордп, рд╕реНрдЯрд╛рдЗрд▓ рд╕рд┐рд╕реНрдЯрдо рдХреЛ рдкреНрд░рд▓реЗрдЦрди рдФрд░ рдЙрджрд╛рд╣рд░рдг https://styled-system.com/ рдХреЗ рд╕рд╛рде рдЕрдкрдирд╛ рд╕реНрд╡рдпрдВ рдХрд╛ рдкреЗрдЬ рдорд┐рд▓рд╛ред

Source: https://habr.com/ru/post/hi441790/


All Articles