Hello World
项目小试牛刀之后,尝试给页面添加样式。
于是我们信心满满地按照 react
的方式,先写一个内联样式。修改 index.js
如下:
1 2 3 4 5 6 7 8 9 10
| import React from 'react';
const fontStyle = { backgroundColor: 'yellow', color: 'red' };
export default () => ( <h1 style={fontStyle}>Hello World!</h1> );
|
nice,成功了,但作为一个有追求的前端开发,你不满于内联样式,于是你又新建了一个 index.css
,然后按照 react
的方式引入.
1 2 3 4 5
| // index.css h1 { background-color: yellow; color: red; }
|
1 2 3 4 5 6 7 8
| import React from 'react';
import './index.css';
export default () => ( <h1>Hello World!</h1> );
|
发现出现了模块解析失败的错误,NextJs
无法解析 css 的格式。但他内置了另一种 css
的写法。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| import React from 'react';
export default () => ( <div> <h1>Hello World!</h1> <style jsx>{` h1 { background-color: black; color: red; } `}</style> <style global jsx>{` body { background-color: pink; } * { margin: 0; padding: 0; color: pink; } `}</style> </div> );
|
这种写法中 style jsx
样式具有作用域的概念,也就是只会作用当前 js 渲染的 dom 元素,如果想要全局生效的样式,可以使用
style global jsx
标签。
当然,你可能比较执拗,就是要引入 css
样式文件,当然也是可以实现的。
因为 nextjs
服务端渲染出的都是单文件(也可以包含静态路由),可以利用其提供的 Head
去给页面添加头部信息,然后引入对应的 css
静态文件。注意 nextjs
默认静态文件必须放在根目录下的 static
文件夹下。
1 2 3 4
| // static/index.css body { background-color: pink; } * { margin: 0; padding: 0; color: pink; } h1 { background-color: yellow; color: red; }
|
1 2 3 4 5 6 7 8 9 10 11 12 13
| import React from 'react'; import Head from 'next/head';
export default () => ( <div> <Head> <title>Hello ~</title> <link href="/static/index.css" rel="stylesheet" /> </Head> <h1>Hello World!</h1> </div> );
|
如愿以偿。