写点什么

多平台快速开发的 UI 框架

作者:源字节1号
  • 2022 年 5 月 05 日
  • 本文字数:1805 字

    阅读完需:约 6 分钟

多平台快速开发的UI框架

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

默认使用 less 作为预处理语言,建议在使用前或者遇到疑问时学习一下 Less 的相关特性。

以下uView,uni.scss 插件的样式已在 App.vue/main.js 中全局引入,您可以直接使用

├── uview-ui 	# uView组件└── uni.scss 	# uniapp自带
复制代码

使用 uView

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

我们在全局样式中,通过 scss 提供了对应的颜色变量名,方便您在任何可写 css 的地方,调用这些变量,如下:

/* 变量的定义,该部分uView已全局引入,无需您编写 */$u-type-primary: #2979ff;$u-type-primary-light: #ecf5ff;$u-type-primary-disabled: #a0cfff;$u-type-primary-dark: #2b85e4;
/* 在您编写css的地方使用这些变量 */.title { color: $u-type-primary; ......;}
复制代码

使用 uni.scss

温馨提醒

uni.scss 文件的用途是为了方便整体控制应用的风格。比如按钮颜色、边框风格,uni.scss 文件里预置了一批 scss 变量预置。

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

uni-app 官方扩展插件及插件市场(https://ext.dcloud.net.cn)上很多三方插件均使用了这些样式变量

如果你是插件开发者,建议你使用 scss 预处理,并在插件代码中直接使用这些变量(无需 import 这个文件),方便用户通过搭积木的方式开发整体风格一致的 App

如果你是 App 开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能


注意

  • 如要使用这些常用变量,需要在 HBuilderX 里面安装 scss 插件;

  • 使用时需要在 style 节点上加上 lang="scss"。

<style lang="scss">  ......</style>
复制代码
  • pages.json 不支持 scss,原生导航栏和 tabbar 的动态修改只能使用 js api

以下是 uni.scss 的相关变量:

/* 颜色变量 */
/* 行为相关颜色 */$uni-color-primary: #007aff;$uni-color-success: #4cd964;$uni-color-warning: #f0ad4e;$uni-color-error: #dd524d;
/* 文字基本颜色 */$uni-text-color: #333; //基本色$uni-text-color-inverse: #fff; //反色$uni-text-color-grey: #999; //辅助灰色,如加载更多的提示信息$uni-text-color-placeholder: #808080;$uni-text-color-disable: #c0c0c0;
/* 背景颜色 */$uni-bg-color: #ffffff;$uni-bg-color-grey: #f8f8f8;$uni-bg-color-hover: #f1f1f1; //点击状态颜色$uni-bg-color-mask: rgba(0, 0, 0, 0.4); //遮罩颜色
/* 边框颜色 */$uni-border-color: #c8c7cc;
/* 尺寸变量 */
/* 文字尺寸 */$uni-font-size-sm: 24rpx;$uni-font-size-base: 28rpx;$uni-font-size-lg: 32rpx;
/* 图片尺寸 */$uni-img-size-sm: 40rpx;$uni-img-size-base: 52rpx;$uni-img-size-lg: 80rpx;
/* Border Radius */$uni-border-radius-sm: 4rpx;$uni-border-radius-base: 6rpx;$uni-border-radius-lg: 12rpx;$uni-border-radius-circle: 50%;
/* 水平间距 */$uni-spacing-row-sm: 10px;$uni-spacing-row-base: 20rpx;$uni-spacing-row-lg: 30rpx;
/* 垂直间距 */$uni-spacing-col-sm: 8rpx;$uni-spacing-col-base: 16rpx;$uni-spacing-col-lg: 24rpx;
/* 透明度 */$uni-opacity-disabled: 0.3; // 组件禁用态的透明度
/* 文章场景相关 */$uni-color-title: #2c405a; // 文章标题颜色$uni-font-size-title: 40rpx;$uni-color-subtitle: #555555; // 二级标题颜色$uni-font-size-subtitle: 36rpx;$uni-color-paragraph: #3f536e; // 文章段落颜色$uni-font-size-paragraph: 30rpx;
复制代码

开启 scoped

没有加 scoped 属性,默认会编译成全局样式,可能会造成全局污染

<style></style>
<style scoped></style>
复制代码

温馨提醒

使用 scoped 后,父组件的样式将不会渗透到子组件中。不过一个子组件的根节点会同时受其父组件的 scoped CSS 和子组件的 scoped CSS 的影响。这样设计是为了让父组件可以从布局的角度出发,调整其子组件根元素的样式。

深度选择器

有时我们可能想明确地制定一个针对子组件的规则。

如果你希望 scoped 样式中的一个选择器能够作用得“更深”,例如影响子组件,你可以使用 >>> 操作符。有些像 Sass 之类的预处理器无法正确解析 >>>。这种情况下你可以使用 /deep/::v-deep 操作符取而代之——两者都是 >>> 的别名,同样可以正常工作。


如若转载,请注明出处:开源字节   https://sourcebyte.cn/article/116.html

用户头像

源字节1号

关注

一个着迷于技术又喜欢不断折腾的技术活跃者 2022.03.09 加入

一个着迷于技术又喜欢不断折腾的技术活跃者。喜欢并热爱编程,执着于努力之后所带来的美好生活!

评论

发布
暂无评论
多平台快速开发的UI框架_源字节1号_InfoQ写作社区