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 相关文章推荐
Prototype 1.5.0_rc1 及 Prototype 1.5.0 Pre0小抄本
Sep 22 Javascript
javascript工具库代码
Mar 29 Javascript
获取当前点击按钮的id用this.id实现
Mar 17 Javascript
按钮接受回车事件的三种实现方法
Jun 06 Javascript
WEB前端设计师常用工具集锦
Dec 09 Javascript
轻松掌握jQuery中wrap()与unwrap()函数的用法
May 24 Javascript
Ext JS框架程序中阻止键盘触发回退或者刷新页面的代码分享
Jun 07 Javascript
基于vue实现swipe轮播组件实例代码
May 24 Javascript
JavaScript实现离开页面前提示功能【附jQuery实现方法】
Sep 26 jQuery
Vue表情输入组件 微信face表情组件
Feb 11 Javascript
服务端预渲染之Nuxt(使用篇)
Apr 08 Javascript
详解微信小程序开发(项目从零开始)
Jun 06 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命令行用法
2015/02/04 PHP
js onpropertychange输入框 事件获取属性
2009/03/26 Javascript
js 手机号码合法性验证代码集合
2012/09/29 Javascript
datagrid框架的删除添加与修改
2013/04/08 Javascript
js中this的用法实例分析
2015/01/10 Javascript
javascript自动生成包含数字与字符的随机字符串
2015/02/09 Javascript
JavaScript实现的背景自动变色代码
2015/10/17 Javascript
jquery中ajax跨域方法实例分析
2015/12/18 Javascript
很不错的两款Bootstrap Icon图标选择组件
2016/01/28 Javascript
AngularJS 让人爱不释手的八种功能
2016/03/23 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
js实现HashTable(哈希表)的实例分析
2016/11/21 Javascript
jquery+ajax实现省市区三级联动 (封装和不封装两种方式)
2017/05/15 jQuery
JavaScript 复制对象与Object.assign方法无法实现深复制
2018/11/02 Javascript
简单说说如何使用vue-router插件的方法
2019/04/08 Javascript
JS实现随机抽取三人
2019/11/06 Javascript
Bootstrap FileInput实现图片上传功能
2021/01/28 Javascript
nestjs返回给前端数据格式的封装实现
2021/02/22 Javascript
Java中重定向输出流实现用文件记录程序日志
2015/06/12 Python
浅谈Python的异常处理
2016/06/19 Python
Python基于OpenCV库Adaboost实现人脸识别功能详解
2018/08/25 Python
python 读取竖线分隔符的文本方法
2018/12/20 Python
使用django的ORM框架按月统计近一年内的数据方法
2019/07/18 Python
Python QTimer实现多线程及QSS应用过程解析
2020/07/11 Python
详解Python高阶函数
2020/08/15 Python
属性与 @property 方法让你的python更高效
2020/09/21 Python
Python+OpenCV图像处理——打印图片属性、设置存储路径、调用摄像头
2020/10/22 Python
HTML5 和小程序实现拍照图片旋转、压缩和上传功能
2018/10/08 HTML / CSS
美国环保妈妈、儿童和婴儿用品购物网站:The Tot
2019/11/24 全球购物
秘书岗位职责
2013/11/18 职场文书
前厅收银主管岗位职责
2014/02/04 职场文书
学习实践科学发展观心得体会
2014/09/10 职场文书
党的群众路线整改落实情况汇报
2014/10/28 职场文书
公开致歉信
2019/06/24 职场文书
python3操作redis实现List列表实例
2021/08/04 Python
Python自动化工具之实现Excel转Markdown表格
2022/04/08 Python