mirror of
https://github.com/terribleplan/next.js.git
synced 2024-01-19 02:48:18 +00:00
Aphrodite example. (#634)
* add aphrodite example * fix props * Update README.md
This commit is contained in:
parent
0a3313d1b9
commit
1d700d0240
|
@ -95,7 +95,7 @@ export default () => (
|
|||
|
||||
<p><details>
|
||||
<summary><b>Examples</b></summary>
|
||||
<ul><li><a href="./examples/with-styled-components">Styled components</a></li><li><a href="./examples/with-styletron">Styletron</a></li><li><a href="./examples/with-glamor">Glamor</a></li><li><a href="./examples/with-cxs">Cxs</a></li></ul>
|
||||
<ul><li><a href="./examples/with-styled-components">Styled components</a></li><li><a href="./examples/with-styletron">Styletron</a></li><li><a href="./examples/with-glamor">Glamor</a></li><li><a href="./examples/with-cxs">Cxs</a></li><li><a href="./examples/with-aphrodite">Aphrodite</a></li></ul>
|
||||
</details></p>
|
||||
|
||||
It's possible to use any existing CSS-in-JS solution. The simplest one is inline styles:
|
||||
|
|
30
examples/with-aphrodite/README.md
Normal file
30
examples/with-aphrodite/README.md
Normal file
|
@ -0,0 +1,30 @@
|
|||
|
||||
# Example app with aphrodite
|
||||
|
||||
## How to use
|
||||
|
||||
Download the example (or clone the repo)[https://github.com/zeit/next.js.git]:
|
||||
|
||||
```bash
|
||||
curl https://codeload.github.com/zeit/next.js/tar.gz/master | tar -xz --strip=2 next.js-master/examples/with-aphrodite
|
||||
cd with-aphrodite
|
||||
```
|
||||
|
||||
Install it and run:
|
||||
|
||||
```bash
|
||||
npm install
|
||||
npm run dev
|
||||
```
|
||||
|
||||
Deploy it to the cloud with [now](https://zeit.co/now) ([download](https://zeit.co/download))
|
||||
|
||||
```bash
|
||||
now
|
||||
```
|
||||
|
||||
## The idea behind the example
|
||||
|
||||
This example features how yo use a different styling solution than [styled-jsx](https://github.com/zeit/styled-jsx) that also supports universal styles. That means we can serve the required styles for the first render within the HTML and then load the rest in the client. In this case we are using [Aphrodite](https://github.com/Khan/aphrodite/).
|
||||
|
||||
For this purpose we are extending the `<Document />` and injecting the server side rendered styles into the `<head>`.
|
15
examples/with-aphrodite/package.json
Normal file
15
examples/with-aphrodite/package.json
Normal file
|
@ -0,0 +1,15 @@
|
|||
{
|
||||
"name": "with-aphrodite",
|
||||
"version": "1.0.0",
|
||||
"scripts": {
|
||||
"dev": "next",
|
||||
"build": "next build",
|
||||
"start": "next start"
|
||||
},
|
||||
"dependencies": {
|
||||
"aphrodite": "^1.1.0",
|
||||
"next": "^2.0.0-beta"
|
||||
},
|
||||
"author": "",
|
||||
"license": "ISC"
|
||||
}
|
24
examples/with-aphrodite/pages/_document.js
Normal file
24
examples/with-aphrodite/pages/_document.js
Normal file
|
@ -0,0 +1,24 @@
|
|||
import Document, { Head, Main, NextScript } from 'next/document'
|
||||
import { StyleSheetServer } from 'aphrodite'
|
||||
|
||||
export default class MyDocument extends Document {
|
||||
static async getInitialProps ({ renderPage }) {
|
||||
const { html, css } = StyleSheetServer.renderStatic(() => renderPage())
|
||||
return { ...html, css }
|
||||
}
|
||||
|
||||
render () {
|
||||
return (
|
||||
<html>
|
||||
<Head>
|
||||
<title>My page</title>
|
||||
<style dangerouslySetInnerHTML={{ __html: this.props.css.content }} />
|
||||
</Head>
|
||||
<body>
|
||||
<Main />
|
||||
<NextScript />
|
||||
</body>
|
||||
</html>
|
||||
)
|
||||
}
|
||||
}
|
28
examples/with-aphrodite/pages/index.js
Normal file
28
examples/with-aphrodite/pages/index.js
Normal file
|
@ -0,0 +1,28 @@
|
|||
import React from 'react'
|
||||
import { StyleSheet, css } from 'aphrodite'
|
||||
|
||||
export default () => (
|
||||
<div className={css(styles.root)}>
|
||||
<h1 className={css(styles.title)}>My page</h1>
|
||||
</div>
|
||||
)
|
||||
|
||||
const styles = StyleSheet.create({
|
||||
root: {
|
||||
width: 80,
|
||||
height: 60,
|
||||
background: 'white',
|
||||
':hover': {
|
||||
background: 'black'
|
||||
}
|
||||
},
|
||||
|
||||
title: {
|
||||
marginLeft: 5,
|
||||
color: 'black',
|
||||
fontSize: 22,
|
||||
':hover': {
|
||||
color: 'white'
|
||||
}
|
||||
}
|
||||
})
|
Loading…
Reference in a new issue