首页 > 其他分享 >nextJs中使用styled-jsx

nextJs中使用styled-jsx

时间:2024-04-11 11:46:13浏览次数:26  
标签:color padding nextJs styled 全局 jsx css

NextJs 不支持直接在页面和组件里import Css这种引入方式(除了全局引入),但是可以使用styled-jsx的方式进行Css的样式定义,也可以实现样式加载

NextJs中Css的几种使用方案:

  •  global 全局引入: 在main文件或者app.js/ts 文件里面进行全局引入,这种只是适合全局作用的样式引入。例如: import './index.css'。
  • css module 引入:这种一般来说适用于页面或者组件的引入方式,可以有效解决css命名冲突的问题;例如:import styles from './index.module.scss'。
  • nextJs还支持tailWindCss,这种比较方便直接,取决于项目有没有配置相关的东西;
  • 最后一种也是现在项目包括各种组件库常用的解决方案;css-in-js,这种其实通过在jsx中定义css,可以0成本使用js中的变量,比较方便,解决import后,变量命名的冲突问题,感觉和vue的scope有点类似。styled-jsx也是Css-in-js的一种,
  • styled-components也是其中一种解决方案

全局Style

<style global jsx>{`
  .hero {
    width: 100%;
    color: #333;
  }
  .title {
    margin: 0;
    width: 100%;
    padding-top: 80px;
    line-height: 1.15;
    font-size: 48px;
  }
   button {
    background: red;
  }
`}</style>

global(只针对某个 css 全局)

export default () => (
  <div>
    <Select optionClassName="react-select" />
 
    <style jsx>{`
      /* "div" will be prefixed, but ".react-select" won't */
 
      div :global(.react-select) {
        color: red
      }
    `}</style>
  </div>

行内 sytle

const Button = ({ padding, children }) => (
  <button style={{ padding }}>
     { children }
     <style jsx>{`
        button {
          padding: 20px;
          background: #eee;
          color: #999
        }
     `}</style>
  </button>
)
<div className="root">
    <style jsx>{`
      .root {
        color: green;
      }
    `}</style>
  </div>

className 切换

const Button = (props) => (
  <button className={ 'large' in props && 'large' }>
     { props.children }
     <style jsx>{`
        button {
          padding: 20px;
          background: #eee;
          color: #999
        }
        .large {
          padding: 50px
        }
     `}</style>
  </button>
)

 

标签:color,padding,nextJs,styled,全局,jsx,css
From: https://www.cnblogs.com/UnfetteredMan/p/18128693

相关文章

  • JSX.Element 和 React.ElementType的区别是什么?
    在React和TypeScript中,JSX.Element和React.ElementType代表了两种不同的概念:JSX.Element:JSX.Element是一个类型,表示由JSX编译后生成的实际React元素对象。当你在React应用中使用JSX编写组件时,每一个JSX表达式都会编译为一个JSX.Element对象。例如:constMyComponent:React.......
  • 解决 WebStorm 粘贴 JSX 时自动将 class 改为 className 的问题
    参考:解决复制时class自动改为className的问题将该选项取消勾选:File=>Settings=>Editor=>General=>SmartKeys=>JavaScript=>ConvertHTMLwhenpastingintoJSXfiles。......
  • nextjs 的函数,参数,属性装饰器的使用
    //属性装饰器constdoc1:PropertyDecorator=(target:any,val:string|symbol)=>{console.log(target);console.log(val);val="覆盖";}//方法装饰器constdoc2:MethodDecorator=(target:any,val:string|symbol,desc:any)=>{cons......
  • JSX 子元素类型
    JSX子元素类型JSX元素可以指定子元素。在之后的课程里你会看到很多子组件的概念,这里先留一个印象:子元素不一定是子组件,子组件一定是子元素子元素的类型包括:字符串,最终会被渲染成HTML标签里的字符串;另一段JSX,会嵌套渲染;JS表达式,会在渲染过程中执行,并让返回值参与到渲染......
  • 我用 Nextjs 十分钟搭建了一个展示955公司网站
    前言打工人终极梦想就是能够955吧!一年之前看到过955公司名单,最近偶然又看到一篇955不加班的公司名单推文,发现名单上的公司大都是外企,而且相比一年之前又少了几个。于是想将目前还在榜955名单上的公司记录在网站上,一是方便随时查看,二是想看有哪些公司会在什么时候下线,也一......
  • 【React】使用 JSX 为 JavaScript 添加标签
    使用JSX为JavaScript添加标签实际上是将JSX语法与JavaScript代码结合使用,以描述用户界面。JSX允许你在JavaScript中编写类似HTML的结构,并最终由React库将其转换为真正的DOM元素。以下是将标签引入JavaScript以及将HTML转化为JSX的步骤和JSX的一些基本......
  • JSX(JavaScript XML)语法
    1.在script标签中使用JSX语法需要:使用babel在script标签上添加:type="text/babel"2.JSX中的注释使用//、/**/使用{/**/}3.嵌入数据情况一:当变量是Number、String、Array类型时,可以直接显示情况二:当变量是null、undefined、Boolean类型时,内容为空;如果希望可以显示......
  • react中JSX的详解
    目录JSX的本质及其与JavaScript的关系探究一、JSX的本质二、JSX与JavaScript的关系三、为什么要使用JSX四、不使用JSX的后果五、JSX背后的功能模块JSX的本质及其与JavaScript的关系探究在React开发中,JSX是一个不可或缺的部分。那么,JSX的本质是什么?它与JavaScript之......
  • React jsx 语法解析 & 转换原理
    jsx介绍jsx是一种JavaScript的语法扩展(eXtension),也在很多地方称之为JavaScriptXML,因为看起就是一段XML语法,用于描述UI界面,并且可以和JavaScript代码结合使用。比起vue中的模板语法,更加灵活,且不需要学习模板语法中的特定标签,比如:v-if、v-for、v-bind等,而是直接使用JavaScript语......
  • 为什么多个 JSX 标签需要被一个父元素包裹?
    JSX虽然看起来很像HTML,但在底层其实被转化为了JavaScript对象,你不能在一个函数中返回多个对象,除非用一个数组把他们包装起来。这就是为什么多个JSX标签必须要用一个父元素或者Fragment来包裹。JSX最终会被转化为JavaScript,而JSX中的属性也会变成JavaScript对象中......