Fower: 一个可在 Vue 和 React 方便使用的 CSS in JS 库
SegmentFault
共 6480字,需浏览 13分钟
·
2021-04-24 20:52
作者:forsigner
来源:SegmentFault 思否社区
Fower 是什么?
项目背景
在 Web 项目中,我们使用的是 Styed-component; 在 React native 项目中,我们使用 React native 自带的 StyleSheet.create
;在小程序项目中,我们使用 Taro 开发,样式方案是 Sass;
开发体验差,开发同样的界面,却要不同的写法,需要不断切换习惯和思维 工具链太广太复杂,Styled-component、Sass、StyleSheet.create... 开发效率低下,重复代码特别多 CSS 天生缺点多,可维护性差
<div toCenterY p-10 w-260 rounded-10 shadow>
<img circle-48 src="/img/jobs.jpg" />
<div ml-10>
<div textXL fontBold>Steve Jobs</div>
<span gray800>Co-founder of Apple Inc.</span>
</div>
</div>
核心理念
utility-first,这种方式让我们更快速地编写样式,和其他 "utility-first" CSS 框架不同的是,Fower 使用 "Atomic style prop" 编写样式 Type safe,我们团队是 TypeScript 重度使用用户,Type safe 带来的智能提示,让我们几乎很少翻阅文档,并且在编写代码时不依赖任何编辑插件就有准确的自动补全 Framework-agnostic,这是我们创建 Fower 的最主要原因之一,Fower 可以让你用一致的写法在 React、Vue、React Native 编写样式 CSS in JS,我们讨厌在独立的 CSS 文件中编写 CSS,纯 CSS 有非常多缺点,如:无法访问 JS 变量;容易产生样式冲突;容易产生死代码... 我们喜欢使用 JS (CSS in JS) 编写样式,它更适合在组件化时代中使用。实际上,Fower 不仅仅是 CSS in JS,它也是 CSS in HTML。
一些很酷的特性
toCenter
、toCenterX
、toCenterY
、toLeft
、toTop
、toRight
、toBottom
、toBetween
、toEvenly
、toAround
十种原子对齐方式,使用时你可以忘记传统 flex 布局中的主轴(main axis)和交叉轴(cross axis)的概念,你只需要有方向感即可。<div toCenter bgGray100 square-200>
<div square-60 bgAmber400 rounded-8></div>
<div square-80 bgBlue400 rounded-8></div>
</div>
2. Predictable style
.red {
color: red;
}
.blue
color: blue;
}
<div>
<span className="red blue">Fower</span>
<span className="blue red">Fower</span>
</div>
<div>
<span red400 blue400> text will be color blue400 </span>
<span blue400 red400> text will be color red400 </span>
</div>
Button
, 那调用方可以轻易的覆盖组件默认样式,比如这样类似的代码 <Button bgRed300></Button>
可以安全的设置背景色。3. 颜色助手
--D{0-100}
这样的后缀来加深一个颜色:<div toEvenly toCenterY>
<div red300>normal</div>
<div red300--D40>darken</div>
<div color="#fff--D40">darken</div>
<div bgRed300 square-84></div>
<div bgRed300--D40 square-84></div>
<div border borderRed300 square-84></div>
<div border borderRed300--D40 square-84></div>
</div>
--L{0-100}
后缀来变浅一个颜色:<div toEvenly>
<div red500>normal</div>
<div red500--T40>transparentize</div>
<div color="#000--T40">transparentize</div>
<div bgRed500 square-84></div>
<div bgRed500--T40 square-84></div>
<div border borderRed300 square-84></div>
<div border borderRed300--T40 square-84></div>
</div>
--T{0-100}
后缀来增加颜色的透明度:<div toEvenly>
<div red500>normal</div>
<div red500--T40>transparentize</div>
<div color="#000--T40">transparentize</div>
<div bgRed500 square-84></div>
<div bgRed500--T40 square-84></div>
<div border borderRed300 square-84></div>
<div border borderRed300--T40 square-84></div>
</div>
--O{0-100}
后缀来增加颜色的不透明度:<div toEvenly>
<div color="rgba(0,0,0,0.4)">0.4</div>
<div color="rgba(0,0,0,0.4)--O40">Opacify to 0.6</div>
<div bg="rgba(0,0,0,0.4)" square-84></div>
<div bg="rgba(0,0,0,0.4)--O40" square-84></div>
<div border borderColor="rgba(0,0,0,0.4)" square-84></div>
<div border borderColor="rgba(0,0,0,0.4)--O40" square-84></div>
</div>
4. 可组合的后缀
--hover
, --focus
, --sm
, --dark
, --T{amount}
...<div square-84 bgOrange300 bgOrange400--D10--hover--sm></div>
<div square-84 bgOrange300 bgOrange400--hover--sm--D10></div>
最后
项目地址:
https://github.com/forsigner/fower)%5Bhttps://github.com/forsigner/fower%5D
评论