Pembuatan komponen yang efisien dengan sistem gaya

gambar

Tim kami menggunakan komponen yang ditata untuk menata komponen yang bereaksi.

Sudah ada artikel tentang komponen-komponen gaya di Habré, jadi kami tidak akan membahas ini secara rinci.

Memperkenalkan komponen Gaya
Lebih baik, lebih cepat, lebih kuat: komponen v4 gaya

Setelah menulis banyak komponen, kami menemukan bahwa di hampir setiap komponen kami menyalin properti duplikat.

Misalnya, dalam banyak komponen kami menulis seperti ini:

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

Sistem gaya


Menyalin properti duplikat mulai menjengkelkan, dan kami menarik potongan-potongan kode duplikat menjadi fungsi yang dapat digunakan kembali secara terpisah. Tetapi saya berpikir bahwa mungkin seseorang telah menerapkan sesuatu seperti ini sebelum kita dan mungkin lebih indah dan universal. Saya mulai mencari google dan menemukan sistem gaya .

Styled-System menyediakan serangkaian fitur gaya. Setiap fungsi gaya menyediakan set properti sendiri yang elemen gaya berdasarkan pada nilai-nilai yang ditentukan dalam tema aplikasi. Sistem gaya memiliki API yang kaya dengan fungsi untuk sebagian besar properti CSS.

Contoh sistem gaya berdasarkan pada komponen yang ditata

 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>, ); 

Manfaat Utama


  • Menambahkan properti yang dapat Anda gunakan dalam tema Anda sendiri.
  • Pengaturan cepat ukuran font, margin, bantalan, lebar, dan properti css responsif lainnya melalui alat peraga
  • Skalabilitas tipografi
  • Skalabilitas margin dan bantalan
  • Mendukung palet warna
  • Bekerja dengan sebagian besar pustaka css-in-js, termasuk komponen yang ditata dan emosi
  • Digunakan oleh Rebass , Rebass Grid , dan Sistem Desain Priceline

Menghubungkan Tema


Di atas, saya memberikan contoh kode yang menggunakan ThemeProvider. Kami meneruskan tema kami ke penyedia, dan sistem gaya mengaksesnya melalui alat peraga.

Contoh topik kita

 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)}; ` } } 

sistem gaya akan mencoba untuk menemukan nilai dalam objek tema berdasarkan pada properti komponen yang diteruskan. Properti bersarang mendalam didukung, jika nilai yang ditransmisikan tidak ditemukan dalam topik, maka nilai tersebut ditafsirkan sebagaimana adanya.

Sebagai contoh, kami melewati komponen color = "red". Tidak ada nilai color.red di objek topik, tetapi nilai merah akan diterjemahkan ke css sebagai merah. Jadi setelah transpilasi di inspektur kita akan lihat

 color: red; 


Contoh lain menggunakan nilai topik
 // 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} /> 

Gaya responsif


Untuk menjelaskan properti responsif dengan cepat, cukup berikan array nilai

 <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 ]} /> 

Varian


Sistem gaya memungkinkan kita untuk mendefinisikan objek yang dapat digunakan kembali dalam topik kita yang berisi set warna, gaya teks, dan sebagainya. Misalnya, dalam topik kami di atas, kami
Kami menggunakan opsi untuk ukuran dan warna tombol.

  /**   */ 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)}; ` } 

Implementasi opsi:

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


Komponen Tombol
 /**   */ export const Button = styled(Box.withComponent('button'))` ${buttonSize} ${buttonColor} `; Button.propTypes = { ...buttonSize.propTypes, ...buttonColor.propTypes, } 

Contoh menggunakan tombol biru berukuran sedang

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

Deskripsi dan dokumentasi yang lebih terperinci tentang sistem gaya di kantor. halaman github

UPD: saat menulis artikel, sistem gaya mendapat halaman sendiri dengan dokumentasi dan contoh-contoh https://styled-system.com/ .

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


All Articles