react-configurable-grid
Version:
A simple configurable react grid inspired on grid-styled and react-bootstrap
215 lines (162 loc) • 4.9 kB
Markdown
[]()
[]()
A simple configurable grid for react inspired on [grid-styled](https://github.com/jxnblk/grid-styled) and [react-bootstrap](https://github.com/react-bootstrap/react-bootstrap) API, but, with open settings.
**1.08 kB** only
React Configurable Grid is as simple as using bootstrap grid-system, where you have rows, cols and container classes to wrap components and align as you please, removing alignment and size adustment from their responsability.
`npm install react-configurable-grid --save`
```javascript
import React from 'react';
import { Row, Col } from 'react-configurable-grid';
function MyComponent() {
return (
<section>
<h1>My component</h1>
<Row>
<Col xs={6} md={3} lg={2}>content 1</Col>
<Col xs={6} md={9} lg={10}>content 2</Col>
<Row>
</section>
);
}
export default MyComponent;
```
To use custom breakpoints or custom gutter, just execute configureGrid with config params before your App is mounted;
```javascript
import React from 'react';
import configureGrid, { Row, Col } from 'react-configurable-grid';
import OtherComponent from './OtherComponent';
configureGrid({
// xs media query will use default value
sm: "576px",
md: null, // this media query will not be rendered
lg: "992px",
xl: null, // this media query will not be rendered
gutter: "30px"
});
function App() {
return (
<section>
<h1>My component</h1>
<Row>
<Col lg={2}>content 1</Col>
<Col lg={10}>content 2</Col>
<Row>
<OtherComponent />
</section>
);
}
export default App;
```
```javascript
// server.js
...
import React from "react";
import { renderToString } from "react-dom/server";
import App from "../components/App";
...
/*
first param - Configuration object
second param - If true returns <style type="text/css" data-grid>grid css</style> tag, else, returns grid css only
*/
const gridStyles = configureGrid({
gutter: "40px"
}, true);
export default () => (req, res) => {
const componentString = renderToString(<App />);
const generatedHTML = `
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
${gridStyles}
</head>
<body>
<div id="root">${componentString}</div>
</body>
</html>
`;
res.send(generatedHTML);
}
```
```javascript
// pages/_document.js
...
import Document, { Head, Main, NextScript } from "next/document";
import flush from "styled-jsx/server";
import { configureGrid } from 'react-configurable-grid';
...
/*
You can pass no arguments if you what to use default config, and return only css code
*/
const gridStyles = configureGrid();
export default class MyDocument extends Document {
static getInitialProps({ renderPage }) {
const { html, head, errorHtml, chunks } = renderPage();
const styles = flush();
return { html, head, errorHtml, chunks, styles };
}
render() {
return (
<html lang="pt-BR">
<Head>
<meta name="viewport" content="initial-scale=1.0, width=device-width" />
{/* You need to add data-grid data attribute when using only css code */}
<style type="text/css" data-grid>{gridStyles}</style>
</Head>
<body>
<Main />
<NextScript />
</body>
</html>
);
}
}
```
| prop | description | default |
| --------- | ----------- | ----------- |
| className | className | - |
| component | changes base element | div |
| wrap | flex-wrap | wrap |
| align | align-items | stretch |
| justify | justify-content | flex-start |
| prop | description |
| --------- | ----------- |
| className | className |
| component | changes base element | div |
| xs | extra small cols |
| sm | small cols |
| md | medium cols |
| lg | large cols |
| xl | extra large cols |
Changes default values. Also returns styles for *server-side rendering*
*Media queries with `null` value will not be rendered*
Configuration Object param:
| config object attribute | default |
| --------- | ----------- |
| xs | 0px or more |
| sm | 576px or more |
| md | 768px or more |
| lg | 992px or more |
| xl | 1200px or more |
| gutter | 30px |
Return Tag param:
*true* - returns
```<style type="text/css" data-grid>grid css string</style>```
*false* - returns
```grid css string```
*Signature*
```configureGrid([Object], [Bool]);```
[@malbernaz](https://github.com/malbernaz/)