From f759e57e79265dbb551ca095c39b72a3e85602b2 Mon Sep 17 00:00:00 2001 From: Olivier Tassinari Date: Sat, 28 Jul 2018 13:24:12 +0200 Subject: [PATCH] [Grid] Document the nested capability --- docs/src/pages/layout/grid/ComplexGrid.js | 63 +++++++++++++++++ docs/src/pages/layout/grid/InteractiveGrid.js | 16 +++-- docs/src/pages/layout/grid/NestedGrid.js | 64 ++++++++++++++++++ docs/src/pages/layout/grid/grid.md | 16 +++++ pages/layout/grid.js | 14 ++++ static/images/grid/complex.jpg | Bin 0 -> 12468 bytes 6 files changed, 169 insertions(+), 4 deletions(-) create mode 100644 docs/src/pages/layout/grid/ComplexGrid.js create mode 100644 docs/src/pages/layout/grid/NestedGrid.js create mode 100644 static/images/grid/complex.jpg diff --git a/docs/src/pages/layout/grid/ComplexGrid.js b/docs/src/pages/layout/grid/ComplexGrid.js new file mode 100644 index 00000000000000..4a05737b7c9ffb --- /dev/null +++ b/docs/src/pages/layout/grid/ComplexGrid.js @@ -0,0 +1,63 @@ +import React from 'react'; +import PropTypes from 'prop-types'; +import { withStyles } from '@material-ui/core/styles'; +import Grid from '@material-ui/core/Grid'; +import Paper from '@material-ui/core/Paper'; +import Typography from '@material-ui/core/Typography'; +import ButtonBase from '@material-ui/core/ButtonBase'; + +const styles = theme => ({ + root: { + flexGrow: 1, + maxWidth: 600, + padding: theme.spacing.unit * 2, + }, + image: { + width: 128, + height: 128, + }, + img: { + margin: 'auto', + display: 'block', + maxWidth: '100%', + maxHeight: '100%', + }, +}); + +function ComplexGrid(props) { + const { classes } = props; + return ( + + + + + complex + + + + + + + Standard license + + Full resolution 1920x1080 • JPEG + ID: 1030114 + + + Remove + + + + $19.00 + + + + + ); +} + +ComplexGrid.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles)(ComplexGrid); diff --git a/docs/src/pages/layout/grid/InteractiveGrid.js b/docs/src/pages/layout/grid/InteractiveGrid.js index fdbd5c3ce7efce..b5412ce92f710d 100644 --- a/docs/src/pages/layout/grid/InteractiveGrid.js +++ b/docs/src/pages/layout/grid/InteractiveGrid.js @@ -67,11 +67,12 @@ class InteractiveGrid extends React.Component { - - + + direction - + justify } label="space-around" /> + } + label="space-evenly" + /> - + alignItems ({ + root: { + flexGrow: 1, + }, + paper: { + padding: theme.spacing.unit, + textAlign: 'center', + color: theme.palette.text.secondary, + }, +}); + +function FormRow(props) { + const { classes } = props; + + return ( + + + item + + + item + + + item + + + ); +} + +FormRow.propTypes = { + classes: PropTypes.object.isRequired, +}; + +function NestedGrid(props) { + const { classes } = props; + + return ( +
+ + + + + + + + + + + +
+ ); +} + +NestedGrid.propTypes = { + classes: PropTypes.object.isRequired, +}; + +export default withStyles(styles)(NestedGrid); diff --git a/docs/src/pages/layout/grid/grid.md b/docs/src/pages/layout/grid/grid.md index d31d361d7d5f2d..00ced9299657b2 100644 --- a/docs/src/pages/layout/grid/grid.md +++ b/docs/src/pages/layout/grid/grid.md @@ -63,6 +63,22 @@ Unfortunately, CSS grid is only supported by the most recent browsers. {{"demo": "pages/layout/grid/CSSGrid.js"}} +## Nested Grid + +The `container` and `item` properties are two independant boolean. They can be combined. + +> A flex **container** is the box generated by an element with a computed display of `flex` or `inline-flex`. In-flow children of a flex container are called flex **items** and are laid out using the flex layout model. + +https://www.w3.org/TR/css-flexbox-1/#box-model + +{{"demo": "pages/layout/grid/NestedGrid.js"}} + +## Complex Grid + +The following demo doesn't follow the Material Design specification, but illustrates how the grid can be used to build complex layouts. + +{{"demo": "pages/layout/grid/ComplexGrid.js"}} + ## Limitations ### Negative margin diff --git a/pages/layout/grid.js b/pages/layout/grid.js index 806a99182bdd18..a83b84a16252b9 100644 --- a/pages/layout/grid.js +++ b/pages/layout/grid.js @@ -48,6 +48,20 @@ module.exports = require('fs') raw: preval` module.exports = require('fs') .readFileSync(require.resolve('docs/src/pages/layout/grid/CSSGrid'), 'utf8') +`, + }, + 'pages/layout/grid/NestedGrid.js': { + js: require('docs/src/pages/layout/grid/NestedGrid').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/layout/grid/NestedGrid'), 'utf8') +`, + }, + 'pages/layout/grid/ComplexGrid.js': { + js: require('docs/src/pages/layout/grid/ComplexGrid').default, + raw: preval` +module.exports = require('fs') + .readFileSync(require.resolve('docs/src/pages/layout/grid/ComplexGrid'), 'utf8') `, }, 'pages/layout/grid/AutoGridNoWrap.js': { diff --git a/static/images/grid/complex.jpg b/static/images/grid/complex.jpg new file mode 100644 index 0000000000000000000000000000000000000000..f4d00712b8355c6b2261ac4c1df67c882173a6f5 GIT binary patch literal 12468 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