react中使用css的7中方式(最全总结)


Posted in Javascript onFebruary 11, 2019

第一种: 在组件中直接使用style

不需要组件从外部引入css文件,直接在组件中书写。

import React, { Component } from "react";

const div1 = {
 width: "300px",
 margin: "30px auto",
 backgroundColor: "#44014C", //驼峰法
 minHeight: "200px",
 boxSizing: "border-box"
};

class Test extends Component {
 constructor(props, context) {
  super(props);
 }
 
 render() {
  return (
   <div style={div1}>123</div>
   <div style="background-color:red;">
  );
 }
}

export default Test;

注意事项:

  1. 在正常的css中,比如background-color,box-sizing等属性,在style对象div1中的属性中,必须转换成驼峰法,backgroundColor,boxSizing。而没有连字符的属性,如margin,width等,则在style对象中不变。
  2. 在正常的css中,css的值不需要用双引好(""),如
.App-header {
 background-color: #282c34;
 min-height: 100vh;
 display: flex;
 flex-direction: column;
 align-items: center;
 justify-content: center;
 font-size: calc(10px + 2vmin);
 color: white;
}

而在react中使用style对象的方式时。值必须用双引号包裹起来。

这种方式的react样式,只作用于当前组件。

第二种: 在组件中引入[name].css文件

需要在当前组件开头使用import引入css文件。

import React, { Component } from "react";
import TestChidren from "./TestChidren";
import "@/assets/css/index.scss";

class Test extends Component {
 constructor(props, context) {
  super(props);
 }
 
 render() {
  return (
   <div>
    <div className="link-name">123</div>
    <TestChidren>测试子组件的样式</TestChidren>
   </div>

  );
 }
}

export default Test;

这种方式引入的css样式,会作用于当前组件及其所有后代组件。

第三种: 3、在组件中引入[name].scss文件

引入react内部已经支持了后缀为scss的文件,所以只需要安装node-sass即可,因为有个node-sass,scss文件才能在node环境上编译成css文件。

>yarn add node-sass

然后编写scss文件

//index.scss
.App{
 background-color: #282c34;
 .header{
  min-height: 100vh;
  color: white;
 }
}

关于如何详细的使用sass,请查看sass官网

这种方式引入的css样式,同样会作用于当前组件及其所有后代组件。

第四种: 在组件中引入[name].module.css文件

将css文件作为一个模块引入,这个模块中的所有css,只作用于当前组件。不会影响当前组件的后代组件。

import React, { Component } from "react";
import TestChild from "./TestChild";
import moduleCss from "./test.module.css";

class Test extends Component {
 constructor(props, context) {
  super(props);
 } 
 
 render() {
  return (
   <div>
    <div className={moduleCss.linkName}>321321</div>
    <TestChild></TestChild>
   </div>
  );
 }
}

export default Test;

这种方式可以看做是前面第一种在组件中使用style的升级版。完全将css和组件分离开,又不会影响其他组件。

第五种: 在组件中引入 [name].module.scss文件

类似于第四种,区别是第四种引入css module,而这种是引入 scss module而已。

import React, { Component } from "react";
import TestChild from "./TestChild";
import moduleCss from "./test.module.scss";

class Test extends Component {
 constructor(props, context) {
  super(props);
 } 
 
 render() {
  return (
   <div>
    <div className={moduleCss.linkName}>321321</div>
    <TestChild></TestChild>
   </div>
  );
 }
}

export default Test;

同样这种方式可以看做是前面第一种在组件中使用style的升级版。

第六种: 使用styled-components

需要先安装

>yarn add styled-components

然后创建一个js文件(注意是js文件,不是css文件)

//style.js
import styled, { createGlobalStyle } from "styled-components";

export const SelfLink = styled.div`
 height: 50px;
 border: 1px solid red;
 color: yellow;
`;

export const SelfButton = styled.div`
 height: 150px;
 width: 150px;
 color: ${props => props.color};
 background-image: url(${props => props.src});
 background-size: 150px 150px;
`;

组件中使用styled-components样式

import React, { Component } from "react";

import { SelfLink, SelfButton } from "./style";

class Test extends Component {
 constructor(props, context) {
  super(props);
 } 
 
 render() {
  return (
   <div>
    <SelfLink title="People's Republic of China">app.js</SelfLink>
    <SelfButton color="palevioletred" style={{ color: "pink" }} src={fist}>
     SelfButton
    </SelfButton>
   </div>
  );
 }
}

export default Test;

这种方式是将整个css样式,和html节点整体合并成一个组件。引入这个组件html和css都有了。
它的好处在于可以随时通过往组件上传入 属性,来动态的改变样式。对于处理变量、媒体查询、伪类等较方便的。

这种方式的css也只对当前组件有效。

具体用法,请查看styled-components官网

第七种: 使用radium

需要先安装

>yarn add radium

然后在react组件中直接引入使用

import React, { Component } from "react";
import Radium from 'radium';

let styles = {
 base: {
  color: '#fff',
  ':hover': {
   background: '#0074d9'
  }
 },
 primary: {
  background: '#0074D9'
 },
 warning: {
  background: '#FF4136'
 }
};

class Test extends Component {
 constructor(props, context) {
  super(props);
 } 
 
 render() {
  return (
   <div>
   <button style={[ styles.base, styles.primary ]}>
    this is a primary button
   </button>
   </div>
  );
 }
}

export default Radium(Test);

对于处理变量、媒体查询、伪类等是不方便的。

使用Radium可以直接处理变量、媒体查询、伪类等,并且可以直接使用js中的数学,连接,正则表达式,条件,函数等。

具体用法请查看radium官网

注意:

在export之前,必须用Radium包裹。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
Javascript 函数中的参数使用分析
Mar 27 Javascript
解决Jquery load()加载GB2312页面时出现乱码的两种方案
Sep 10 Javascript
jquery.validate使用时遇到的问题
May 25 Javascript
学习JavaScript鼠标响应事件
Dec 25 Javascript
拖动时防止选中
Feb 03 Javascript
JS获取一个表单字段中多条数据并转化为json格式
Oct 17 Javascript
解决vue多个路由共用一个页面的问题
Mar 12 Javascript
详解npm 配置项registry修改为淘宝镜像
Sep 07 Javascript
vue.js自定义组件实现v-model双向数据绑定的示例代码
Jan 08 Javascript
vue2.x数组劫持原理的实现
Apr 19 Javascript
uniapp实现可以左右滑动导航栏
Oct 21 Javascript
解决vuex改变了state的值,但是页面没有更新的问题
Nov 12 Javascript
mpvue+vant app搭建微信小程序的方法步骤
Feb 11 #Javascript
vue自定义指令实现方法详解
Feb 11 #Javascript
Vue表情输入组件 微信face表情组件
Feb 11 #Javascript
js屏蔽退格键(backspace或者叫后退键与F5)
Feb 10 #Javascript
Vue动画事件详解及过渡动画实例
Feb 09 #Javascript
JavaScript ES6常用基础知识总结
Feb 09 #Javascript
Vue组件的使用及个人理解与介绍
Feb 09 #Javascript
You might like
PHP实现克鲁斯卡尔算法实例解析
2014/08/22 PHP
带你了解PHP7 性能翻倍的关键
2015/11/19 PHP
PHP判断FORM表单或URL参数来的数据是否为整数的方法
2016/03/25 PHP
PHP CodeIgniter分页实例及多条件查询解决方案(推荐)
2017/05/20 PHP
关于Laravel参数验证的一些疑与惑
2019/11/19 PHP
JavaScript 反科里化 this [译]
2012/09/20 Javascript
node.js超时timeout详解
2014/11/26 Javascript
js实现从右向左缓缓浮出网页浮动层广告的方法
2015/05/09 Javascript
JQuery用户名校验的具体实现
2016/03/18 Javascript
Bootstrap中点击按钮后变灰并显示加载中实例代码
2016/09/23 Javascript
超全面的vue.js使用总结
2017/02/12 Javascript
vue项目常用组件和框架结构介绍
2017/12/24 Javascript
javascript代码优化的8点总结
2018/01/29 Javascript
原生js实现移动端Touch轮播图的方法步骤
2019/01/03 Javascript
监听element-ui table滚动事件的方法
2019/03/26 Javascript
详解ES6 export default 和 import语句中的解构赋值
2019/05/28 Javascript
vue在图片上传的时候压缩图片
2020/11/18 Vue.js
[03:48]DOTA2完美大师赛主赛事第二日精彩集锦
2017/11/24 DOTA
[02:02]2018DOTA2亚洲邀请赛Mineski赛前采访
2018/04/04 DOTA
[01:14]TI珍贵瞬间系列(六):冠军
2020/08/30 DOTA
Python程序语言快速上手教程
2012/07/18 Python
Python实现的桶排序算法示例
2017/11/29 Python
Python 从相对路径下import的方法
2018/12/04 Python
将python文件打包成EXE应用程序的方法
2019/05/22 Python
Python编程学习之如何判断3个数的大小
2019/08/07 Python
python实现KNN近邻算法
2020/12/30 Python
使用canvas来完成线性渐变和径向渐变的功能的方法示例
2019/07/25 HTML / CSS
人民教师的自我评价分享
2014/02/21 职场文书
小学优秀辅导员事迹材料
2014/05/11 职场文书
安全标语大全
2014/06/10 职场文书
群众路线四风问题整改措施
2014/09/27 职场文书
先进基层党组织材料
2014/12/25 职场文书
餐饮服务员岗位职责
2015/02/09 职场文书
离婚起诉书范文2015
2015/05/19 职场文书
行政处罚告知书
2015/07/01 职场文书
TypeScript 使用 Tuple Union 声明函数重载
2022/04/07 Javascript