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评估用户输入密码的强度(Knockout版)
Nov 30 Javascript
如何从jQuery的ajax请求中删除X-Requested-With
Dec 11 Javascript
浅析JS获取url中的参数实例代码
Jun 14 Javascript
select隐藏选中值对应的id,显示其它id的简单实现方法
Aug 25 Javascript
js实现一个可以兼容PC端和移动端的div拖动效果实例
Dec 09 Javascript
JS字符串长度判断,超出进行自动截取的实例(支持中文)
Mar 06 Javascript
vue如何实现observer和watcher源码解析
Mar 09 Javascript
基于JavaScript实现焦点图轮播效果
Mar 27 Javascript
JS二叉树的简单实现方法示例
Apr 05 Javascript
详解基于vue-cli配置移动端自适应
Jan 13 Javascript
基于Vue CSR的微前端实现方案实践
May 27 Javascript
js简单粗暴的发布订阅示例代码
Jan 23 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
PHP中Session的概念
2006/10/09 PHP
php自定义函数截取汉字长度
2014/05/15 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
PHP Static延迟静态绑定用法分析
2016/03/16 PHP
PHPCMS手机站伪静态设置详细教程
2017/02/06 PHP
TP5(thinkPHP5)框架基于ajax与后台数据交互操作简单示例
2018/09/03 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
JavaScript在IE和Firefox浏览器下的7个差异兼容写法小结
2010/06/18 Javascript
js下获得客户端操作系统的函数代码(1:vista,2:windows7,3:2000,4:xp,5:2003,6:2008)
2011/10/31 Javascript
JS 两个字符串时间的天数差计算
2013/08/25 Javascript
详谈jQuery中的this和$(this)
2014/11/13 Javascript
jquery实现的代替传统checkbox样式插件
2015/06/19 Javascript
jQuery.uploadify文件上传组件实例讲解
2016/09/23 Javascript
js原生实现FastClick事件的实例
2016/11/20 Javascript
详解Angularjs在控制器(controller.js)中使用过滤器($filter)格式化日期/时间实例
2017/02/17 Javascript
React Js 微信禁止复制链接分享禁止隐藏右上角菜单功能
2017/05/26 Javascript
javascript标准库(js的标准内置对象)总结
2018/05/26 Javascript
微信小程序使用echarts获取数据并生成折线图
2019/10/16 Javascript
小程序Scroll-view上拉滚动刷新数据
2020/06/21 Javascript
[49:28]VP vs Optic 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
Python中多个数组行合并及列合并的方法总结
2018/04/12 Python
python实现决策树ID3算法的示例代码
2018/05/30 Python
python中使用psutil查看内存占用的情况
2018/06/11 Python
JSON文件及Python对JSON文件的读写操作
2018/10/07 Python
python图片指定区域替换img.paste函数的使用
2020/04/09 Python
世界上最大的售后摩托车零配件超市:J&P Cycles
2017/12/08 全球购物
澳大利亚快时尚鞋类市场:Billini
2018/05/20 全球购物
设计模式的基本要素是什么
2014/04/21 面试题
介绍一下Ruby的特点
2013/01/20 面试题
求职信模板怎么做
2014/01/26 职场文书
微笑服务演讲稿
2014/05/13 职场文书
《中国梦我的梦》大学生演讲稿
2014/08/20 职场文书
公司与个人合作协议书
2016/03/19 职场文书
高一作文之乐趣
2019/11/21 职场文书
OpenCV-Python实现轮廓拟合
2021/06/08 Python
Python基本的内置数据类型及使用方法
2022/04/13 Python