styled-components에서 재사용 가능한 격자 레이아웃 만들기
13383 단어 styled-componentsReactTypeScript
하는 일
React로 구성 요소를 조립해서 UI를 만드는 것도 쉬워요.
styled-components로 격자 레이아웃 구성 요소 만들기
나는 그것들을 조합해서 사용하는 것이 매우 쉽다는 것을 발견했다.
한 번 만든 물건을 떼어내도 재활용할 수 있다
styled-components로 쓴 css의 기술도 정리하기 쉬우니 추천합니다.
GitHub 참조 =>https://github.com/yutaro1204/styled-components-demo
전제 조건
・styled-component 사용법
・ CSS의 display:grid;사용 방법
TypeScript로 React의 구성 요소를 쓰기 때문에 tsx를 사용합니다.
배치
우선create-react-app을 쉽게 사용할 수 있습니다.$ npx create-react-app app-name --typescript
create-react-app을 포함하면 npx가 필요하지 않습니다.
styled-components를 설치합니다.$ yarn add styled-components @types/styled-components
응용 프로그램을 시작합니다.기본값은 입니다http://localhost:3000하계. shell
$ yarn start
인코딩
결국 이런 구조가 될 것이다.app-name/src
├── App.css
├── App.test.tsx
├── App.tsx
├── components
│ ├── Header.tsx // 追加
│ ├── Main.tsx // 追加
│ └── Sidepane.tsx // 追加
├── index.css
├── index.tsx
├── logo.svg
├── modules
│ └── styled-components.ts // 追加
├── react-app-env.d.ts
└── serviceWorker.ts
기본 src 디렉터리에서modules 디렉터리 만들기
styled-components를 위한 파일을 만듭니다.
styled-components.tsimport style from 'styled-components'
const styledComponents = {
LayoutStyles: {
Body: {
Grid: style.div`
display: grid;
grid-template-columns: 300px 1fr;
grid-template-rows: 80px 1fr;
`
},
Header: {
Grid: style.div`
grid-column: 1 / 3;
grid-row: 1 / 2;
display: grid;
grid-template-columns: 40px 1fr 1fr 1fr 1fr 40px;
background-color: #008080;
`,
// 状況によってgrid-columnの値を変化させる
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
max-height: 80px;
`
},
Main: {
Grid: style.div`
grid-column: 2 / 3;
grid-row: 2 / 3;
display: grid;
grid-template-columns: 100px 1fr 1fr 1fr 1fr 100px;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #ffe4c4;
`,
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
grid-row: ${ ({theme}) => theme.row };
height: 200px;
`,
},
Sidepane: {
Grid: style.div`
grid-column: 1 / 2;
grid-row: 2 / 3;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #696969;
`,
Item: style.div`
width: 100%;
height: 200px;
`
}
},
ComponentStyles: {
// As you prefer...
}
}
export default styledComponents
여기에는 LayoutStyles에서 Body, Header 등의 CSS 정보가 요약되어 있습니다.
다른 세부 구성 요소에 대한 CSS 정보를 ComponentsStyles에 요약합니다(여기에 나열된 내용은 없습니다).
위의 styled-components.ts대로 tsx를 고치면 이런 느낌이에요
App.tsximport React from 'react'
import styledComponents from './modules/styled-components'
import Header from './components/Header'
import Sidepane from './components/Sidepane'
import Main from './components/Main'
const BodyGrid = styledComponents.LayoutStyles.Body.Grid
const App: React.FC = () => {
return (
<BodyGrid>
<Header />
<Sidepane />
<Main />
</BodyGrid>
)
}
export default App
따라서 참고로 이 Header 구성 요소 Header가 됩니다.tsx는 이런 느낌이에요
Header.tsximport React from 'react'
import styledComponents from '../modules/styled-components'
const HeaderGrid = styledComponents.LayoutStyles.Header.Grid
const HeaderItem = styledComponents.LayoutStyles.Header.Item
const Header: React.FC = () => {
return (
<HeaderGrid>
<HeaderItem theme={{ column: '2 / 3' }}>
<p>Grid1</p>
</HeaderItem>
<HeaderItem theme={{ column: '3 / 4' }}>
<p>Grid2</p>
</HeaderItem>
<HeaderItem theme={{ column: '4 / 5' }}>
<p>Grid3</p>
</HeaderItem>
<HeaderItem theme={{ column: '5 / 6' }}>
<p>Grid4</p>
</HeaderItem>
</HeaderGrid>
)
}
export default Header
같은 요령으로 Header, Sidepane, Main을 조합하면 이런 느낌이 든다.
소박하지만 여기서부터 다양하게 꾸미면 그렇게 될까
오늘 이맘때 styled-components와reactDnD로 뭔가를 하고 싶은데...
Reference
이 문제에 관하여(styled-components에서 재사용 가능한 격자 레이아웃 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y4u0t2a1r0/items/b6fb35f29a04bba19613
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
・styled-component 사용법
・ CSS의 display:grid;사용 방법
TypeScript로 React의 구성 요소를 쓰기 때문에 tsx를 사용합니다.
배치
우선create-react-app을 쉽게 사용할 수 있습니다.$ npx create-react-app app-name --typescript
create-react-app을 포함하면 npx가 필요하지 않습니다.
styled-components를 설치합니다.$ yarn add styled-components @types/styled-components
응용 프로그램을 시작합니다.기본값은 입니다http://localhost:3000하계. shell
$ yarn start
인코딩
결국 이런 구조가 될 것이다.app-name/src
├── App.css
├── App.test.tsx
├── App.tsx
├── components
│ ├── Header.tsx // 追加
│ ├── Main.tsx // 追加
│ └── Sidepane.tsx // 追加
├── index.css
├── index.tsx
├── logo.svg
├── modules
│ └── styled-components.ts // 追加
├── react-app-env.d.ts
└── serviceWorker.ts
기본 src 디렉터리에서modules 디렉터리 만들기
styled-components를 위한 파일을 만듭니다.
styled-components.tsimport style from 'styled-components'
const styledComponents = {
LayoutStyles: {
Body: {
Grid: style.div`
display: grid;
grid-template-columns: 300px 1fr;
grid-template-rows: 80px 1fr;
`
},
Header: {
Grid: style.div`
grid-column: 1 / 3;
grid-row: 1 / 2;
display: grid;
grid-template-columns: 40px 1fr 1fr 1fr 1fr 40px;
background-color: #008080;
`,
// 状況によってgrid-columnの値を変化させる
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
max-height: 80px;
`
},
Main: {
Grid: style.div`
grid-column: 2 / 3;
grid-row: 2 / 3;
display: grid;
grid-template-columns: 100px 1fr 1fr 1fr 1fr 100px;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #ffe4c4;
`,
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
grid-row: ${ ({theme}) => theme.row };
height: 200px;
`,
},
Sidepane: {
Grid: style.div`
grid-column: 1 / 2;
grid-row: 2 / 3;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #696969;
`,
Item: style.div`
width: 100%;
height: 200px;
`
}
},
ComponentStyles: {
// As you prefer...
}
}
export default styledComponents
여기에는 LayoutStyles에서 Body, Header 등의 CSS 정보가 요약되어 있습니다.
다른 세부 구성 요소에 대한 CSS 정보를 ComponentsStyles에 요약합니다(여기에 나열된 내용은 없습니다).
위의 styled-components.ts대로 tsx를 고치면 이런 느낌이에요
App.tsximport React from 'react'
import styledComponents from './modules/styled-components'
import Header from './components/Header'
import Sidepane from './components/Sidepane'
import Main from './components/Main'
const BodyGrid = styledComponents.LayoutStyles.Body.Grid
const App: React.FC = () => {
return (
<BodyGrid>
<Header />
<Sidepane />
<Main />
</BodyGrid>
)
}
export default App
따라서 참고로 이 Header 구성 요소 Header가 됩니다.tsx는 이런 느낌이에요
Header.tsximport React from 'react'
import styledComponents from '../modules/styled-components'
const HeaderGrid = styledComponents.LayoutStyles.Header.Grid
const HeaderItem = styledComponents.LayoutStyles.Header.Item
const Header: React.FC = () => {
return (
<HeaderGrid>
<HeaderItem theme={{ column: '2 / 3' }}>
<p>Grid1</p>
</HeaderItem>
<HeaderItem theme={{ column: '3 / 4' }}>
<p>Grid2</p>
</HeaderItem>
<HeaderItem theme={{ column: '4 / 5' }}>
<p>Grid3</p>
</HeaderItem>
<HeaderItem theme={{ column: '5 / 6' }}>
<p>Grid4</p>
</HeaderItem>
</HeaderGrid>
)
}
export default Header
같은 요령으로 Header, Sidepane, Main을 조합하면 이런 느낌이 든다.
소박하지만 여기서부터 다양하게 꾸미면 그렇게 될까
오늘 이맘때 styled-components와reactDnD로 뭔가를 하고 싶은데...
Reference
이 문제에 관하여(styled-components에서 재사용 가능한 격자 레이아웃 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/y4u0t2a1r0/items/b6fb35f29a04bba19613
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
$ npx create-react-app app-name --typescript
$ yarn add styled-components @types/styled-components
$ yarn start
결국 이런 구조가 될 것이다.
app-name/src
├── App.css
├── App.test.tsx
├── App.tsx
├── components
│ ├── Header.tsx // 追加
│ ├── Main.tsx // 追加
│ └── Sidepane.tsx // 追加
├── index.css
├── index.tsx
├── logo.svg
├── modules
│ └── styled-components.ts // 追加
├── react-app-env.d.ts
└── serviceWorker.ts
기본 src 디렉터리에서modules 디렉터리 만들기styled-components를 위한 파일을 만듭니다.
styled-components.ts
import style from 'styled-components'
const styledComponents = {
LayoutStyles: {
Body: {
Grid: style.div`
display: grid;
grid-template-columns: 300px 1fr;
grid-template-rows: 80px 1fr;
`
},
Header: {
Grid: style.div`
grid-column: 1 / 3;
grid-row: 1 / 2;
display: grid;
grid-template-columns: 40px 1fr 1fr 1fr 1fr 40px;
background-color: #008080;
`,
// 状況によってgrid-columnの値を変化させる
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
max-height: 80px;
`
},
Main: {
Grid: style.div`
grid-column: 2 / 3;
grid-row: 2 / 3;
display: grid;
grid-template-columns: 100px 1fr 1fr 1fr 1fr 100px;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #ffe4c4;
`,
Item: style.div`
grid-column: ${ ({theme}) => theme.column };
grid-row: ${ ({theme}) => theme.row };
height: 200px;
`,
},
Sidepane: {
Grid: style.div`
grid-column: 1 / 2;
grid-row: 2 / 3;
height: calc(100vh - 80px);
overflow-y: scroll;
background-color: #696969;
`,
Item: style.div`
width: 100%;
height: 200px;
`
}
},
ComponentStyles: {
// As you prefer...
}
}
export default styledComponents
여기에는 LayoutStyles에서 Body, Header 등의 CSS 정보가 요약되어 있습니다.다른 세부 구성 요소에 대한 CSS 정보를 ComponentsStyles에 요약합니다(여기에 나열된 내용은 없습니다).
위의 styled-components.ts대로 tsx를 고치면 이런 느낌이에요
App.tsx
import React from 'react'
import styledComponents from './modules/styled-components'
import Header from './components/Header'
import Sidepane from './components/Sidepane'
import Main from './components/Main'
const BodyGrid = styledComponents.LayoutStyles.Body.Grid
const App: React.FC = () => {
return (
<BodyGrid>
<Header />
<Sidepane />
<Main />
</BodyGrid>
)
}
export default App
따라서 참고로 이 Header 구성 요소 Header가 됩니다.tsx는 이런 느낌이에요 Header.tsx
import React from 'react'
import styledComponents from '../modules/styled-components'
const HeaderGrid = styledComponents.LayoutStyles.Header.Grid
const HeaderItem = styledComponents.LayoutStyles.Header.Item
const Header: React.FC = () => {
return (
<HeaderGrid>
<HeaderItem theme={{ column: '2 / 3' }}>
<p>Grid1</p>
</HeaderItem>
<HeaderItem theme={{ column: '3 / 4' }}>
<p>Grid2</p>
</HeaderItem>
<HeaderItem theme={{ column: '4 / 5' }}>
<p>Grid3</p>
</HeaderItem>
<HeaderItem theme={{ column: '5 / 6' }}>
<p>Grid4</p>
</HeaderItem>
</HeaderGrid>
)
}
export default Header
같은 요령으로 Header, Sidepane, Main을 조합하면 이런 느낌이 든다.소박하지만 여기서부터 다양하게 꾸미면 그렇게 될까
오늘 이맘때 styled-components와reactDnD로 뭔가를 하고 싶은데...
Reference
이 문제에 관하여(styled-components에서 재사용 가능한 격자 레이아웃 만들기), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/y4u0t2a1r0/items/b6fb35f29a04bba19613텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)