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 相关文章推荐
alert中断settimeout计时功能
Jul 26 Javascript
checkbox设置复选框的只读效果不让用户勾选
Aug 12 Javascript
基于jquery实现的文字淡入淡出效果
Nov 14 Javascript
js判读浏览器是否支持html5的canvas的代码
Nov 18 Javascript
js控制文本框只输入数字和小数点的方法
Mar 10 Javascript
jQuery控制DIV层实现由大到小,由远及近动画变化效果
Oct 09 Javascript
微信小程序开发之选项卡(窗口底部TabBar)页面切换
Apr 12 Javascript
AngularJS ui-router刷新子页面路由的方法
Jul 23 Javascript
Windows下支持自动更新的Electron应用脚手架的方法
Dec 24 Javascript
详解easyui 切换主题皮肤
Apr 04 Javascript
微信小程序 弹窗输入组件的实现解析
Aug 12 Javascript
关于JavaScript回调函数的深入理解
Jun 27 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
杏林同学录(五)
2006/10/09 PHP
php实现的Curl封装类Curl.class.php用法实例分析
2015/09/25 PHP
CentOS下与Apache连接的PHP多版本共存方案实现详解
2015/12/19 PHP
thinkPHP框架可添加js事件的分页类customPage.class.php完整实例
2017/03/16 PHP
Prototype最新版(1.5 rc2)使用指南(1)
2007/01/10 Javascript
jquery trim() 功能源代码
2011/02/14 Javascript
基于jQuery中对数组进行操作的方法
2013/04/16 Javascript
javascript unicode与GBK2312(中文)编码转换方法
2013/11/14 Javascript
网站基于flash实现的Banner图切换效果代码
2014/10/14 Javascript
js设置document.domain实现跨域的注意点分析
2015/05/21 Javascript
jQuery特殊符号转义的实现
2016/11/30 Javascript
bootstrap confirmation按钮提示组件使用详解
2017/08/22 Javascript
实例详解BootStrap的动态模态框及静态模态框
2018/08/13 Javascript
layui 表格的属性的显示转换方法
2018/08/14 Javascript
Postman的下载及安装教程详解
2018/10/16 Javascript
vue抽出组件并传值实例
2020/07/31 Javascript
JavaScript中变量提升和函数提升的详解
2020/08/07 Javascript
[32:30]夜魇凡尔赛茶话会 第一期01:谁是卧底
2021/03/11 DOTA
Python中字典和JSON互转操作实例
2015/01/19 Python
windows环境下tensorflow安装过程详解
2018/03/30 Python
python opencv摄像头的简单应用
2019/06/06 Python
python+opencv实现车牌定位功能(实例代码)
2019/12/24 Python
Pytorch实现基于CharRNN的文本分类与生成示例
2020/01/08 Python
python基于property()函数定义属性
2020/01/22 Python
Python matplotlib实时画图案例
2020/04/23 Python
美国高端寝具品牌:Coyuchi
2017/02/08 全球购物
德国高端单身人士交友网站:ElitePartner
2018/12/02 全球购物
年终自我鉴定
2013/10/09 职场文书
见习期自我鉴定范文
2014/03/19 职场文书
大班亲子运动会方案
2014/06/10 职场文书
助人为乐好少年事迹材料
2014/08/18 职场文书
男性健康日的活动方案
2014/08/18 职场文书
事业单位聘任报告
2015/03/02 职场文书
部门经理助理岗位职责
2015/04/13 职场文书
优质护理心得体会
2016/01/22 职场文书
CSS中理解层叠性及权重如何分配
2022/12/24 HTML / CSS