React Style
React ์์ ์คํ์ผ๋งํ๋ ๋ฐฉ๋ฒ์ ์์๋ด
๋๋ค.
React ์์ ์คํ์ผ๋ง ํ๋ ๋ฐฉ๋ฒ
โข
โข
โข
BootStrap
โข
React-BootStrap
inline style
์ปดํฌ๋ํธ์ style ์์ฑ์ ์ง์ ์คํ์ผ ์์ฑ์ ์ ์ํ๋ ๋ฐฉ๋ฒ
๋ฌธ๋ฒ
<์ปดํฌ๋ํธ style={ { ์์ฑ1 : '๊ฐ1', ์์ฑ2: '๊ฐ2' } } />
JavaScript
๋ณต์ฌ
์ปดํฌ๋ํธ์ style ์์ฑ์ ์ ์ํ์ฌ { } ํํ์ ์์์, { } ๊ฐ์ฒด์ ํํ๋ก ์คํ์ผ์ ์ง์ ํฉ๋๋ค.
โข
์คํ์ผ ์์ฑ : ์ผ๋ฐ์ ์ผ๋ก CSS ์คํ์ผ ์ํธ์์๋ ์คํ์ผ ์์ฑ์ ์ผ๋ฐฅ ์ผ์ด์ค(โstyle-propertyโ) ๋ก ์ง์ ํ์ง๋ง, React ์ ์คํ์ผ ์์ฑ์ ์นด๋ฉ ์ผ์ด์ค(โstylePropertyโ) ๋ก ์ง์ ํฉ๋๋ค.
โข
์คํ์ผ ๊ฐ : โ๊ฐโ ๋๋ โ๊ฐโ ๋ฐ์ดํ๋ก ๋ฌถ์ด์ ์ง์ ํฉ๋๋ค.
์์ ์ฝ๋
์ธ๋ผ์ธ ์คํ์ผ์ ์ ์ฉํ์ฌ ๋ฒํผ์ ๋ง๋ค์ด ๋ด
๋๋ค.
๊ธฐ๋ณธ ๋ฒํผ
Button.jsx
import React from 'react'
const Button = () => {
return (
<button style={{
backgroundColor: 'royalblue',
color: 'white',
fontWeight: 'bold',
outline: 'none',
border: 'none',
margin: '0 2px',
padding: '10px 24px',
borderRadius: '6px',
cursor: 'pointer',
}}>Button</button>
)
}
export default Button
JavaScript
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import React from 'react'
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
let color = 'white';
let backgroundColor = 'black';
let padding = '12px 24px';
let display = 'inline-block';
let fontSize = '14px';
let width = 'auto';
let margin = '0 4px';
switch (btnStyle) {
case 'primary': backgroundColor = '#007BFF'; break;
case 'secondary': backgroundColor = '#6C757D'; break;
case 'success': backgroundColor = '#28A745'; break;
case 'danger': backgroundColor = '#DC3545'; break;
case 'warning': backgroundColor = '#FFC107'; color = 'black'; break;
case 'info': backgroundColor = '#17A2B8'; break;
case 'light': backgroundColor = '#F8F9FA'; color = 'black'; break;
case 'dark': backgroundColor = '#343A40'; break;
default: break;
}
switch (btnSize) {
case 'xs': padding = '2px 8px'; fontSize = '10px'; break;
case 'sm': padding = '6px 12px'; fontSize = '12px'; break;
case 'md': padding = '12px 24px'; fontSize = '14px'; break;
case 'lg': padding = '14px 32px'; fontSize = '16px'; break;
case 'xl': padding = '18px 40px'; fontSize = '18px'; break;
case 'block':
padding = '18px 40px'; display = 'block'; width = '100%';
margin = '10px 6px'; fontSize = '20px';
break;
default: break;
}
let style = {
display : display,
width: width,
backgroundColor : backgroundColor,
color : color,
fontWeight: 'bold',
outline: 'none',
border: 'none',
margin: margin,
padding: padding,
fontSize: fontSize,
borderRadius: '6px',
cursor: 'pointer',
}
return (
<button style={style} onClick={() => onClick()}>{text}</button>
)
}
export default CustomButton
JavaScript
๋ณต์ฌ
App.js
import './App.css';
import Button from './components/Button';
import CustomButton from './components/CustomButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>inline style</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<Button />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
<h2>sm</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
<h2>md</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
<h2>lg</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
<h2>xl</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
<h2>block</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
import CSS
์ธ๋ถ์ ์คํ์ผ ์ํธ(CSS) ํ์ผ์ ์์ฑํ๊ณ , ์ด๋ฅผ ๋ถ๋ฌ์์ ์คํ์ผ์ ์ ์ฉํ๋ ๋ฐฉ๋ฒ
๋ฌธ๋ฒ
import './ํ์ผ๋ช
.css';
JavaScript
๋ณต์ฌ
<์ปดํฌ๋ํธ id="๊ณ ์ ํ์์ด๋" className="ํด๋์ค์ด๋ฆ" />
JavaScript
๋ณต์ฌ
์์์ฝ๋
import CSS ์ ์ ์ฉํ์ฌ ๋ฒํผ์ ๋ง๋ค์ด ๋ด
๋๋ค.
๊ธฐ๋ณธ ๋ฒํผ
Button.jsx
import React from 'react';
import './Button.css';
const Button = ({ id }) => {
return (
<button id={id} className='btn'>Button</button>
)
}
export default Button
JavaScript
๋ณต์ฌ
Button.css
.btn {
background-color: royalblue;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 2px;
padding: 10px 24px;
border-radius: 6px;
cursor: pointer;
}
#btn {
background-color: red;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 2px;
padding: 10px 24px;
border-radius: 6px;
cursor: pointer;
}
CSS
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import React from 'react'
import './CustomButton.css'
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
return (
<button className={`btn ${btnStyle} ${btnSize}`} onClick={() => onClick()}>{text}</button>
)
}
export default CustomButton
JavaScript
๋ณต์ฌ
CustomButton.css
.btn {
display: inline-block;
width: auto;
background-color: black;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 4px;
padding: 12px 24px;
font-size: 14px;
border-radius: 6px;
cursor: pointer;
}
.btn:hover {
box-shadow: 2px 2px 2px rgba(0,0,0,0.5);
filter: brightness(80%) contrast(100%) saturate(100%);
}
.btn:active {
box-shadow: none;
}
.btn.xs {
padding: 2px 8px;
font-size: 10px;
}
.btn.sm {
padding: 6px 12px;
font-size: 12px;
}
.btn.md {
padding: 12px 24px;
font-size: 14px;
}
.btn.lg {
padding: 14px 32px;
font-size: 16px;
}
.btn.xl {
padding: 18px 40px;
font-size: 18px;
}
.btn.block {
padding: 18px 40px;
display: block;
width: 100%;
margin: 10px 6px;
font-size: 20px;
}
/* Color variations */
.btn.primary { background-color: #007BFF; }
.btn.secondary { background-color: #6C757D; }
.btn.success { background-color: #28A745; }
.btn.danger { background-color: #DC3545; }
.btn.warning { background-color: #FFC107; color: black; }
.btn.info { background-color: #17A2B8; }
.btn.light { background-color: #F8F9FA; color: black; }
.btn.dark { background-color: #343A40; }
CSS
๋ณต์ฌ
App.js
import './App.css';
import Button from './components/Button/Button';
import CustomButton from './components/CustomButton/CustomButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>import css</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<Button />
<Button id='btn' />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
<h2>sm</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
<h2>md</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
<h2>lg</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
<h2>xl</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
<h2>block</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
์ฃผ์์ฌํญ
์๋ก ๋ค๋ฅธ ์ปดํฌ๋ํธ์์ ๊ฐ๋ณ์ ์ผ๋ก ๋ค๋ฅธ CSS ๋ฅผ import ํ๋๋ผ๋, ์คํ์ผ์ด ์ ์ญ์ ์ ์ฉ๋ฉ๋๋ค.
๊ฐ๋ณ์ ์ธ ์ปดํฌ๋ํธ์์, ๊ฐ๊ฐ์ CSS import ํ๋๋ผ๊ณ ์ค์ ๋ก๋ ํ๋์ html ์ ๊ฐ๊ฐ์ <style> ์ ๋๋๋ง ๋ฉ๋๋ค.
๋ฐ๋ผ์, ์ปดํฌ๋ํธ๋ณ๋ก import ํ CSS ํ์ผ์ด ๊ฒฐ๊ณผ์ ์ผ๋ก๋ ํ๋๋ก ํฉ์ณ์ ์ ์ ์ฉ๋๋ ๊ฒ์ ๋ณผ ์ ์์ต๋๋ค.
Button.jsx ์ปดํฌ๋ํธ์์ ๊ฐ์ ๊ฒฝ๋ก์ Button.css ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
CustomButton.jsx ์ปดํฌ๋ํธ์์ ๊ฐ์ ๊ฒฝ๋ก์ CustomButton.css ๋ฅผ ํฌํจํ๊ณ ์์ต๋๋ค.
์ค์ ๋ก, ๊ฐ ์ปดํฌ๋ํธ์์ import ํ CSS ๋ index.html ํ์ผ์ <style> ํ๊ทธ๋ก ์ฌ๋ฌ ๊ฐ๊ฐ ๋๋๋ง ๋ฉ๋๋ค.
โข
โข
โข
โข
์ด๋ ๊ฒ ๊ฐ๋ณ๋ก import ํ css ํ์ผ์ผ ํ๋์ html ๋ก ์ ์ญ์์ ์ค์ ๋๋ค๋ณด๋, ๋ค๋ฅธ css ํ์ผ์์ ์ง์ ํ ์ ํ์๊ฐ ๊ฐ์ผ๋ฉด, ์คํ์ผ๋ง ์ค๋ณต๋๋ ํ์์ด ๋ฐ์ํฉ๋๋ค.
์ฌ๊ธฐ์๋, Button.css ์์๋ .btn ์ ํ์๋ฅผ ์ง์ ํ๊ณ , CustomButton.css ์์๋ .btn ์ ํ์๋ฅผ ์ง์ ํ๊ณ ์์ต๋๋ค. ์ด๋ฌํ ๋ฐฉ์์ผ๋ก ์ง์ ํ ๋๋, ๋ค๋ฅธ ์ปดํฌ๋ํธ์ CSS ๋ผ๋ฉด ๊ฐ์ ์ด๋ฆ์ ์ ํ์์ ์ฌ์ฉํ์ง ์๋ ๊ฒ์ด ์ข์ต๋๋ค.
๊ทธ๋ฐ๋ฐ, ์ ํ์๊ฐ ์ค๋ณต๋๋๋ผ๋, ๊ฐ ์ปดํฌ๋ํธ ๋ณ๋ก CSS ๋ฅผ ์ ์ฉ์์ผ ๋ฐ๋ก ๊ด๋ฆฌํ ์๋ ์์๊น์?
์ด์ ๋ํ ํด๊ฒฐ๋ฐฉ๋ฒ์ด ๋ฐ๋ก CSS Module ์
๋๋ค.
import CSS Module
CSS๋ฅผ ๋ชจ๋ํํ์ฌ ์ปดํฌ๋ํธ ์์ค์์ ์คํ์ผ์ ๊ด๋ฆฌํ ์ ์๋๋ก ๋์์ฃผ๋ ๊ธฐ์
ํด๋์ค ์ ํ์๋ฅผ ์ค์ฌ์ผ๋ก ์ค์ฝํ๊ฐ ์ง์ ๋ฉ๋๋ค. id๋ ํ๊ทธ ์ ํ์๋ฅผ ์ฌ์ฉํ๋ ค๋ฉด ๋ค๋ฅธ ์คํ์ผ ๋ฐฉ๋ฒ์ ์ฌ์ฉํ๊ฑฐ๋ ์ ์ญ ์คํ์ผ๋ก ์ ์ํด์ผ ํฉ๋๋ค.
1.
๊ณ ์ ํ ์ค์ฝํ: CSS Modules์ ํด๋์ค ์ด๋ฆ์ ์ง์ญ์ ์ผ๋ก ์ค์ฝํํํ์ฌ ์ ์ญ ๋ค์์คํ์ด์ค์์์ ์ถฉ๋์ ๋ฐฉ์งํฉ๋๋ค. ๊ฐ ๋ชจ๋์ ์์ฒด ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์์ฑํฉ๋๋ค.
2.
ํด๋์ค ์ด๋ฆ ๋ณํ: CSS Modules์ ํด๋์ค ์ด๋ฆ์ ์๋์ผ๋ก ๋ณํํ์ฌ ์ปดํฌ๋ํธ์ ํด๋์ค ์ด๋ฆ๊ณผ ์ถฉ๋ํ์ง ์๋๋ก ํฉ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก "camelCase"๋ก ์์ฑ๋ ํด๋์ค ์ด๋ฆ์ ํ์ดํ์ ํฌํจํ๋ "kebab-case"๋ก ๋ณํ๋ฉ๋๋ค.
3.
ํด๋์ค ์ด๋ฆ ์ฌ์ฉ: JavaScript ์ฝ๋์์ CSS Modules์ ์ฌ์ฉํ ๋๋ ํด๋น ๋ชจ๋์์ ๋ด๋ณด๋ธ ํด๋์ค๋ฅผ ๋ถ๋ฌ์์ ์ฌ์ฉํฉ๋๋ค. ์ด๋ฅผ ํตํด ์คํ์ผ์ ์ ์ฉํ๊ณ ๊ด๋ฆฌํ ์ ์์ต๋๋ค.
์ค์ ๋ก style ํ๊ทธ์ ๋๋๋ง ๋ ๋, ๊ฐ CSS ๋ชจ๋์์ ์ง์ ํ .btn ์ ํ์๊ฐ ๊ณ ์ ํ ์ด๋ฆ์ผ๋ก ์ง์ ๋์ด์ ๋๋๋ง ๋ฉ๋๋ค.
๋ฌธ๋ฒ
{ํ์ผ๋ช
}.module.css ํ์์ผ๋ก ํ์ผ ์์ฑ
import styles from './ํ์ผ๋ช
.module.css';
JavaScript
๋ณต์ฌ
<์ปดํฌ๋ํธ className={styles.ํด๋์ค์์ฑ} />
JavaScript
๋ณต์ฌ
๊ด๋ก
CSS module ์ ํด๋์ค ์ ํ์๋ ์นด๋ฉ ์ผ์ด์ค๋ก ์ฐ๋ ๊ฒ์ด ๊ด๋ก (์ผ๋ฐฅ ์ผ์ด์ค๋ ๊ฐ๋ฅ)
์นด๋ฉ์ผ์ด์ค : .formInput โก { styles.formInput }
์ผ๋ฐฅ์ผ์ด์ค : .form-input โก { styles['form-input']}
JavaScript
๋ณต์ฌ
๊ธฐ๋ณธ ๋ฒํผ
Button.jsx
import React from 'react';
// import './Button.css';
import styles from './Button.module.css';
const Button = ({ id }) => {
return (
<button id={id} className={styles.btn}>Button</button>
)
}
export default Button
JavaScript
๋ณต์ฌ
Button.module.css
.btn {
background-color: royalblue;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 2px;
padding: 10px 24px;
border-radius: 6px;
cursor: pointer;
}
#btn {
background-color: red;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 2px;
padding: 10px 24px;
border-radius: 6px;
cursor: pointer;
}
CSS
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import React from 'react'
// import './CustomButton.css'
import styles from './CustomButton.module.css';
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
return (
<button className={`${styles.btn} ${styles[btnStyle]} ${styles[btnSize]}`}
onClick={() => onClick()}>{text}</button>
)
}
export default CustomButton
JavaScript
๋ณต์ฌ
CustomButton.module.css
.btn {
display: inline-block;
width: auto;
background-color: black;
color: white;
font-weight: bold;
outline: none;
border: none;
margin: 0 4px;
padding: 12px 24px;
font-size: 14px;
border-radius: 6px;
cursor: pointer;
}
.btn:hover {
box-shadow: 2px 2px 2px rgba(0,0,0,0.5);
filter: brightness(80%) contrast(100%) saturate(100%);
}
.btn:active {
box-shadow: none;
}
.btn.xs {
padding: 2px 8px;
font-size: 10px;
}
.btn.sm {
padding: 6px 12px;
font-size: 12px;
}
.btn.md {
padding: 12px 24px;
font-size: 14px;
}
.btn.lg {
padding: 14px 32px;
font-size: 16px;
}
.btn.xl {
padding: 18px 40px;
font-size: 18px;
}
.btn.block {
padding: 18px 40px;
display: block;
width: 100%;
margin: 10px 6px;
font-size: 20px;
}
/* Color variations */
.btn.primary { background-color: #007BFF; }
.btn.secondary { background-color: #6C757D; }
.btn.success { background-color: #28A745; }
.btn.danger { background-color: #DC3545; }
.btn.warning { background-color: #FFC107; color: black; }
.btn.info { background-color: #17A2B8; }
.btn.light { background-color: #F8F9FA; color: black; }
.btn.dark { background-color: #343A40; }
CSS
๋ณต์ฌ
App.js
import './App.css';
import Button from './components/Button/Button';
import CustomButton from './components/CustomButton/CustomButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>import css</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<Button />
<Button id='btn' />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
<h2>sm</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
<h2>md</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
<h2>lg</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
<h2>xl</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
<h2>block</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
styled-components
React ์์ ์คํ์ผ์ด ์ ์ฉ๋ ์ปดํฌ๋ํธ๋ฅผ ์ฌ์ฉํ ์ ์๊ฒ ํด์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
์ค์น
npm install styled-components
Shell
๋ณต์ฌ
๋ฌธ๋ฒ
import styled from 'styled-components';
const ์ปดํฌ๋ํธ๋ช
= styled.ํ๊ทธ๋ช
`
์์ฑ1 : ๊ฐ1;
์์ฑ2 : ๊ฐ2;
`;
JavaScript
๋ณต์ฌ
1.
styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ import ํฉ๋๋ค.
2.
styled.ํ๊ทธ๋ช
- ์ฌ์ฉํ ํ๊ทธ ์ด๋ฆ์ ์ง์ ํฉ๋๋ค.
3.
` ` ํ
ํ๋ฆฟ ๋ฆฌํฐ๋ด์ ์ฌ์ฉํ์ฌ ์คํ์ผ ์์ฑ์ ์ง์ ํฉ๋๋ค.
a.
์์ฑ์ ์ผ๋ฐฅ ์ผ์ด์ค(โstyle-propertyโ)๋ก ์ง์ ํฉ๋๋ค.
b.
๊ฐ์ ๋ฐ์ดํ(โโ) ์์ด ์ง์ ํฉ๋๋ค.
์์ ์ฝ๋
styled-components ๋ผ์ด๋ธ๋ฌ๋ฆฌ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋ง๋ค์ด ๋ด
๋๋ค.
๊ธฐ๋ณธ ๋ฒํผ
Button.jsx
import React from 'react'
import styled from 'styled-components';
// ๋ฒํผ ์คํ์ผ
const buttonStyles = `
font-weight: bold;
outline: none;
border: none;
margin: 0 2px;
padding: 10px 24px;
border-radius: 6px;
cursor: pointer;
`;
// ์ผ๋ฐ ๋ฒํผ ์คํ์ผ
const standard = `
background-color: royalblue;
color: white;
`;
// ID๊ฐ "btn"์ธ ๋ฒํผ ์คํ์ผ
const unique = `
background-color: red;
color: white;
`;
// ์คํ์ผ๋ ์ปดํฌ๋ํธ ์์ฑ
const StyledButton = styled.button`
${buttonStyles}
${props => props.id === 'btn' ? unique : standard}
`;
// Button ์ปดํฌ๋ํธ
const Button = ({ id }) => {
return <StyledButton id={id}>Button</StyledButton>;
}
export default Button;
JavaScript
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import React from 'react';
import styled from 'styled-components';
const StyledButton = styled.button`
display: ${props => props.display || 'inline-block'};
width: ${props => props.width || 'auto'};
background-color: ${props => props.backgroundColor || 'black'};
color: ${props => props.color || 'white'};
font-weight: bold;
outline: none;
border: none;
margin: ${props => props.margin || '0 4px'};
padding: ${props => props.padding || '12px 24px'};
font-size: ${props => props.fontSize || '14px'};
border-radius: 6px;
cursor: pointer;
`;
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
let backgroundColor = 'black';
let color = 'white';
let padding = '12px 24px';
let display = 'inline-block';
let fontSize = '14px';
let width = 'auto';
let margin = '0 4px';
switch (btnStyle) {
case 'primary': backgroundColor = '#007BFF'; break;
case 'secondary': backgroundColor = '#6C757D'; break;
case 'success': backgroundColor = '#28A745';break;
case 'danger': backgroundColor = '#DC3545'; break;
case 'warning': backgroundColor = '#FFC107'; color = 'black'; break;
case 'info': backgroundColor = '#17A2B8'; break;
case 'light': backgroundColor = '#F8F9FA'; color = 'black'; break;
case 'dark': backgroundColor = '#343A40'; break;
default: break;
}
switch (btnSize) {
case 'xs': padding = '2px 8px'; fontSize = '10px'; break;
case 'sm': padding = '6px 12px'; fontSize = '12px'; break;
case 'md': padding = '12px 24px'; fontSize = '14px'; break;
case 'lg': padding = '14px 32px'; fontSize = '16px'; break;
case 'xl': padding = '18px 40px'; fontSize = '18px'; break;
case 'block': padding = '18px 40px'; display = 'block'; width = '100%'; margin = '10px 6px'; fontSize = '20px'; break;
default: break;
}
return (
<StyledButton
backgroundColor={backgroundColor}
color={color}
padding={padding}
display={display}
fontSize={fontSize}
width={width}
margin={margin}
onClick={onClick}
>
{text}
</StyledButton>
);
};
export default CustomButton;
JavaScript
๋ณต์ฌ
App.js
import './App.css';
import Button from './components/Button';
import CustomButton from './components/CustomButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>styled components</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<Button />
<Button id='btn' />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
<h2>sm</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
<h2>md</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
<h2>lg</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
<h2>xl</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
<h2>block</h2>
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
BootStrap
๋ฐ์ํ ์น ๋์์ธ ๋ฐ ๊ฐ๋ฐ์ ์ํ HTML, CSS ๋ฐ JavaScript ํ๋ ์์ํฌ
๋ฌธ๋ฒ
<์ปดํฌ๋ํธ className="๋ฏธ๋ฆฌ์ ์๋ ํด๋์ค์์ฑ" />
JavaScript
๋ณต์ฌ
์์
<button className="btn btn-primary">Button</button>
JavaScript
๋ณต์ฌ
์์ ์ฝ๋
bootstrap ์ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋ง๋ค์ด ๋ด
๋๋ค.
๊ธฐ๋ณธ ๋ฒํผ
Button.jsx
import React from 'react';
import 'bootstrap/dist/css/bootstrap.min.css'; // โ
Bootstrap CSS๋ฅผ ์ถ๊ฐ
const Button = () => {
return (
<button className="btn btn-primary">Button</button>
);
}
export default Button;
JavaScript
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import React from 'react';
import 'bootstrap/dist/css/bootstrap.min.css'; // โ
Bootstrap CSS๋ฅผ ์ถ๊ฐ
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
let buttonClasses = 'btn';
switch (btnStyle) {
case 'primary': buttonClasses += ' btn-primary'; break;
case 'secondary': buttonClasses += ' btn-secondary'; break;
case 'success': buttonClasses += ' btn-success'; break;
case 'danger': buttonClasses += ' btn-danger'; break;
case 'warning': buttonClasses += ' btn-warning'; break;
case 'info': buttonClasses += ' btn-info'; break;
case 'light': buttonClasses += ' btn-light'; break;
case 'dark': buttonClasses += ' btn-dark'; break;
default: break;
}
switch (btnSize) {
case 'xs': buttonClasses += ' btn-xs'; break;
case 'sm': buttonClasses += ' btn-sm'; break;
case 'md': buttonClasses += ' btn-md'; break;
case 'lg': buttonClasses += ' btn-lg'; break;
case 'xl': buttonClasses += ' '; break; // bootstrap5 ๋ฒ์ btn-xl โ deprecated
case 'block': buttonClasses += ' '; break; // bootstrap5 ๋ฒ์ btn-block โ deprecated
default: break;
}
return (
<button className={buttonClasses} onClick={() => onClick()}>{text}</button>
);
}
export default CustomButton;
JavaScript
๋ณต์ฌ
App.js
import './App.css';
import Button from './components/Button';
import CustomButton from './components/CustomButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>bootstrap</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<Button />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
</div>
<h2>sm</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
</div>
<h2>md</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
</div>
<h2>lg</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
</div>
<h2>xl</h2>
<div class="d-grid gap-2 col-6 mx-auto">
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
</div>
<h2>block</h2>
<div class="d-grid gap-2">
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ
React-BootStrap
Bootstrap์ React ์ ํ๋ฆฌ์ผ์ด์
์์ ์ฌ์ฉํ ์ ์๋๋ก React ์ปดํฌ๋ํธ๋ก ๊ฐ์ผ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
React์ Bootstrap์ ์กฐํฉํ์ฌ ํจ๊ณผ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋๋ก ํด์ฃผ๋ฉฐ, React์ ์ปดํฌ๋ํธ ๊ธฐ๋ฐ ์ํคํ
์ฒ๋ฅผ ํ์ฉํ์ฌ Bootstrap์ ๋์ฑ ์ ์ฐํ๊ฒ ์ฌ์ฉํ ์ ์๊ฒ ํฉ๋๋ค.
์ค์น
npm install react-bootstrap bootstrap
Shell
๋ณต์ฌ
๋ฌธ๋ฒ
// ๋ฐฉ๋ฒ 1๏ธโฃ
import ์ปดํฌ๋ํธ from 'react-bootstrap/์ปดํฌ๋ํธ';
// ๋ฐฉ๋ฒ 2๏ธโฃ
import { ์ปดํฌ๋ํธ} from 'react-bootstrap';
<์ปดํฌ๋ํธ ์ต์
="๊ฐ" ์ต์
2="๊ฐ" />
JavaScript
๋ณต์ฌ
์์
import Button from 'react-bootstrap/Button';
<Button variant='primary' onClick={onClick}>Button</Button>
JavaScript
๋ณต์ฌ
์์ ์ฝ๋
react-bootstrap ์ ์ฌ์ฉํ์ฌ ๋ฒํผ์ ๋ง๋ค์ด ๋ด
๋๋ค.
๊ธฐ๋ณธ ๋ฒํผ
ReactButton.jsx
import React from 'react';
import Button from 'react-bootstrap/Button';
const ReactButton = () => {
return (
<Button variant='primary'>Button</Button>
);
}
export default ReactButton;
JavaScript
๋ณต์ฌ
์ปค์คํ ๋ฒํผ
CustomButton.jsx
import 'bootstrap/dist/css/bootstrap.min.css';
import Button from 'react-bootstrap/Button';
const CustomButton = ({ text, btnStyle, btnSize, onClick }) => {
let variant = 'primary';
switch (btnStyle) {
case 'secondary': variant = 'secondary'; break;
case 'success': variant = 'success'; break;
case 'danger': variant = 'danger'; break;
case 'warning': variant = 'warning'; break;
case 'info': variant = 'info'; break;
case 'light': variant = 'light'; break;
case 'dark': variant = 'dark'; break;
default: break;
}
let size = '';
switch (btnSize) {
case 'xs': size = 'sm'; break;
case 'sm': size = 'sm'; break;
case 'md': size = ''; break;
case 'lg': size = 'lg'; break;
default: break;
}
return (
<Button variant={variant} size={size} onClick={() => onClick()}>{text}</Button>
);
}
export default CustomButton;
JavaScript
๋ณต์ฌ
App.js
import './App.css';
import CustomButton from './components/CustomButton';
import ReactButton from './components/ReactButton';
function App() {
const onClick = () => {
alert('Clicked!')
}
return (
<div className='container'>
<h1>react-bootstrap</h1>
<hr/>
<h2>๊ธฐ๋ณธ ๋ฒํผ</h2>
<ReactButton />
<hr/>
<h2>์ปค์คํ
๋ฒํผ</h2>
<h2>xs</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='xs' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xs' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xs' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xs' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xs' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xs' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xs' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xs' onClick={onClick} />
</div>
<h2>sm</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='sm' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='sm' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='sm' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='sm' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='sm' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='sm' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='sm' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='sm' onClick={onClick} />
</div>
<h2>md</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='md' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='md' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='md' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='md' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='md' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='md' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='md' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='md' onClick={onClick} />
</div>
<h2>lg</h2>
<div className='d-flex justify-content-between align-items-center'>
<CustomButton text='primary' btnStyle='primary' btnSize='lg' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='lg' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='lg' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='lg' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='lg' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='lg' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='lg' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='lg' onClick={onClick} />
</div>
<h2>xl</h2>
<div class="d-grid gap-2 col-6 mx-auto">
<CustomButton text='primary' btnStyle='primary' btnSize='xl' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='xl' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='xl' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='xl' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='xl' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='xl' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='xl' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='xl' onClick={onClick} />
</div>
<h2>block</h2>
<div class="d-grid gap-2">
<CustomButton text='primary' btnStyle='primary' btnSize='block' onClick={onClick} />
<CustomButton text='secondary' btnStyle='secondary' btnSize='block' onClick={onClick} />
<CustomButton text='success' btnStyle='success' btnSize='block' onClick={onClick} />
<CustomButton text='danger' btnStyle='danger' btnSize='block' onClick={onClick} />
<CustomButton text='warning' btnStyle='warning' btnSize='block' onClick={onClick} />
<CustomButton text='info' btnStyle='info' btnSize='block' onClick={onClick} />
<CustomButton text='light' btnStyle='light' btnSize='block' onClick={onClick} />
<CustomButton text='dark' btnStyle='dark' btnSize='block' onClick={onClick} />
</div>
</div>
);
}
export default App;
JavaScript
๋ณต์ฌ