React中使用外部样式的3种方式(小结)


Posted in Javascript onMay 28, 2019

一、关于css-in-js的认识

1、css-in-js是一种使用 js 编写 css 样式的 css 处理方案。它的实现方案有很多,比如styled-components、polished、glamorous(paypal 开源的,不再维护)、radium、emotion等等。

2、其中最成熟的便是styled-components和emotion。它们真正意义上实现了组件化style,可以说是专门为 react 打造的。

二、styled-components 简介

styled-components是 css-in-js 主流的实现方案,同时也是组件化style的主流实现方案。

下面是styled-components的一些特性:

1、唯一class类名:和 css-module 异曲同工,生成唯一类名,避免重复和全局污染,也不需要你费脑筋思考该如何命名。

2、无冗余css代码:它的样式和组件绑定,组件调用则样式起作用。意味着你不需要关心如何检测和删除那些未使用的 css 代码。

3、动态样式: 它可以很简单地调整和拓展组件的样式,而不需要建立很多个 class 类来维护组件的样式。

4、自动添加兼容前缀:和 Autoprefixer 类似,会自动添加浏览器兼容前缀以支持旧版浏览器。

5、支持变量和继承:你可以使用变量来设置不同的样式,使用这些不同样式时只需要给样式组件传递一个参数即可。

三、styled-components使用方式

1、安装

npm install styled-components

2、使用

styled-components主要基于 es6 的标签模板语法调用标签函数

import React, { Component } from 'react'
import styled from 'styled-components'

export default class Style extends Component {
 render() {
  return (
   <>
    <div>
     <Title>我是标题</Title>
    </div>
   </>
  )
 }
}

// 使用es6的模板字符串的方式(下面表示定义了h1的样式)
const Title = styled.h1`
 font-size: 20px;
 color: #f00;

3、嵌套的使用

import React, { Component } from 'react'
import styled from 'styled-components'

export default class Style extends Component {
 render() {
  return (
   <>
    <div>
     <Content>
      <h2>你好</h2>
      <div className="content">我是内容</div>
     </Content>
    </div>
   </>
  )
 }
}

const Content = styled.div`
 width: 100%;
 height: 500px;
 border: 1px solid #f00;
 > h2 {
  color: pink;
 }
 > .content {
  text-align: center;
  color: #f00;
 }
`

4、使用props传递参数的方式

import React, { Component } from 'react'
import styled, { css } from 'styled-components'

export default class Style2 extends Component {
 render() {
  return (
   <div>
    <Button> 提交 </Button>
    <Button primary> 提交 </Button>
   </div>
  )
 }
}

const Button = styled.button`
 font-size: 1em;
 margin: 1em;
 padding: 0.25em 1em;
 border-radius: 5px;
 color: palevioletred;
 border: 2px solid palevioletred;
 cursor: pointer;

 ${props =>
  props.primary &&
  css`
   border: 2px solid mediumseagreen;
   color: mediumseagreen;
  `}
`

5、样式的继承

import React, { Component } from 'react'
import styled from 'styled-components'

export default class Style3 extends Component {
 render() {
  return (
   <div>
    <Button> 提交 </Button>
    <ExtendingButton> 提交 </ExtendingButton>
   </div>
  )
 }
}

const Button = styled.button`
 background: palevioletred;
 color: white;
`

const ExtendingButton = styled(Button)`
 font-size: 18px;
 padding: 5px 25px;
`

四、使用sass

使用create-react-app创建的项目是支持sass的但是需要自己安装

1、安装

npm install node-sass

2、直接使用

import React, { Component } from 'react'
import './style4.scss'

export default class Style4 extends Component {
 render() {
  return (
   <div>
    <div className="title">我是标题</div>
   </div>
  )
 }
}

五、使用css-module

使用create-react-app创建的项目,默认情况下就支持css-module

1、样式文件必须以[name].module.css或[name].module.scss的形式命名

2、以变量的形式导入样式文件,比如 import styles from './style.module.css';

3、className以变量引用的方式添加,比如 className={ styles.title }

import React, { Component } from 'react'
import styles from './Style5.module.scss'

export default class Style5 extends Component {
 render() {
  return (
   <div>
    <div className={styles.title}>我是标题</div>
   </div>
  )
 }
}
<div class="Style5_title__lsl4D"></div>

4、如果不想使用默认的哈希值

:global(.wrap) {
 color: green;
}
// 直接使用
<h2 className="wrap">你好</h2>

5、样式的继承

.className {
 color: green;
 background: red;
}

.otherClassName {
 composes: className; // 直接继承上面的
 color: yellow;
}

.title {
 composes: className from './another.css'; // 直接使用外部样式表
 color: red;
}

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

Javascript 相关文章推荐
javascript 简练的几个函数
Aug 29 Javascript
让firefox支持IE的一些方法的javascript扩展函数代码
Jan 02 Javascript
javascript 正则替换 replace(regExp, function)用法
May 22 Javascript
jquery实现先淡出再折叠收起的动画效果
Aug 07 Javascript
jQuery 3.0 的变化及使用方法
Feb 01 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
Jun 11 Javascript
webpack3+React 的配置全解
Aug 21 Javascript
BootStrap模态框闪退问题实例代码详解
Dec 10 Javascript
layer弹出层扩展主题的方法
Sep 11 Javascript
微信小程序实现音频文件播放进度的实例代码
Mar 02 Javascript
用js实现放大镜效果
Oct 28 Javascript
浅谈JavaScript浅拷贝和深拷贝
Nov 07 Javascript
vue实现多条件和模糊搜索功能
May 28 #Javascript
vue实现路由切换改变title功能
May 28 #Javascript
Vue 无限滚动加载指令实现方法
May 28 #Javascript
vue实现搜索过滤效果
May 28 #Javascript
微信小程序 image组件遇到的问题
May 28 #Javascript
vue实现搜索功能
May 28 #Javascript
Bootstrap 时间日历插件bootstrap-datetimepicker配置与应用小结
May 28 #Javascript
You might like
在PHP3中实现SESSION的功能(二)
2006/10/09 PHP
set_include_path在win和linux下的区别
2008/01/10 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
Yii2框架加载css和js文件的方法分析
2019/05/25 PHP
PHP函数用法详解【初始化、嵌套、内置函数等】
2020/06/02 PHP
Thinkphp5+Redis实现商品秒杀代码实例讲解
2020/12/29 PHP
JQuery下关于$.Ready()的分析
2009/12/13 Javascript
JavaScript动态调整TextArea高度的代码
2010/12/28 Javascript
关于IE中getElementsByClassName不能用的问题解决方法
2013/08/26 Javascript
JQuery事件e参数的方法preventDefault()取消默认行为
2013/09/26 Javascript
JavaScript用Number方法实现string转int
2014/05/13 Javascript
JavaScript获取表单enctype属性的方法
2015/04/02 Javascript
javascript关于继承解析
2016/05/10 Javascript
分享一个插件实现水珠自动下落效果
2016/06/01 Javascript
JS实现点击网页判断是否安装app并打开否则跳转app store
2016/11/18 Javascript
老生常谈的跨域处理
2017/01/11 Javascript
Angular4如何自定义首屏的加载动画详解
2017/07/26 Javascript
Node.js 使用递归实现遍历文件夹中所有文件
2017/09/18 Javascript
JavaScript中Object基础内部方法图
2018/02/05 Javascript
微信小程序之swiper轮播图中的图片自适应高度的方法
2018/04/23 Javascript
深入浅析Vue.js 中的 v-for 列表渲染指令
2018/11/19 Javascript
详解JS实现简单的时分秒倒计时代码
2019/04/25 Javascript
在小程序中推送模板消息的实现方法
2019/07/22 Javascript
JS+HTML5本地存储Localstorage实现注册登录及验证功能示例
2020/02/10 Javascript
基于redis的小程序登录实现方法流程分析
2020/05/25 Javascript
在Vue 中实现循环渲染多个相同echarts图表
2020/07/20 Javascript
js获取图片的base64编码并压缩
2020/12/05 Javascript
CentOS中升级Python版本的方法详解
2017/07/10 Python
Python编程深度学习计算库之numpy
2018/12/28 Python
python和mysql交互操作实例详解【基于pymysql库】
2019/06/04 Python
继电保护工岗位职责
2014/01/05 职场文书
电大毕业个人生自我鉴定
2014/03/26 职场文书
授权委托书格式模板
2014/04/03 职场文书
行政执法队伍作风整顿个人剖析材料
2014/10/11 职场文书
碧霞祠导游词
2015/02/09 职场文书
幼儿园教学工作总结2015
2015/05/12 职场文书