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 相关文章推荐
excel操作之Add Data to a Spreadsheet Cell
Jun 12 Javascript
Prototype源码浅析 String部分(一)之有关indexOf优化
Jan 15 Javascript
将input file的选择的文件清空的两种解决方案
Oct 21 Javascript
jquery 操作iframe的几种方法总结
Dec 13 Javascript
Jquery下EasyUI组件中的DataGrid结果集清空方法
Jan 06 Javascript
js函数在frame中的相互调用详解
Mar 03 Javascript
JS实现点击文字对应DIV层不停闪动效果的方法
Mar 02 Javascript
给easyui datebox扩展一个清空的实例
Nov 09 Javascript
微信小程序使用input组件实现密码框功能【附源码下载】
Dec 11 Javascript
vue 使用自定义指令实现表单校验的方法
Aug 28 Javascript
原生js实现随机点餐效果
Dec 10 Javascript
vue+node 实现视频在线播放的实例代码
Oct 19 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
如何给phpadmin一个保护
2006/10/09 PHP
php google或baidu分页代码
2009/11/26 PHP
PHP根据传来的16进制颜色代码自动改变背景颜色
2014/06/13 PHP
php 数据结构之链表队列
2017/10/17 PHP
我也种棵OO树JXTree[js+css+xml]
2007/04/02 Javascript
zeroclipboard复制到剪切板的flash
2010/08/04 Javascript
Chosen 基于jquery的选择框插件使用方法
2012/05/30 Javascript
iframe子页面获取父页面元素的方法
2013/11/05 Javascript
用jQuery与JSONP轻松解决跨域访问的问题
2014/02/04 Javascript
js实现类似于add(1)(2)(3)调用方式的方法
2015/03/04 Javascript
JavaScript数据结构与算法之集合(Set)
2016/01/29 Javascript
深入浅析JavaScript中的constructor
2016/04/19 Javascript
jQuery表单对象属性过滤选择器实例详解
2016/09/13 Javascript
js实现固定宽高滑动轮播图效果
2017/01/13 Javascript
使用cookie绕过验证码登录的实现代码
2017/10/12 Javascript
[02:09]EHOME夺得首届辉夜杯冠军—现场颁奖仪式
2015/12/28 DOTA
python动态性强类型用法实例
2015/05/09 Python
python实现自动重启本程序的方法
2015/07/09 Python
transform python环境快速配置方法
2018/09/27 Python
Pytorch实现的手写数字mnist识别功能完整示例
2019/12/13 Python
python自动化unittest yaml使用过程解析
2020/02/03 Python
Python hashlib和hmac模块使用方法解析
2020/12/08 Python
世界上最大的网络主机公司:1&1
2016/10/12 全球购物
Clarisonic美国官网:科莱丽声波洁面仪
2017/10/12 全球购物
美国机场停车位预订:About Airport Parking
2018/03/26 全球购物
丝芙兰新加坡官网:Sephora新加坡
2018/12/04 全球购物
保时捷设计:Porsche Design
2019/03/30 全球购物
英国在线滑雪板和冲浪商店:The Board Basement
2020/01/11 全球购物
应用心理学个人的求职信
2013/12/08 职场文书
预备党员入党思想汇报
2014/01/04 职场文书
京剧自荐信
2014/01/26 职场文书
公司委托书格式范文
2014/04/04 职场文书
标准离婚协议书范文下载
2014/11/30 职场文书
CSS filter 有什么神奇用途
2021/05/25 HTML / CSS
深入理解margin塌陷和margin合并的解决方案
2021/06/26 HTML / CSS
Nginx配置https的实现
2021/11/27 Servers