前端进阶 -css的弱化与js的强化(11)
为什么80%的码农都做不了架构师?>>>
web
的三要素html, css, js
在前端组件化的过程中,比如react,vue等组件化框架的运用,使html 的弱化与 js 的强化
成为了一种趋势,而在这个过程中,其实还有另一种趋势也在慢慢形成:css 的弱化与 js 的强化
。
css in js
理念,即摒弃的英文原有的用.css
文件书写样式,而样式把写进js
里面,这样就可以做到一个组件对应一个文件,一个文件便是一个组件。
1.支持的第三方库
- styled-components:仅支持
react
- radium:仅支持
react
- 情感
- 阿芙罗狄蒂
- 光
- JSS
- 魅力四射:仅支持
react
- styled-jsx:仅支持
react
- 魅力:仅支持
react
- styletron:仅支持
react
更多第三方库可以参考css-in-js。
书写方式
一般css in js
的写法有两种:
- 使用
es6
的模板字符串 - 使用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)相关推荐
- 前端进阶(12) - css 的弱化与 js 的强化
css 的弱化与 js 的强化 web 的三要素 html, css, js 在前端组件化的过程中,比如 react.vue 等组件化框架的运用,使 html 的弱化与 js 的强化 成为了一种趋势, ...
- css before 文字前面竖线_前端进阶: css必知的几个底层知识和技巧
学习方法推荐 问题学习法:带着问题去学习,有利于集中注意力,目的明确,这既是有意学习的要求,也是发现学习的必要条件.心理学家把注意分为无意注意与有意注意两种.有意注意要求预先有自觉的目的,必要时需经过 ...
- 前端进阶(十八)js多线程
HTML5引入Web Works,让js支持多线程. 一.多线程demo 1.先写一个add函数 function(a, b){if(a && b){return a + b;}ret ...
- IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/中后台/体验管理等)之详细攻略
IT:前端进阶技术路线图(初级→中级→高级)之初级(研发工具/HTML/CSS/JS/浏览器)/中级(研发链路/工程化/库/框架/性能优化/工作原理)/高级(搭建/Node/IDE/中后台/体验管理/ ...
- 实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS
实现简易版德州扑克|学习麻瓜编程以项目为导向入门前端 HTML+CSS+JS 实现简易版德州扑克 1.先上达到网页效果图(简易版德州扑克) 2. 代码实现 2.1 HTML和JS代码 2.2 CSS代 ...
- 利用html-minifier和uglify-js对前端HTML/CSS/JS文件进行压缩
利用html-minifier和uglify-js对前端HTML/CSS/JS文件进行压缩 前言:最近项目组项目接近完工,因为是个网站改造项目,大多数页面都是静态页面,前端开发并没有使用框架或工程化的 ...
- 前端进阶之路: 前端架构设计(2)-流程核心
可能很多人和我一样, 首次听到"前端架构"这个词, 第一反应是: "前端还有架构这一说呢?" 在后端开发领域, 系统规划和可扩展性非常关键, 因此架构师备受重视 ...
- Web前端书单从HTML到JS到AJAX到HTTP从框架到全栈
前言:技术书阅读方法论 一.速读一遍(最好在1~2天内完成) 人的大脑记忆力有限,在一天内快速看完一本书会在大脑里留下深刻印象,对于之后复习以及总结都会有特别好的作用. 对于每一章的知识,先阅读标题, ...
- web前端进阶<7>:3d图像翻转效果
这几天又闲着无聊,自己学的东西又有一点不牢固了,需要写一个小程序来巩固一下,相信大家也时有同感吧!那么这一期就给大家带来一个炫酷的相册3d翻转效果,如果搭上炫酷的文字和动画那肯定是高端.霸气上档次的: ...
最新文章
- 《那些年啊,那些事——一个程序员的奋斗史》——74
- 将Android源码集成到Eclipse中的方法
- python训练手势分类器_机器学习零基础?手把手教你用TensorFlow搭建图像分类器|干货...
- REVERSE-PRACTICE-CTFSHOW-6
- 打开cmd窗口新技巧get
- 卡尔曼滤波—建立状态空间表达式
- iOS中UINavigationController控制器使用详解
- 台式计算机前面插耳机没声音,Win10台式机机箱前置耳机插孔没声音如何修复
- Android 之获取屏幕高度+状态栏高度
- PDF可以修改吗,如何在PDF上修改文字
- mysql+xf01x,[613]redis数据迁移
- [QT]The inferior stopped because it received a signal from the operating system 自己解决方法
- 面向对象课程设计日志(八)
- 留存电脑硬盘的影视剧作品
- 项目经理如何做好项目数据分析?
- 【区间dp】关路灯 牛客网题解
- TRIZ创新方法——ARIZ算法
- 机电项目统计工具版本发布
- 需要近期熟悉的表_2019_3_18
- oracle 根据手机号判断三大运营商函数