为什么80%的码农都做不了架构师?>>>   

web的三要素html, css, js在前端组件化的过程中,比如react,vue等组件化框架的运用,使html 的弱化与 js 的强化成为了一种趋势,而在这个过程中,其实还有另一种趋势也在慢慢形成:css 的弱化与 js 的强化

css in js理念,即摒弃的英文原有的用.css文件书写样式,而样式把写进js里面,这样就可以做到一个组件对应一个文件,一个文件便是一个组件。

1.支持的第三方库

  1. styled-components:仅支持react
  2. radium:仅支持react
  3. 情感
  4. 阿芙罗狄蒂
  5. JSS
  6. 魅力四射:仅支持react
  7. styled-jsx:仅支持react
  8. 魅力:仅支持react
  9. styletron:仅支持react

更多第三方库可以参考css-in-js。

书写方式

一般css in js的写法有两种:

  1. 使用es6的模板字符串
  2. 使用js对象 {}

2.1使用es6的模板字符串

styled-components,emotion,styled-jsx都是采用的这种写法。

比如styled-components

import React from 'react';
import styled from 'styled-components';// 创建一个使用 <h1> 标签的 <Title> React 组件
const Title = styled.h1`font-size: 1.5em;text-align: center;color: palevioletred;
`;// 创建一个使用 <section> 标签的 <Wrapper> React 组件
const Wrapper = styled.section`padding: 4em;background: papayawhip;
`;// 就像正常的 React 组件一样,只不过他们都自带样式
<Wrapper><Title>Hello World, this is my first styled component!</Title>
</Wrapper>

比如emotion

import { css } from 'emotion';const app = document.getElementById('root');
const myStyle = css`color: rebeccapurple;
`;
app.classList.add(myStyle);

这种写法的好处是,通过编辑器插件和lint插件(如stylelint),就像写正常的css一样,有自动完成提示,错误提示,lint自动矫正等功能。

2.2使用js对象 {}

镭,阿芙罗狄蒂,抛光,jss,魅力四射,魅力,styletron都是采用的这种写法。

比如radium

import Radium from 'radium';
import React from 'react';
import color from 'color';var styles = {base: {color: '#fff',':hover': {background: color('#0074d9').lighten(0.2).hexString()}},primary: {background: '#0074D9'},warning: {background: '#FF4136'}
};class Button extends React.Component {render() {return (<buttonstyle={[styles.base, styles[this.props.kind]]}>{this.props.children}</button>);}
}Button = Radium(Button);<Button kind="primary">Primary</Button>
<Button kind="warning">Warning</Button>

比如aphrodite

import React, { Component } from 'react';
import { StyleSheet, css } from 'aphrodite';const styles = StyleSheet.create({red: {backgroundColor: 'red'},blue: {backgroundColor: 'blue'},hover: {':hover': {backgroundColor: 'red'}},small: {'@media (max-width: 600px)': {backgroundColor: 'red',}}
});class App extends Component {render() {return <div><span className={css(styles.red)}>This is red.</span><span className={css(styles.hover)}>This turns red on hover.</span><span className={css(styles.small)}>This turns red when the browser is less than 600px width.</span><span className={css(styles.red, styles.blue)}>This is blue.</span><span className={css(styles.blue, styles.small)}>This is blue and turns red when the browser is less than 600px width.</span></div>;}
}

这种写法的好处是,不需要es6的语法,对属性可以更方便的操作。

3.决定是否使用

如果你是喜欢把样式和组件分开书写,那么这种方式就可能不太适合你;如果你追求一个组件对应一个文件,一个文件便是一个组件,那就立马用上吧。

在这里给大家分享一下,我是一名5年前端工程师,自己建了一个q群:731771211 ,群里不停更新最新的教程和学习方法,加入一起学习与交流

转载于:https://my.oschina.net/zybc/blog/2206269

前端进阶 -css的弱化与js的强化(11)相关推荐

  1. 前端进阶(12) - css 的弱化与 js 的强化

    css 的弱化与 js 的强化 web 的三要素 html, css, js 在前端组件化的过程中,比如 react.vue 等组件化框架的运用,使 html 的弱化与 js 的强化 成为了一种趋势, ...

  2. css before 文字前面竖线_前端进阶: css必知的几个底层知识和技巧

    学习方法推荐 问题学习法:带着问题去学习,有利于集中注意力,目的明确,这既是有意学习的要求,也是发现学习的必要条件.心理学家把注意分为无意注意与有意注意两种.有意注意要求预先有自觉的目的,必要时需经过 ...

  3. 前端进阶(十八)js多线程

    HTML5引入Web Works,让js支持多线程. 一.多线程demo 1.先写一个add函数 function(a, b){if(a && b){return a + b;}ret ...

  4. IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略

    IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...

  5. 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS

    实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS 实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 2. 代码实现 2.1 HTML和JS代码 2.2 CSS代 ...

  6. 利用html-minifier和uglify-js对前端HTML/CSS/JS文件进行压缩

    利用html-minifier和uglify-js对前端HTML/CSS/JS文件进行压缩 前言:最近项目组项目接近完工,因为是个网站改造项目,大多数页面都是静态页面,前端开发并没有使用框架或工程化的 ...

  7. 前端进阶之路: 前端架构设计(2)-流程核心

    可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视 ...

  8. Web前端书单从HTML到JS到AJAX到HTTP从框架到全栈

    前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...

  9. web前端进阶<7>:3d图像翻转效果

    这几天又闲着无聊,自己学的东西又有一点不牢固了,需要写一个小程序来巩固一下,相信大家也时有同感吧!那么这一期就给大家带来一个炫酷的相册3d翻转效果,如果搭上炫酷的文字和动画那肯定是高端.霸气上档次的: ...

最新文章

  1. 《那些年啊,那些事——一个程序员的奋斗史》——74
  2. 将Android源码集成到Eclipse中的方法
  3. python训练手势分类器_机器学习零基础?手把手教你用TensorFlow搭建图像分类器|干货...
  4. REVERSE-PRACTICE-CTFSHOW-6
  5. 打开cmd窗口新技巧get
  6. 卡尔曼滤波—建立状态空间表达式
  7. iOS中UINavigationController控制器使用详解
  8. 台式计算机前面插耳机没声音,Win10台式机机箱前置耳机插孔没声音如何修复
  9. Android 之获取屏幕高度+状态栏高度
  10. PDF可以修改吗,如何在PDF上修改文字
  11. mysql+xf01x,[613]redis数据迁移
  12. [QT]The inferior stopped because it received a signal from the operating system 自己解决方法
  13. 面向对象课程设计日志(八)
  14. 留存电脑硬盘的影视剧作品
  15. 项目经理如何做好项目数据分析?
  16. 【区间dp】关路灯 牛客网题解
  17. TRIZ创新方法——ARIZ算法
  18. 机电项目统计工具版本发布
  19. 需要近期熟悉的表_2019_3_18
  20. oracle 根据手机号判断三大运营商函数

热门文章

  1. --noinput loaddata
  2. Windows Phone 7 MVVM模式数据绑定和传递参数
  3. java-HashSet源码学习
  4. 设备管理器中的计算机有什么用,为什么计算机设备管理器中有两个图形卡?
  5. Nacos源码BeatReactor
  6. 使用Docker-容器命令介绍
  7. mybatis基础支撑层源码分析 日志模块需求
  8. MyBatis 实际使用案例-Mapper.xml 映射配置文件【重点】
  9. Spring AOP 源码分析-寻找入口
  10. Quartz框架中的JobStore