css 如何样式大圆包裹小圆_nextJS的三种css使用方法

写在前边:本文中react组件、页面均使用tsx。其中官方的类型说明,翻了很长时间,大家可以复制粘贴

1. 全局用法

打开pages目录下_app.js,这里以引入antd的css为例

import App from 'next/app';

import 'antd/dist/antd.css'; // 这里的css样式直接作用于Container组件

const Container = ({ Component, pageProps }) => {
    return (
        <Component {...pageProps} /
    )
}

Container.getInitialProps = async (appContext) => {
    const appProps = await App.getInitialProps(appContext);
    return {
        ...appProps,
    };
}
export default Container;

nextJS会把_app.js导出的组件作为page的父组件,也就是说这里的Container实际上是个超级wrapper,每次路由跳转都会先用这个wrapper包裹page再渲染。

想要css按需引入,需要配置babel-plugin-import,请参考antd官网
Ant Design of React - Ant Design​ant.design
25e4658892f741e3345fbe64fb7b1119.png

2. css module

这也是我本人最喜欢的一种用法。使用方法如下

根目录下创建compotents文件夹,新建Board.tsx、Board.module.css文件。

Board.tsx

import style from './Board.module.css';

interface BoardProps { }

const Board: React.FC<BoardProps> = (props) => {

    return (
        <div className={style.title}>component Board title</div>
    )
}

export default Board;

Board.module.css

.title {
    color: red;
}

底层会按webpack某个loader的配置,为标签生成一个特定的className,由此不会造成css冲突

美中不足是style没有代码提示,需要自己写.d.ts定义模块,我觉得没多大必要

3. css in js

顾名思义,把css和jsx写在一起

import { NextComponentType } from 'next';
import { NextRouter } from 'next/router';
import Head from 'next/head';

interface LIstInitialProps { }

interface LIstProps extends LIstInitialProps {
    router: NextRouter;
}

const LIst: NextComponentType<any, LIstInitialProps, LIstProps> = (props) => {
    return (
        <>
            <Head>
                <title>List Page</title>
            </Head>
            <div>List Page</div>
            <style jsx>{`
                div {
                    color: blue;
                }
            `}</style>
        </>
    )
}

LIst.getInitialProps = () => {
    return { }
}


export default LIst;

<style jsx>包裹css,记得css用模板字符串

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值