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 相关文章推荐
禁止js文件缓存的代码
Apr 09 Javascript
将form表单中的元素转换成对象的方法适用表单提交
May 02 Javascript
jquery拖动层效果插件用法实例分析(附demo源码)
Apr 28 Javascript
jquery获取所有选中的checkbox实现代码
May 26 Javascript
javascript删除html标签函数cIsHTML
Jan 09 Javascript
JavaScript中在光标处插入添加文本标签节点的详细方法
Mar 22 Javascript
js实现HTML中Select二级联动的实例
Jan 05 Javascript
详解Angular系列之变化检测(Change Detection)
Feb 26 Javascript
为vue-router懒加载时下载js的过程中添加loading提示避免无响应问题
Apr 03 Javascript
微信小程序自定义组件传值 页面和组件相互传数据操作示例
May 05 Javascript
详解TypeScript中的类型保护
Apr 29 Javascript
ant design charts 获取后端接口数据展示
May 25 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
关于Intype一些小问题的解决办法
2008/03/28 PHP
php checkdate、getdate等日期时间函数操作详解
2010/03/11 PHP
php实现的网页版剪刀石头布游戏示例
2016/11/25 PHP
CI框架(CodeIgniter)操作redis的方法详解
2018/01/25 PHP
总结AJAX相关JS代码片段和浏览器模型
2007/08/15 Javascript
一个javascript参数的小问题
2008/03/02 Javascript
asp.net和asp下ACCESS的参数化查询
2008/06/11 Javascript
jquery tools 系列 scrollable学习
2009/09/06 Javascript
Javascript验证上传图片大小[前台处理]
2014/07/18 Javascript
JS动态修改iframe高度和宽度的方法
2015/04/01 Javascript
jQuery简单获取键盘事件的方法
2016/01/22 Javascript
JS读取XML文件数据并以table形式显示数据的方法(兼容IE与火狐)
2016/06/02 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
JavaScript如何实现元素全排列实例代码
2019/05/14 Javascript
如何写好一个vue组件,老夫的一年经验全在这了(推荐)
2019/05/18 Javascript
JavaScript判断数组类型的方法
2019/10/23 Javascript
vue动画—通过钩子函数实现半场动画操作
2020/08/09 Javascript
JQuery基于FormData异步提交数据文件
2020/09/01 jQuery
JavaScript 获取滚动条位置并将页面滑动到锚点
2021/02/08 Javascript
[01:06]DOTA2小知识课堂 Ep.01 TP出门不要忘记帮队友灌瓶哦
2019/12/05 DOTA
python sys模块sys.path使用方法示例
2013/12/04 Python
Python开发的HTTP库requests详解
2017/08/29 Python
Numpy中stack(),hstack(),vstack()函数用法介绍及实例
2018/01/09 Python
python实现二维插值的三维显示
2018/12/17 Python
利用anaconda保证64位和32位的python共存
2021/03/09 Python
Python学习笔记之字符串和字符串方法实例详解
2019/08/22 Python
使用Python实现正态分布、正态分布采样
2019/11/20 Python
python中的django是做什么的
2020/07/31 Python
八一建军节感言
2014/02/28 职场文书
授权委托书(完整版)
2014/09/10 职场文书
机关领导干部作风整顿整改措施
2014/09/19 职场文书
教师节横幅标语
2014/10/08 职场文书
乡镇党建工作汇报材料
2014/10/27 职场文书
申请吧主发表的感言
2015/08/03 职场文书
二手手机买卖合同范本(2019年版)
2019/10/28 职场文书
Go遍历struct,map,slice的实现
2021/06/13 Golang