Styled System 是一包工具函式,用來輔助建立styled component,它的優點主要是可以讓元件建立統一的API、更便利的撰寫repoinsive(響應式設計) 樣式等。
要在css中撰寫inline-style須先安裝CSS-in-JS的library
npm install styled-system styled-components -D
styled-components可以用函式做為參數,並用props傳遞
// styled-components/common
const style from 'styled-components'
const Box = styled.div`
margin: 10px;
padding: 15px;
background: tomato
color: ${(props) => props.color}
`
export default Box
在需要使用樣式的元件導入
import Box from '../styled-components/common'
<Box color="white">styled-components-demo</Box>
將傳入的參數改用function處理
// styled-components/common
const style from 'styled-components'
const getColor = ({color}) => `
color: ${color || "black"}
`
const Box = styled.div`
margin: 10px;
padding: 15px;
background: tomato;
${getColor};
`
export default Box
也可以透過function傳入多組樣式
// styled-components
const getBoxStyle = ({ padding, margin }) => ({
margin,
padding
});
const Box = styled.div`
${getBoxStyle}
`
export default Box
styled-components具有很大的彈性可以客製編輯自己的組件樣式。
https://codesandbox.io/s/styled-components-f914e?file=/src/App.js:179-250
在最外層透過context傳遞的方式,將元件以Theme Provider包覆傳遞資料 (material ui也是透過這種方式傳遞)
被包覆的子元件可以直接調用theme裡的參數
const Box = styled.div`
margin: 15px 0;
padding: 15px 0;
background: ${({ theme }) => theme.bg.tomate}
`;
export default Box