Skip to content
On this page

样式

介绍

本节主要介绍如何在项目中使用和规划样式文件。

牛搭默认使用 scss 作为预处理语言,建议在使用前或者遇到疑问时学习一下 Scss 的相关特性(如果想获取基础的 CSS 知识或查阅属性,请参考 MDN 文档)。

一般项目中使用的通用样式,都存放于 src/assets/style 下面。

cow-Low-code/packages/editor/src/assets/style
├── global.scss # 全局通用样式
├── popover.module.scss # arco design vue中popover模块通用样式
├── preflight.css # 覆盖tailwind的preflight样式
└── tailwind.css # tailwind默认样式

全局注入

global.scss 这个文件会被全局注入到所有文件,所以在页面内可以直接使用变量而不需要手动引入

<style lang="scss" scoped>
// 这里已经隐式注入了 global.scss
</style>

物料组件样式

左侧物料区我们采用 IconPark 的图标和 tailwindcss 样式。

编辑区样式

由于牛搭的是一款应用在移动端的低代码平台,所以我们在 UI 上选择了 Vant,所以在物料组件中我们应该尽量向 Vant 的风格看齐。

tailwindcss

项目中引用到了 tailwindcss,具体可以见文件使用说明。

语法如下:

<div class="flex flex-col flex-grow w-full px-4"></div>

为什么使用 Scss

因为 Element Plus 使用 Scss 作为样式语言,使用 Scss 可以跟其保持一致。

深度选择器

有时我们可能想将样式作用于组件库的组件上。

如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 :deep() 操作符

使用 scoped 后,父组件的样式将不会渗透到子组件中,所以可以使用以下方式解决:

<style scoped>
:deep(.foo) {
}
</style>

CSS Modules

针对样式覆盖问题,还有一种方案是使用 CSS Modules 模块化方案。使用方式如下。

<template>
  <span :class="$style.span1">hello</span>
</template>

<script>
import { useCSSModule } from 'vue'

export default {
  setup(props, context) {
    const $style = useCSSModule()
    const moduleAStyle = useCSSModule('moduleA')
    return {
      $style,
      moduleAStyle,
    }
  },
}
</script>

<style lang="less" module>
.span1 {
  color: green;
  font-size: 30px;
}
</style>

<style lang="less" module="moduleA">
.span1 {
  color: green;
  font-size: 30px;
}
</style>

提示

上面只对 CSS Modules 进行了最基础的介绍,有兴趣可以参考其他文档:

github/css-modules

CSS Modules 用法教程

CSS Modules 详解及 React 中实践