Material-UI(α판)로 CSS in JS!
9009 단어 자바스크립트Reactmaterial-ui
Material-UI α판
이 기사 계속해서 React.js용 머티리얼 디자인 Material-UI에 대해 α브랜치(v1.0-alphe 14)의 기능을 살펴보겠습니다.
현재 v0.18에서는 CSS가 LESS에 의해 구축되고 있지만, v1.0에서는 CSS in JS의 구조가 제공되는 것 같습니다. 별도 CSS-Module을 넣거나 Webpack으로 설정할 필요도 없기 때문에 간단하게 이용할 수 있을 것 같습니다.
α 버전을 설치하려면 npm @next을 지정하십시오.
$ npm install --save material-ui@next
CSSinJS in Material-UI
Material-UI CSSinJS는
createStyleSheet
와 withStyles
라는 두 가지 API를 사용합니다. createStyleSheet
에서 DOM에 적용할 스타일을 생성하고 withStyles
에서 스타일을 적용한 DOM을 생성하는 단계입니다.createStyleSheet
createStyleSheet는 첫 번째 인수에 이름, 두 번째 인수에 스타일 객체 또는 스타일 객체를 반환하는 함수를 지정합니다. 첫 번째 인수는 단순히 디버깅 목적으로 사용되는 것 같습니다. 제 2 인수에 건네주는 함수의 인수
theme
에 대해서는 나중에 설명합니다.import { createStyleSheet } from 'material-ui/styles';
let myStyleSheet = createStyleSheet("myStyle", (theme) => {
root : {
color: '#CCC',
width: '500px',
},
});
withStyle
withStyle의 첫 번째 인수는 이전에 생성 된 스타일을 지정합니다. 반환값은 고층 컴퍼넌트(higher-order component)입니다. 고층 컴포넌트의 올바른 의미는 잘 모르겠지만, 고층 컴포넌트에 React 컴포넌트(DOM)를 넘겨주면 이전 스타일이 적용되는 새로운 DOM이 생성됩니다.
스타일이 적용되는 구성 요소에는
props
를 통해 classes
속성이 전달됩니다. className에 클래스의 속성을 지정하면 해당 요소에 스타일이 적용됩니다.import { withStyles } from 'material-ui/styles';
// いつものReactコンポーネント(ただしpropsにclassesが渡される)
const MyApp = (props) = (
<div className={props.classes.root}> //渡されたclassesを適用
Hello World
</div>
)
// スタイルを適用したコンポーネント
let StyledMyApp = withStyles(myStyleSheet)(MyApp);
// スタイル付きコンポーネントは<MuiThemeProvider>の子要素にする
ReactDOM.render(<MuiThemeProvider><StyledMyApp /></MuiThemeProvider>,
document.querySelector('#app'));
themeProvider
애플리케이션 전체에서 디자인을 통일하기 위해 테마(theme)의 개념이 있는 것 같습니다. 테마는
createMuiTheme
로 작성해, MuiThemeProvider
의 속성치로서 건네주는 것으로 적용할 수 있습니다.위의
cteateStyleSheet
두 번째 인수의 함수에 전달되는 theme
는 MuiThemeProvider
에 적용됩니다. theme 객체의 속성이 많이 있으므로 여기을 참조하십시오. 색상은 여기을 참조하십시오.사용법은 예를 들면 이런 느낌.
import { purple, green, red } from 'material-ui/styles/colors';
// 独自テーマを作って
const theme = createMuiTheme({
status: {
danger: 'orange',
},
});
// 適用する
ReactDOM.render(<MuiThemeProvider theme={theme}> ...
다만, 실제로는 그다지 테마를 작성하는 일은 없고, 테마는 그대로 이용해, 자작 컴퍼넌트에 그 테마로부터 값(색이나 폰트등)을 적용한다, 라고 하는 것이 메인이 될까라고 생각합니다. 예를 들면 이런 느낌으로.
let myStyleSheet = createStyleSheet("myStyle", (theme) => {
root : {
backgroundColor: theme.palette.primary[200],
color: theme.palette.getContrastText(theme.palette.primary[200]),
padding: `${theme.spacing.unit}px`, //余白もテーマで統一できる
},
});
위의 예와 같이 palette에 대해 getContrastText를 사용하면 배경색에 적합한 텍스트 색상이 선택됩니다. 이것으로 색환 등 더 이상 생각하지 않아도 좋네요.
해봤어
적당히 테마를 만지거나 해 보았습니다. 아무리 프레임워크가 확실히 하고 있어도, 머티리얼 디자인에 의하지 않고 적당하게 값을 지정해 버렸으므로, 전혀 이케 없네요. .
Material-UI를 이용하는 것으로, 외형에 관한 여러가지 기능이 (거의) 올인원으로 제공되기 때문에, 나와 같은 초학자에게는 추천인가라고 생각합니다.
Reference
이 문제에 관하여(Material-UI(α판)로 CSS in JS!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/vimyum/items/f89b963b7f253237e482텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)