A set of React components implementing flexboxgrid with the power of CSS Modules.
Clone or download
Latest commit b473b61 May 31, 2018
Permalink
Type Name Latest commit message Commit time
Failed to load latest commit information.
doc Use evgenyrodionov/flexboxgrid2 instead of roylee0704/react-flexbox-grid Sep 14, 2017
spec Switch to proper propType for Col size Jan 29, 2016
src Use evgenyrodionov/flexboxgrid2 instead of roylee0704/react-flexbox-grid Sep 14, 2017
test Use evgenyrodionov/flexboxgrid2 instead of roylee0704/react-flexbox-grid Sep 14, 2017
.babelrc Fix missing .css output May 31, 2018
.bumpedrc switched back to master Jan 30, 2016
.editorconfig huge changes to structures, unit-testing method, and npm packages Nov 25, 2015
.eslintignore huge changes to structures, unit-testing method, and npm packages Nov 25, 2015
.eslintrc updated eslint Dec 8, 2015
.gitignore Build dist version (fixes #129) Aug 11, 2017
.npmignore Update .npmignore (#101) Mar 19, 2017
.nvmrc fixed node version at release Jan 12, 2016
.travis.yml Update babel dependencies (#111) Apr 24, 2017
README.md Build dist version (fixes #129) Aug 11, 2017
karma.conf.js Build dist version (fixes #129) Aug 11, 2017
package.json v2.1.2 release May 31, 2018
react-flexbox-grid.d.ts Merge pull request #136 from beckend/typescript_forward_props May 30, 2018
server.js Build dist version (fixes #129) Aug 11, 2017
tests.webpack.js Update babel dependencies (#111) Apr 24, 2017
webpack.config.development.js Build dist version (fixes #129) Aug 11, 2017
webpack.config.js Merge pull request #130 from danny-andrews/build-two-versions Aug 24, 2017
webpack.config.production.js Merge pull request #130 from danny-andrews/build-two-versions Aug 24, 2017
webpack.config.test.js Merge pull request #130 from danny-andrews/build-two-versions Aug 24, 2017
yarn.lock Fix missing .css output May 31, 2018

README.md

react-flexbox-grid

npm version Build Status NPM Status

react-flexbox-grid is a set of React components that implement flexboxgrid.css. It even has an optional support for CSS Modules with some extra configuration.

http://roylee0704.github.io/react-flexbox-grid/

Setup

Installation

react-flexbox-grid can be installed as an npm package:

npm install --save react-flexbox-grid

Minimal configuration

The recommended way to use react-flexbox-grid is with a tool like webpack or Meteor, make sure you set it up to support requiring CSS files. For example, the minimum required loader configuration for webpack would look like this:

{
  test: /\.css$/,
  loader: 'style-loader!css-loader',
  include: /flexboxgrid/
}

react-flexbox-grid imports the styles from flexboxgrid, that's why we're configuring the loader for it.

CSS Modules

If you want to use CSS Modules (this is mandatory for versions earlier than v1), webpack's css-loader supports this by passing modules param in the loader configuration.

First, install style-loader and css-loader as development dependencies:

npm install --save-dev style-loader css-loader

Next, add a loader for flexboxgrid with CSS Modules enabled:

{
  test: /\.css$/,
  loader: 'style-loader!css-loader?modules',
  include: /flexboxgrid/
}

Make sure you don't have another CSS loader which also affects flexboxgrid. In case you do, exclude flexboxgrid, for example:

{
  test: /\.css$/,
  loader: 'style-loader!css-loader!postcss-loader',
  include: path.join(__dirname, 'node_modules'), // oops, this also includes flexboxgrid
  exclude: /flexboxgrid/ // so we have to exclude it
}

Otherwise you would end up with an obscure error because webpack stacks loaders together, it doesn't override them.

Isomorphic support

Try: this comment.

If this doesn't work for you, use the build located in the dist directory. This build removes all .css imports and extracts the relevant css into react-flexbox-grid/dist/react-flexbox-grid.css.

Not using a bundler?

Use the pre-bundled build located in the dist directory. It contains a single umd js distributable and built css file.

Usage

Now you can import and use the components:

import React from 'react';
import { Grid, Row, Col } from 'react-flexbox-grid';

class App extends React.Component {
  render() {
    return (
      <Grid fluid>
        <Row>
          <Col xs={6} md={3}>
            Hello, world!
          </Col>
        </Row>
      </Grid>
    );
  }
}

Gotcha

For the time being always use fluid for <Grid> to prevent horizontal overflow issues.

Example

Looking for a complete example? Head over to react-flexbox-grid-example.

Advanced composition

We also export functions for generating Row and Column class names for use in other components.

For example, suppose you're using a third party component that accepts className and you would like it to be rendered as Col. You could do so by extracting the column sizing props that MyComponent uses and then pass the generated className on to SomeComponent

import React from 'react';
import { Row, Col, getRowProps, getColumnProps } from 'react-flexbox-grid';
// a component that accepts a className
import SomeComponent from 'some-package';

export default function MyComponent(props) {
  const colProps = getColumnProps(props);
  const rowProps = getRowProps(props);

  return (
    <form className={rowProps.className}>
      <SomeComponent classname={colProps.className} />
      <input value={props.value} onChange={props.onChange} />
    </form>
  );
}

MyComponent.propTypes = Object.assign({
  onChange: React.PropTypes.func.isRequired,
  value: React.PropTypes.string.isRequired,
}, Col.propTypes, Row.propTypes);  // Re-use existing Row and Col propType validations

// Can now be rendered as: <MyComponent end="sm" sm={8} value="my input value" onChange={...} />

Contributors

Roy Lee Helder Santana Matija Marohnić
Roy Lee Helder Santana Matija Marohnić

License

MIT