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 相关文章推荐
关于document.cookie的使用javascript
Oct 29 Javascript
Jquery显示、隐藏元素以及添加删除样式
Aug 09 Javascript
js 实现菜单左右滚动显示示例介绍
Nov 21 Javascript
jquery实现点击消失的代码
Mar 03 Javascript
JS中attr和prop属性的区别以及优先选择示例介绍
Jun 30 Javascript
js动态切换图片的方法
Jan 20 Javascript
JS实现图片放大镜效果的方法
Feb 27 Javascript
js漂浮广告实现代码
Aug 15 Javascript
JavaScript学习笔记(三):JavaScript也有入口Main函数
Sep 12 Javascript
获取阴历(农历)和当前日期的js代码
Feb 15 Javascript
Bootstrap面板(Panels)的简单实现代码
Mar 17 Javascript
JS使用tween.js动画库实现轮播图并且有切换功能
Jul 17 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读取目录所有文件信息dir示例
2014/03/18 PHP
destoon调用企业会员公司形象图片的实现方法
2014/08/21 PHP
微信获取用户地理位置信息的原理与步骤
2015/11/12 PHP
Yii2中事务的使用实例代码详解
2016/09/07 PHP
PHP信号处理机制的操作代码讲解
2019/04/19 PHP
php5.3/5.4/5.5/5.6/7常见新增特性汇总整理
2020/02/27 PHP
可缩放Reloaded-一个针对可缩放元素的复用组件
2007/03/10 Javascript
用js实现手把手教你月入万刀(转贴)
2007/11/07 Javascript
jquery使用jxl插件导出excel示例
2014/04/14 Javascript
Bootstrap每天必学之导航条
2015/11/27 Javascript
javascript数组去重小结
2016/03/07 Javascript
一道关于JavaScript变量作用域的面试题
2016/03/08 Javascript
JavaScript Ajax编程 应用篇
2016/07/02 Javascript
vue页面使用阿里oss上传功能的实例(二)
2017/08/09 Javascript
layui实现动态和静态分页
2018/04/28 Javascript
vue 在单页面应用里使用二级套嵌路由
2020/12/19 Vue.js
[03:49]辉夜杯现场龙骑士COSER秀情商“我喜欢芬队!”
2015/12/27 DOTA
Python __setattr__、 __getattr__、 __delattr__、__call__用法示例
2015/03/06 Python
python实现读取excel写入mysql的小工具详解
2017/11/20 Python
python中闭包Closure函数作为返回值的方法示例
2017/12/17 Python
关于Python的一些学习总结
2018/05/25 Python
python+opencv+caffe+摄像头做目标检测的实例代码
2018/08/03 Python
在python中bool函数的取值方法
2018/11/01 Python
深入浅析python3中的unicode和bytes问题
2019/07/03 Python
Python 求数组局部最大值的实例
2019/11/26 Python
Python常用编译器原理及特点解析
2020/03/23 Python
pycharm开发一个简单界面和通用mvc模板(操作方法图解)
2020/05/27 Python
Python 实现图片转字符画的示例(静态图片,gif皆可)
2020/11/05 Python
POS解决方案:MUNBYN(热敏打印机、条形码扫描仪)
2020/06/09 全球购物
求职信范文怎么写
2014/01/29 职场文书
优秀团队获奖感言
2014/02/19 职场文书
2019请假条的基本格式及范文!
2019/07/05 职场文书
Redis安装启动及常见数据类型
2021/04/14 Redis
redis通过6379端口无法连接服务器(redis-server.exe闪退)
2021/05/08 Redis
使用Pytorch训练two-head网络的操作
2021/05/28 Python
Java中多线程下载图片并压缩能提高效率吗
2021/07/01 Java/Android