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 相关文章推荐
从Ajax到JQuery Ajax学习
Feb 14 Javascript
JavaScript中的apply()方法和call()方法使用介绍
Jul 25 Javascript
JSON+JavaScript处理JSON的简单例子
Mar 20 Javascript
javascript的事件触发器介绍的实现
Jun 05 Javascript
js实现图片从左往右渐变切换效果的方法
Feb 06 Javascript
EasyUI实现第二层弹出框的方法
Mar 01 Javascript
javascript密码强度校验代码(两种方法)
Aug 10 Javascript
浅析如何利用angular结合translate为项目实现国际化
Dec 08 Javascript
使用react-router4.0实现重定向和404功能的方法
Aug 28 Javascript
JavaScript动态绑定详解
Sep 14 Javascript
基于Vue的SPA动态修改页面title的方法(推荐)
Jan 02 Javascript
Vue 框架之键盘事件、健值修饰符、双向数据绑定
Nov 14 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
6种php上传图片重命名的方法实例
2013/11/04 PHP
php构造函数的继承方法
2015/02/09 PHP
PHP获取当前相对于域名目录的方法
2015/06/26 PHP
php简单创建zip压缩文件的方法
2016/04/30 PHP
PHP实现表单提交数据的验证处理功能【防SQL注入和XSS攻击等】
2017/07/21 PHP
PHP下 Mongodb 连接远程数据库的实例代码
2017/08/30 PHP
PHP $O00OO0=urldecode &amp; eval 解密,记一次商业源码的去后门
2020/09/13 PHP
javascript中的__defineGetter__和__defineSetter__介绍
2014/08/15 Javascript
JavaScript获取当前网页标题(title)的方法
2015/04/03 Javascript
Boostrap模态窗口的学习小结
2016/03/28 Javascript
Bootstrap组件系列之福利篇几款好用的组件(推荐二)
2016/07/12 Javascript
单击按钮发送验证码,出现倒计时的简单实例
2017/03/17 Javascript
Bootstrap DateTime Picker日历控件简单应用
2017/03/25 Javascript
修改Nodejs内置的npm默认配置路径方法
2018/05/13 NodeJs
手把手教你用Node.js爬虫爬取网站数据的方法
2018/07/05 Javascript
用npm安装vue和vue-cli,并使用webpack创建项目的方法
2018/09/28 Javascript
简单了解前端渐进式框架VUE
2020/07/20 Javascript
python多进程操作实例
2014/11/21 Python
Python中atexit模块的基本使用示例
2015/07/08 Python
Python实现破解猜数游戏算法示例
2017/09/25 Python
python实现图片中文字分割效果
2019/07/22 Python
Python 读取有公式cell的结果内容实例方法
2020/02/17 Python
Python3.x+pyqtgraph实现数据可视化教程
2020/03/14 Python
Opencv python 图片生成视频的方法示例
2020/11/18 Python
PHP面试题集
2016/12/18 面试题
SQL中where和having的区别
2012/06/17 面试题
汽车检测与维修应届毕业生求职信
2013/10/19 职场文书
创业资金计划书
2014/02/06 职场文书
融资租赁计划书
2014/04/29 职场文书
驾驶员安全责任书
2014/07/22 职场文书
奥巴马经典演讲稿
2014/09/13 职场文书
我的职业生涯规划:打造自己的运动帝国
2014/09/18 职场文书
表扬信范文
2015/05/04 职场文书
公司考勤管理制度
2015/08/04 职场文书
采购员工作总结范文
2015/08/12 职场文书
导游词之昭君岛
2020/01/17 职场文书