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 相关文章推荐
fckeditor 获取文本框值的实现代码
Feb 09 Javascript
Javascript 函数对象的多重身份
Jun 28 Javascript
Javascript 八进制转义字符(8进制)
Apr 08 Javascript
jQuery Mobile 导航栏代码
Nov 01 Javascript
详解javascript遍历方式
Nov 11 Javascript
jQuery EasyUi实战教程之布局篇
Jan 26 Javascript
javascript拖拽应用实例(二)
Mar 25 Javascript
微信小程序 闭包写法详细介绍
Dec 14 Javascript
BootStrap table删除指定行的注意事项(笔记整理)
Feb 05 Javascript
js实现下拉菜单效果
Mar 01 Javascript
解决webpack无法通过IP地址访问localhost的问题
Feb 22 Javascript
js 图片转base64的方式(两种)
Apr 24 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
ThinkPHP实现将SESSION存入MYSQL的方法
2014/07/22 PHP
PHP管理依赖(dependency)关系工具 Composer 安装与使用
2014/08/18 PHP
php打造智能化的柱状图程序,用于报表等
2015/06/19 PHP
php header函数的常用http头设置
2015/06/25 PHP
Yii2学习笔记之汉化yii设置表单的描述(属性标签attributeLabels)
2017/02/07 PHP
PHP实现合并两个排序链表的方法
2018/01/19 PHP
解决Extjs4中form表单提交后无法进入success函数问题
2013/11/26 Javascript
jquery 操作iframe的几种方法总结
2013/12/13 Javascript
JS实现在线统计一个页面内鼠标点击次数的方法
2015/02/28 Javascript
JavaScript+CSS无限极分类效果完整实现方法
2015/12/22 Javascript
javascript自动恢复文本框点击清除后的默认文本
2016/01/12 Javascript
仿百度换肤功能的简单实例代码
2016/07/11 Javascript
轻松实现js弹框显示选项
2016/09/13 Javascript
jQuery实现表格文本框淡入更改值后淡出效果
2016/09/27 Javascript
Vue导出页面为PDF格式的实现思路
2018/07/31 Javascript
使用Node搭建reactSSR服务端渲染架构
2018/08/30 Javascript
jQuery操作attr、prop、val()/text()/html()、class属性
2019/05/23 jQuery
node.js命令行教程图文详解
2019/05/27 Javascript
vue实现循环滚动列表
2020/06/30 Javascript
VUE+Element实现增删改查的示例源码
2020/11/23 Vue.js
Python基于checksum计算文件是否相同的方法
2015/07/09 Python
python3 实现的人人影视网站自动签到
2016/06/19 Python
opencv改变imshow窗口大小,窗口位置的方法
2018/04/02 Python
解决python执行不输出系统命令弹框的问题
2019/06/24 Python
基于Python爬取爱奇艺资源过程解析
2020/03/02 Python
Python可以实现栈的结构吗
2020/05/27 Python
Python小白垃圾回收机制入门
2020/06/09 Python
纯CSS3大转盘抽奖示例代码(响应式、可配置)
2017/01/13 HTML / CSS
Perfume’s Club澳大利亚官网:西班牙领先的在线美容店
2021/02/01 全球购物
自我鉴定写作要点
2014/01/17 职场文书
一年级小学生评语
2014/04/22 职场文书
暑期实践个人总结
2015/03/06 职场文书
2015年反腐倡廉工作总结
2015/05/14 职场文书
岗位聘任协议书
2015/09/21 职场文书
2016廉洁教育心得体会
2016/01/20 职场文书
一篇文章看懂MySQL主从复制与读写分离
2021/11/07 MySQL