React.js Styling Components & Elements
28 Jan 2021 | ReactReact.js Styling Components & Elements
-
Inline CSS styling
- Inline 방식으로 CSS 스타일링을 할 수 있다
- 객체 생성 후 css문법을 적는데 주의할 점은 css가 아니라는것.
- 예시: background-color => backgroundColor (Camle표기법)
- 예시: backgroundColor: ‘white’, 값은 문자열로 적어야한다
- html 태그에 style={style}로 주입한다
- 문제점은 css상에서 가능한 hover 등 pseudo effect를 넣을 수 없다는것
- 하지만 inline 방식의 style은 객체를 이용하기에 조건에 맞게 객체의 요소를 편집함으로서 동적인 effect 효과를 낼 수 있다
- re-render시에 편집된 style을 다시 태그에 주입하는 것을 이용한 것이라 state나 props가 바뀌어 re-render가 일어나야한다는 전제조건이 필요
const style = { backgroundColor: 'green' } <button style={style}></button> //버튼이 있다고 하자 if(!isStop) { style.backgroundColor = 'red'; } // 이와 같이 조건에 맞게 객체의 요소를 직접 편집할 수 있다
-
Change the className
- 리액트에서 {}의 의미는 Javascript를 이용한다는 것이다★
- 즉, 뭐든 바닐라 js로 하기 나름인건데 className 역시 {}를 이용해 얼마든지 변경이 가능하다
- className은 css와도 연관이 되므로 className이 바뀔때마다 스타일링이 바뀌는 환상적인 경험을 할 수 있다
/** 다음과 같은 CSS가 있다고 하자 .red { color: red; } .bold { font-weight: bold; } */ // 클래스이름을 저장할 빈 배열 생성 const classes = []; // 조건에 맞춰서 배열을 변경 if (this.state.length <= 2) { classses.push('red', 'bold'); } // className=red bold가 되므로 css가 적용이 된다 <div className={classes.join(' ')}> <p>어쩌구</p> </div>
-
Radium
- Inline 방식의 스타일 관리를 해주는 멋진 패키지가 있다
- 이것을 이용하면 hover와 같은 pseudo selector와 media query도 inline으로 적용이 가능하다
- npm install –save radium 설치 고고
- radium을 사용하려면 import와 export 설정이 필요하다
- pseudo selector는 ‘ ‘로 감싸서 사용
import Radium from 'radium'; // import 필요 const app = () => { const style = { ':hover': 'salmon' // 'pseudo selector' } } export default Radium(app); // Radium 메소드로 export
- media query도 사용법은 위와 같다
- 주의할점은 최상위 컴포넌트의 전체를 Radium의 StyleRoot 컴포넌트로 감싸주어야한다
import Radium,{ StyleRoot } from 'radium'; // import 필요 const app = () => { const style = { '@media (min-width: 500px)': width: '450px'; } return ( <StyleRoot> // * StyleRoot로 감싸야함 <div> ... </div> </StyleRoot> ) } export default Radium(app); // Radium 메소드로 export
-
styled-components library
- https://styled-components.com/ 공식 홈페이지
- npm install –save styled-components 라이브러리 설치
- import styled from ‘styled-components’;
- styled.모든HTML태그 백틱 사이에 css를 적는다
- 스타일링한 태그를 컴포넌트처럼 쓸 수 있다. props 역시 전달이 가능하고 이벤트도 걸 수 있다
- 이 역시 자바스크립트이기에 아래처럼 사용이 가능
import styled from 'styled-components'; const StyledDiv = styled.div` width: 60% color: ${props => props.value ? 'red' : 'black'} ... @media (min-width: 500px){ width: 450px; } `; // css를 백틱 사이에 적는다 // 이렇게 스타일링한 컴포넌트를 html 태그처럼 사용한다 <StyledDiv alt={this.state.value}> <h1>hi</h1> </StyledDiv>
-
Class Module
- react-scripts 2.0.0 이상 버전에서는 eject를 통한 설정파일 편집을 하지 않고도 class module을 이용한 styling이 가능하다
- 저마다 고유한 format의 className을 정의하기 때문에 충돌을 방지할 수 있다
- css 파일을 만들때 xxx.module.css 로 지정하여 .name으로 styling 한다
- 사용처에서 import 하고 className={변수명.name}으로 사용
/* Button.module.css 파일명 */ .error { background-color: red; }
import styles from './Button.module.css'; <button className={styles.error}>btn</button>