前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CSS 思考 ☞『CSS in JS』 or 『JS in CSS』 ?

CSS 思考 ☞『CSS in JS』 or 『JS in CSS』 ?

作者头像
掘金安东尼
发布2022-11-30 11:37:06
25.8K0
发布2022-11-30 11:37:06
举报
文章被收录于专栏:掘金安东尼掘金安东尼

CSS in JS

前面写了一篇: CSS in JS = JSS , 这个库你知道吗? - 掘金

在评论里有人说:

同时还发了一个沸点:

你听说过 JSS 吗?在 JS 中写 CSS,感觉有点奇葩。 - 沸点 - 掘金


大家都很有才,视野很开阔~~

本瓜所在的项目组技术栈主要是 Vue2,平常又疏于 CSS 探究,对 JSX 里融合写 CSS 这种全面组件化的写法了解不多。

我现在是意识到了,这种写法其实早就有了,可参见阮一峰的这篇:CSS Modules 用法教程 - 阮一峰的网络日志

简而言之,代码组织形式类似如下,从 A 到 B 的过程:

代码语言:javascript
复制
// *.scss
.item {
  display: flex;
}
  • A ` // Simply import import './foo.scss';

const App = () => (

代码语言:txt
复制
 {item}   

)

代码语言:javascript
复制
* B

// import as a js module import styles from './foo.scss';

const App = () => (

代码语言:txt
复制
 {item}   

)

代码语言:javascript
复制
编译出来的结果也不一样:

* A

foo bar

代码语言:javascript
复制
* B

foo bar

代码语言:txt
复制

CSS in JS ,将样式也整合在模板组件里面,确实就像有人所说的:“分久必合、合久必分”。

JS in CSS

后来又了解到:

除了 CSS in JS,还有一种方向是 JS in CSS;尤雨溪在 Vue3.2 提出,目的是:让我们可以在 css 中使用 js 变量。SFC style CSS variable injection (new edition) by yyx990803 · Pull Request #231 · vuejs/rfcs

CSS in JS 是把 CSS 写在 JSX 模板中; JS in CSS 是把 JS 变量写入 CSS 中;

想想我们在 Vue2 中,想动态控制样式,我们通常这样:

代码语言:javascript
复制
<template>
    <h1 :style="{opacity: opacity}">Vue</h1>
</template>

<script>
export default {
    data () {
        return { opacity: 0 }
    },
    mounted () {
        setInterval(() => {
            this.opacity >= 1 &amp;&amp; (this.opacity = 0)
            this.opacity += 0.2
        }, 300)
    }
}
</script>

<style>
h1 {
    color: rgb(65,184,131);
}
</style>

在 Vue3.2 中:

代码语言:javascript
复制
<template>
    <h1>Vue</h1>
</template>
<script>
export default {
    data () {
        return { opacity: 0 }
    },
    mounted () {
        setInterval(() => {
            this.opacity >= 1 &amp;&amp; (this.opacity = 0)
            this.opacity += 0.2
        }, 300)
    }
}
</script>

<style> 
h1 {
    color: rgb(65,184,131);
    opacity: v-bind(opacity);
}
</style>

这个要借助 vite 编译:

代码语言:javascript
复制
npm init vite-app vars

npm i

npm run dev

然后就可以看到效果了

再补充一个颜色选择器的例子

代码语言:javascript
复制
<template>
  <div class="Example">
    <div class="area">
      <div class="form">
        <label>Select Color (SCSS)</label>
        <input type="color" v-model="themeColors.bgColor" />
      </div>
      <div class="preview">
        <span>{{ themeColors.bgColor }}</span>
        <div class="customColor"></div>
      </div>
    </div>
  </div>
</template>

<script>
import { ref } from "vue";

export default {
   setup() {
    const themeColors = ref({
      bgColor: ''
    })

    return {
      themeColors
    };
  },
};
</script>

<style lang="scss">

.Example {
  $customColor: v-bind('themeColors.bgColor');

  .customColor {
    background: $customColor;
    width: 100px;
    height: 50px;
  }
}

</style>

来源

小结

不管是 CSS in JS 还是 JS in CSS,总之都想整合 JS 和 CSS 的能力,梳理一个新的模板规范。

后面还会怎么变?拭目以待。


OK,以上便是本篇分享,希望各位工友喜欢~ 欢迎点赞、收藏、评论 🤟

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2022-11-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • CSS in JS
  • JS in CSS
  • 小结
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档