File tree Expand file tree Collapse file tree 16 files changed +227
-70
lines changed Expand file tree Collapse file tree 16 files changed +227
-70
lines changed Original file line number Diff line number Diff line change 1
- .layout-fit {
2
- display : flex;
3
- box-sizing : border-box;
4
- }
5
- .layout-fit > * {
6
- flex-grow : 1 ;
7
- }
8
-
Original file line number Diff line number Diff line change 1
1
import React from 'react' ;
2
- import './App.css ' ;
2
+ import Layout from './Layout ' ;
3
3
4
- const App = ( props ) => {
4
+ const containerStyle = { width : 200 , height : 200 , border : '4px solid #923131' } ;
5
+ const itemStyle = { backgroundColor : '#ff4b4b' } ;
6
+
7
+ const App = props => {
5
8
return (
6
- < div
7
- className = "layout-fit"
8
- style = { { width : 200 , height : 200 , border : "4px solid #923131" } }
9
- >
10
- < div style = { { backgroundColor : "#ff4b4b" } } > </ div >
11
- </ div >
9
+ < Layout type = "fit" >
10
+ < div style = { containerStyle } >
11
+ < div style = { itemStyle } />
12
+ </ div >
13
+ </ Layout >
12
14
) ;
13
- }
15
+ } ;
14
16
15
17
export default App ;
Original file line number Diff line number Diff line change
1
+ /* FIT */
2
+ .layout-fit {
3
+ display : flex;
4
+ box-sizing : border-box;
5
+ }
6
+ .layout-fit > * {
7
+ flex-grow : 1 ;
8
+ }
9
+
10
+ /* CARD */
11
+ .layout-card {
12
+ display : flex;
13
+ box-sizing : border-box;
14
+ }
15
+ .layout-card > * {
16
+ flex-grow : 1 ;
17
+ }
18
+
19
+ /* HBOX */
20
+ .layout-hbox {
21
+ display : flex;
22
+ }
23
+
24
+ /* VBOX */
25
+ .layout-vbox {
26
+ display : flex;
27
+ flex-direction : column;
28
+ }
Original file line number Diff line number Diff line change
1
+ import React , { Fragment } from 'react' ;
2
+ import './Layout.css' ;
3
+
4
+ export default ( { children, type } ) => {
5
+ const layoutClassName = type ? `layout-${ type } ` : '' ;
6
+
7
+ return (
8
+ < Fragment >
9
+ { React . Children . map ( children , child => {
10
+ const { className : childClassName = '' } = child . props ;
11
+ const className = `${ layoutClassName } ${ childClassName } ` ;
12
+
13
+ return React . cloneElement ( child , { className } ) ;
14
+ } ) }
15
+ </ Fragment >
16
+ ) ;
17
+ } ;
Original file line number Diff line number Diff line change 1
- .layout-card {
2
- display : flex;
3
- box-sizing : border-box;
4
- }
5
-
6
- .layout-card > * {
7
- flex-grow : 1 ;
8
- }
9
-
Original file line number Diff line number Diff line change 1
1
import React from 'react' ;
2
- import './App.css ' ;
2
+ import Layout from './Layout ' ;
3
3
4
- const App = ( { activeCard = 0 } ) => (
5
- < div
6
- className = "layout-card"
7
- style = { { width : 100 , height : 100 , border : '1px solid gray' } }
8
- >
9
- {
10
- [
11
- < div > one</ div > ,
12
- < div > two</ div >
13
- ] [ activeCard ]
14
- }
15
- </ div >
4
+ const containerStyle = { width : 100 , height : 100 ,
5
+ border : '1px solid gray' , color : 'white' } ;
6
+ const itemStyleA = { background : '#ee4d77' , padding : 4 }
7
+ const itemStyleB = { background : '#b15b90' , padding : 4 }
8
+
9
+ const App = ( { activeCard = 0 } ) => (
10
+ < Layout type = "card" >
11
+ < div style = { containerStyle } >
12
+ { [ < div style = { itemStyleA } > one</ div > , < div style = { itemStyleB } > two</ div > ] [ activeCard ] }
13
+ </ div >
14
+ </ Layout >
16
15
) ;
17
16
18
17
export default App ;
Original file line number Diff line number Diff line change
1
+ /* FIT */
2
+ .layout-fit {
3
+ display : flex;
4
+ box-sizing : border-box;
5
+ }
6
+ .layout-fit > * {
7
+ flex-grow : 1 ;
8
+ }
9
+
10
+ /* CARD */
11
+ .layout-card {
12
+ display : flex;
13
+ box-sizing : border-box;
14
+ }
15
+ .layout-card > * {
16
+ flex-grow : 1 ;
17
+ }
18
+
19
+ /* HBOX */
20
+ .layout-hbox {
21
+ display : flex;
22
+ }
23
+
24
+ /* VBOX */
25
+ .layout-vbox {
26
+ display : flex;
27
+ flex-direction : column;
28
+ }
Original file line number Diff line number Diff line change
1
+ import React , { Fragment } from 'react' ;
2
+ import './Layout.css' ;
3
+
4
+ export default ( { children, type } ) => {
5
+ const layoutClassName = type ? `layout-${ type } ` : '' ;
6
+
7
+ return (
8
+ < Fragment >
9
+ { React . Children . map ( children , child => {
10
+ const { className : childClassName = '' } = child . props ;
11
+ const className = `${ layoutClassName } ${ childClassName } ` ;
12
+
13
+ return React . cloneElement ( child , { className } ) ;
14
+ } ) }
15
+ </ Fragment >
16
+ ) ;
17
+ } ;
Original file line number Diff line number Diff line change 1
- .layout-hbox {
2
- display : flex;
3
- }
4
-
Original file line number Diff line number Diff line change 1
1
import React , { Component } from 'react' ;
2
- import './App.css' ;
2
+ import Layout from './Layout' ;
3
+
4
+ const containerStyle = { width : 300 , height : 100 , color : 'white' } ;
3
5
4
6
class App extends Component {
5
- render ( ) {
7
+ render ( ) {
6
8
return (
7
- < div
8
- className = "layout-hbox"
9
- style = { { width : 300 , height : 100 , color : "white" } }
10
- >
11
- < div style = { { width : 40 , background : "#df8f2e" } } > fixed</ div >
12
- < div style = { { flexGrow : 1 , background : "#f26f38" } } > flex 1</ div >
13
- < div style = { { flexGrow : 2 , background : "#ee4d77" } } > flex 2</ div >
14
- < div style = { { background : "#b15b90" } } > wrap</ div >
15
- </ div >
9
+ < Layout type = "hbox" >
10
+ < div style = { containerStyle } >
11
+ < div style = { { width : 40 , background : '#df8f2e' } } > fixed</ div >
12
+ < div style = { { flexGrow : 1 , background : '#f26f38' } } > flex 1</ div >
13
+ < div style = { { flexGrow : 2 , background : '#ee4d77' } } > flex 2</ div >
14
+ < div style = { { background : '#b15b90' } } > wrap</ div >
15
+ </ div >
16
+ </ Layout >
16
17
) ;
17
18
}
18
19
}
Original file line number Diff line number Diff line change
1
+ /* FIT */
2
+ .layout-fit {
3
+ display : flex;
4
+ box-sizing : border-box;
5
+ }
6
+ .layout-fit > * {
7
+ flex-grow : 1 ;
8
+ }
9
+
10
+ /* CARD */
11
+ .layout-card {
12
+ display : flex;
13
+ box-sizing : border-box;
14
+ }
15
+ .layout-card > * {
16
+ flex-grow : 1 ;
17
+ }
18
+
19
+ /* HBOX */
20
+ .layout-hbox {
21
+ display : flex;
22
+ }
23
+
24
+ /* VBOX */
25
+ .layout-vbox {
26
+ display : flex;
27
+ flex-direction : column;
28
+ }
Original file line number Diff line number Diff line change
1
+ import React , { Fragment } from 'react' ;
2
+ import './Layout.css' ;
3
+
4
+ export default ( { children, type } ) => {
5
+ const layoutClassName = type ? `layout-${ type } ` : '' ;
6
+
7
+ return (
8
+ < Fragment >
9
+ { React . Children . map ( children , child => {
10
+ const { className : childClassName = '' } = child . props ;
11
+ const className = `${ layoutClassName } ${ childClassName } ` ;
12
+
13
+ return React . cloneElement ( child , { className } ) ;
14
+ } ) }
15
+ </ Fragment >
16
+ ) ;
17
+ } ;
Original file line number Diff line number Diff line change 1
- .layout-vbox {
2
- display : flex;
3
- flex-direction : column;
4
- }
5
-
Original file line number Diff line number Diff line change 1
1
import React , { Component } from 'react' ;
2
- import './App.css' ;
2
+ import Layout from './Layout' ;
3
+
4
+ const containerStyle = { width : 100 , height : 300 , color : 'white' } ;
3
5
4
6
class App extends Component {
5
- render ( ) {
7
+ render ( ) {
6
8
return (
7
- < div
8
- className = "layout-vbox"
9
- style = { { width : 100 , height : 300 , color : "white" } }
10
- >
11
- < div style = { { height : 40 , background : "#df8f2e" } } > fixed</ div >
12
- < div style = { { flexGrow : 1 , background : "#f26f38" } } > flex 1</ div >
13
- < div style = { { flexGrow : 2 , background : "#ee4d77" } } > flex 2</ div >
14
- < div style = { { background : "#b15b90" } } > wrap</ div >
15
- </ div >
9
+ < Layout type = "vbox" >
10
+ < div style = { containerStyle } >
11
+ < div style = { { height : 40 , background : '#df8f2e' } } > fixed</ div >
12
+ < div style = { { flexGrow : 1 , background : '#f26f38' } } > flex 1</ div >
13
+ < div style = { { flexGrow : 2 , background : '#ee4d77' } } > flex 2</ div >
14
+ < div style = { { background : '#b15b90' } } > wrap</ div >
15
+ </ div >
16
+ </ Layout >
16
17
) ;
17
18
}
18
19
}
Original file line number Diff line number Diff line change
1
+ /* FIT */
2
+ .layout-fit {
3
+ display : flex;
4
+ box-sizing : border-box;
5
+ }
6
+ .layout-fit > * {
7
+ flex-grow : 1 ;
8
+ }
9
+
10
+ /* CARD */
11
+ .layout-card {
12
+ display : flex;
13
+ box-sizing : border-box;
14
+ }
15
+ .layout-card > * {
16
+ flex-grow : 1 ;
17
+ }
18
+
19
+ /* HBOX */
20
+ .layout-hbox {
21
+ display : flex;
22
+ }
23
+
24
+ /* VBOX */
25
+ .layout-vbox {
26
+ display : flex;
27
+ flex-direction : column;
28
+ }
Original file line number Diff line number Diff line change
1
+ import React , { Fragment } from 'react' ;
2
+ import './Layout.css' ;
3
+
4
+ export default ( { children, type } ) => {
5
+ const layoutClassName = type ? `layout-${ type } ` : '' ;
6
+
7
+ return (
8
+ < Fragment >
9
+ { React . Children . map ( children , child => {
10
+ const { className : childClassName = '' } = child . props ;
11
+ const className = `${ layoutClassName } ${ childClassName } ` ;
12
+
13
+ return React . cloneElement ( child , { className } ) ;
14
+ } ) }
15
+ </ Fragment >
16
+ ) ;
17
+ } ;
You can’t perform that action at this time.
0 commit comments