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对JSON进行模式匹配(Part 1-设计)
Jul 17 Javascript
jQuery.ajax 用户登录验证代码
Oct 29 Javascript
js的表单操作 简单计算器
Dec 29 Javascript
jquery无缝向上滚动实现代码
Mar 29 Javascript
Javascript验证上传图片大小[前台处理]
Jul 18 Javascript
javascript中对变量类型的判断方法
Aug 09 Javascript
JQuery 设置checkbox值二次无效的解决方法
Jul 22 Javascript
JSON 对象未定义错误的解决方法
Sep 29 Javascript
Node.js 如何利用异步提升任务处理速度
Jan 07 Javascript
Vue自定义属性实例分析
Feb 23 Javascript
jQuery 选择器用法基础入门示例
Jan 04 jQuery
JavaScript事件冒泡机制原理实例解析
Jan 14 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初学者头疼问题总结
2006/07/08 PHP
php中文本操作的类
2007/03/17 PHP
CodeIgniter框架过滤HTML危险代码
2014/06/12 PHP
PHP处理Oracle的CLOB实例
2014/11/03 PHP
PHP实现将浏览历史页面网址保存到cookie的方法
2015/01/26 PHP
php如何实现不借助IDE快速定位行数或者方法定义的文件和位置
2017/01/17 PHP
Laravel下生成验证码的类
2017/11/15 PHP
Laravel5.1框架路由分组用法实例分析
2020/01/04 PHP
brook javascript框架介绍
2011/10/10 Javascript
实现js保留小数点后N位的代码
2014/11/13 Javascript
JavaScript修改浏览器tab标题小技巧
2015/01/06 Javascript
基于JavaScript实现移动端点击图片查看大图点击大图隐藏
2015/11/04 Javascript
BootStrap Fileinput上传插件使用实例代码
2017/07/28 Javascript
vue translate peoject实现在线翻译功能【新手必看】
2018/06/07 Javascript
react build 后打包发布总结
2018/08/24 Javascript
Vue项目部署在Spring Boot出现页面空白问题的解决方案
2018/11/26 Javascript
vue项目中axios请求网络接口封装的示例代码
2018/12/18 Javascript
Vue中多个元素、组件的过渡及列表过渡的方法示例
2019/02/13 Javascript
node.js中事件触发器events的使用方法实例分析
2019/11/23 Javascript
JS数组push、unshift、pop、shift方法的实现与使用方法示例
2020/04/29 Javascript
vue 项目@change多个参数传值多个事件的操作
2021/01/29 Vue.js
Python3基础之条件与循环控制实例解析
2014/08/13 Python
Python实现八大排序算法
2016/08/13 Python
Python编程使用tkinter模块实现计算器软件完整代码示例
2017/11/29 Python
Django框架下静态模板的继承操作示例
2019/11/08 Python
python的help函数如何使用
2020/06/11 Python
Django中和时区相关的安全问题详解
2020/10/12 Python
浅析Python模块之间的相互引用问题
2021/02/26 Python
python lambda的使用详解
2021/02/26 Python
详解HTML5中rel属性的prefetch预加载功能使用
2016/05/06 HTML / CSS
亚马逊海外购:亚马逊美国、英国、日本、德国直邮
2021/03/18 全球购物
《春天来了》教学反思
2014/04/07 职场文书
机关党员三严三实心得体会
2014/10/13 职场文书
2015小学毕业班工作总结
2015/07/21 职场文书
mysql定时自动备份数据库的方法步骤
2021/07/07 MySQL
Python调用腾讯API实现人脸身份证比对功能
2022/04/04 Python