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实现禁止后退的方法
Dec 27 Javascript
js操作二级联动实现代码
Jul 27 Javascript
自用js开发框架小成 学习js的朋友可以看看
Nov 16 Javascript
JS实现淘宝幻灯片效果的实现方法
Mar 22 Javascript
javascript实现动态侧边栏代码
Feb 19 Javascript
AngularJS实现一次监听多个值发生的变化
Aug 31 Javascript
Vue input控件通过value绑定动态属性及修饰符的方法
May 03 Javascript
详解Vue2.x-directive的学习笔记
Jul 17 Javascript
JavaScript获取tr td 的三种方式全面总结(推荐)
Aug 15 Javascript
vue.js的手脚架vue-cli项目搭建的步骤
Aug 30 Javascript
原生JS实现 MUI导航栏透明渐变效果
Nov 07 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 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 文件上传系统手记
2009/10/26 PHP
IIS7.X配置PHP运行环境小结
2011/06/09 PHP
使用php get_headers 判断URL是否有效的解决办法
2013/04/27 PHP
php使用Imagick生成图片的方法
2015/07/31 PHP
学习php设计模式 php实现工厂模式(factory)
2015/12/07 PHP
php微信公众号开发之欢迎老朋友
2018/10/20 PHP
用jscript启动sqlserver
2007/06/21 Javascript
jQuery AnythingSlider滑动效果插件
2010/02/07 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JavaScript 常见安全漏洞和自动化检测技术
2015/08/21 Javascript
下雪了 javascript实现雪花飞舞
2020/08/02 Javascript
js日期相关函数dateAdd,dateDiff,dateFormat等介绍
2016/09/24 Javascript
Javascript 函数的四种调用模式
2016/11/05 Javascript
Bootstrap风格的zTree右键菜单
2017/02/17 Javascript
JScript实现表格的简单操作
2017/08/15 Javascript
微信小程序之前台循环数据绑定
2017/08/18 Javascript
webpack 打包压缩js和css的方法示例
2018/03/20 Javascript
Vue与Node.js通过socket.io通信的示例代码
2018/07/25 Javascript
解决layui追加或者动态修改的表单元素“没效果”的问题
2019/09/18 Javascript
Vue使用虚拟dom进行渲染view的方法
2019/12/26 Javascript
跟老齐学Python之模块的加载
2014/10/24 Python
一些常用的Python爬虫技巧汇总
2016/09/28 Python
Python3实现取图片中特定的像素替换指定的颜色示例
2019/01/24 Python
详解Python函数式编程—高阶函数
2019/03/29 Python
手把手教你安装Windows版本的Tensorflow
2020/03/26 Python
Python3 ffmpeg视频转换工具使用方法解析
2020/08/10 Python
Ubuntu16安装Python3.9的实现步骤
2020/12/15 Python
python绘制雷达图实例讲解
2021/01/03 Python
党校培训思想汇报
2014/01/03 职场文书
汽车队司机先进事迹材料
2014/02/01 职场文书
家电业务员岗位职责
2014/03/10 职场文书
2014年村官工作总结
2014/11/24 职场文书
2015年创先争优活动总结
2015/03/27 职场文书
红色经典电影观后感
2015/06/18 职场文书
Python实现自动玩连连看的脚本分享
2022/04/04 Python