uni-app全局样式和局部样式

前言
好,经过上个章节的介绍完毕之后,了解了一下 UniApp 的一个全局 页面配置文件,也就是我们的一个 pages.json 文件。
那么了解完了这个文件之后,这片文章,再了解一下 UniApp 的一个全局样式和我们的局部样式。
搭建演示环境
创建一个全新的项目:

然后在配置一下,微信小程序的 AppId,直接去之前的项目中拷贝一下即可,找到之前项目的 manifest.json 文件,然后选择微信小程序配置,复制一下即可:

我这里使用两个页面来进行展示,分别是首页与账号页面,账号页面是没有的所以需要我们自行创建,创建方式前面讲过了,所以我这里就不会在重新介绍,我直接将两个页面的代码都贴在下方,大家自行拿去,然后我分别将两个也没的样式都给去掉了,就为了本次文章要介绍的内容而准备的。
index.vue
<template>
<view>
<text>{{title}}</text>
</view>
</template>
<script>
export default {
data() {
return {
title: '首页页面'
}
}
}
</script>
<style>
</style>
account.vue
<template>
<view>
<text>{{ title }}</text>
</view>
</template>
<script>
export default {
data() {
return {
title: '账号页面'
}
}
}
</script>
<style>
</style>
嗯,好,页面创建好了,接下来还要做一件事情就是处理一下 pages.json 配置一下 tabBar 这个 tabBar 的配置直接拷贝之前的内容即可,内容如下,很简单就是配置了首页和账号的 tabBar 与首页与账号的页面路由配置:
{
"pages": [
{
"path": "pages/index/index",
"style": {
"navigationBarTitleText": "首页"
}
},
{
"path" : "pages/account/account",
"style" :
{
"navigationBarTitleText" : "账号"
}
}
],
"globalStyle": {
"navigationBarTextStyle": "black",
"navigationBarTitleText": "uni-app",
"navigationBarBackgroundColor": "#F8F8F8",
"backgroundColor": "#F8F8F8"
},
"tabBar": {
"color": "#7A7E83",
"selectedColor": "#3cc51f",
"borderStyle": "black",
"backgroundColor": "#ffffff",
"list": [{
"pagePath": "pages/index/index",
"text": "首页"
}, {
"pagePath": "pages/account/account",
"text": "账号"
}]
}
}
步入正题
好了,经过前面的几步之后,我们的环境已经没有问题了,我自行运行测试过了,没问题之后就可以来看全局样式与局部样式了。
全局样式
首先我们抛出第一个问题,就是我们全局样式写到什么地方?其实是写到 App.vue 当中:

局部样式
再来看看局部样式,那么局部的样式写到哪呢,我相信大家或许已经猜到了,没错就是写到每个页面自己当中即可,因为每个页面当中是不是都有一个 style,这个标签当中编写的样式就是我们的一个叫做局部样式。
注意点
- 还有一些注意点我们需要了解一下,过去大家学习 Vue 的时候,是不是都知道 style 标签是可以指定 CSS 样式所使用的语言,例如有 Scss,Less,还是说用 stylus,一般情况下我们用 Scss。
- 过去大家学习 Vue 的时候, 在 style 标签位置是不是还可以用 scoped 来指定当中编写的样式是全局样式还是局部样式
注意点:
- (全局样式)全局样式的 style 上不能写 scoped, 如果你写了那么很遗憾是无效的
- (局部样式)局部样式的 style 上不用写 scoped,也是局部的
验证
说了,这么多知道在哪编写全局样式与局部样式之后,我们来写一下吧,实战动手一下,这样更加的可以体会到。
首先来看我们的全局样式,例如我有 title 这么一个 class 类名,然后我分别给首页与账号页面进行使用,我只在 App.vue 的 style 中编写了这个 title 类名的样式,那么两个组件所使用的就是 App.vue 中的,因为两个组件各自都没有编写自己的样式所以会使用全局的样式进行渲染。

打开浏览器进行查看,即可验证我这么一个说法是正确的。
看完了全局样式,接下来就是局部样式了,很简单,我们直接在首页的 style 中编写一下 title 的样式即可:

打开浏览器,查看,首页的文字是蓝色的 blue:

而我们的账号页面文字是红色的:

通过自行浏览器查看,就可以明确的看到首页使用的是自己局部的样式,而账号页面使用的是全局的样式。
好,通过如上的示例介绍,了解完了在哪编写我们的一个全局样式,在哪编写我们这个局部样式,以及全局样式和局部样式的一个注意点,接下来还有一个文件,是我本次文章要介绍的内容,就是 uni.scss 这个文件。
uni.scss
这个文件有什么作用呢?这个文件是专门用于保存全局的样式 变量 的。
打开文件里面有一段介绍:
/**
* 如果你是App开发者(插件使用者),你可以通过修改这些变量来定制自己的插件主题,实现自定义主题功能
*
* 如果你的项目同样使用了scss预处理,你也可以直接在你的 scss 代码中使用如下变量,同时无需 import 这个文件
*/
通过 同时无需 import 这个文件 这句话得出这是一个定义了全局的 scss 样式变量文件。
在这个文件中,我们常做的事情就 3件事:
- 定义全局的 scss 样式变量
- 通过修改系统内置的 scss 样式变量来定制组件的样式
- 通过修改系统内置的 scss 样式变量来定制扩展组件的样式
我相信第一点大家都不会有什么疑问,主要针对第二点与第三点,我来给大家举几个例子。
先来看 第二点,过去我们在开发系统当中是不是有 button 这么一个组件,那么在 UniApp 当中他也提供了 button,但是他提供的 button 是自带一套 UI 样式的,例如按钮的文字边距,按钮的样式,按钮的点击颜色等等,这个时候你要是想更改这些属性,例如按钮的颜色,你只需要更改这个系统内置的 scss 变量的颜色值即可达到更改。
第三点,过去大家学习 Vue,Vue 中有内置组件,或者 Element 也有内置组件,Element 是基于 Vue 来定制了一套自己的内置组件,那么在 UniApp 当中也是一样的,UniApp 当中有自己的内置组件(这里说的是我们的第二点)。
那么除了有自己的一些内置组件,他还有一套自己的扩展组件, 他这套扩展就相当于 Element。
这个时候可以来打开 UniApp 的官网:组件使用的入门教程 | uni-app官网 (dcloud.net.cn)

这个 uni-ui 相当于就是饿了么框架,就是在原有的组件上面又扩展了一套组件,这些组件的样式呢,都可以在 uni.scss 中修改和内置组件是一样的,只不过是同一个人开发的,而 Vue 的内置组件,和饿了么是不同人开发的。
而 UniApp 里面它的内置组件和它扩展组件是同一个团队开发的,就这么简单。
首先我们来看第一件事,后面的两件事之后再说。
第一件事
- 定义全局的 scss 样式变量
如果你不知道可以在 uni.scss 中定义全局 scss 变量,你的做法,可能是在 static 中定义全局变量 scss 文件, 然后在 app.vue 中导入。
注意:如果你导入的是 scss 文件,那么 style 上必须指定 lang 为 scss 才可以。

.css 文件我这里略过了,和 .scss 文件一样,如上的这个示例是你在不知道可以在 uni.scss 中定义的情况下,那么知道了之后,你就可以不用这么写了,改造一下之前的代码,使用定义在 uni.scss 替代,删除在 app.vue 导入 base.scss 的代码,将颜色变量转移到 uni.scss 中然后查看效果即可。
注意:如果你更改了 UniApp 最外层的文件是需要重新重启项目的

不然你会发现,控制台报错了:

重启项目就可以看到我们在 app.vue 中并且没有导入 scss 颜色变量就可以使用了。
到此为止。在哪编写全局样式在哪编写局部样式,是否支持导入样式,以及全局的一些样式变量放到什么地方就给大家介绍完毕了 End。
最后
大家好我是 BNTang, 一个热爱分享的技术的开发者,如果大家觉得我的文章对你有帮助的话,可以关注我的公众号 JavaBoyL,我会在公众号中分享一些IT技术和一些个人的见解,谢谢大家的支持。

uni-app全局样式和局部样式的更多相关文章
- P27_wxss - 全局样式和局部样式
全局样式 定义在 app.wxss 中的样式为全局样式,作用于每一个页面. 局部样式 在页面的 .wxss 文件中定义的样式为局部样式,只作用于当前页面. 注意: 当局部样式和全局样式冲突时,根据就近 ...
- uni app 零基础小白到项目实战-1
uni-app是一个使用vue.js开发跨平台应用的前端框架. 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多个平台,保证其正确并达到优秀体验. Uni ...
- React编写组件的局部样式
我们都知道,在Vue的单文件组件中,style标签中编写的样式默认为全局样式,如果我们想编写局部样式, 使用一个scoped关键字就可以. 那么在React中怎么实现呢? (注: 这种方法必须使用类选 ...
- WPF 样式(定义样式、引用样式、样式作用域、Trigger触发器)
1.定义 资源字典 <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...
- Vue基础学习 --- 全局组件与局部组件
组件分为 全局组件 局部组件 全局组件 // 语法---Vue.component('组件名', {组件参数}) Vue.component('com1', { template: '<butt ...
- vue.js中的全局组件和局部组件
组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能. 组件的使用有三 ...
- vue.js 组件-全局组件和局部组件
这两天学习了Vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记. 首先Vue组件的使用有3个步骤,创建组件构造器,注册组件,使用组件3个方面. 代码演示如下: <! ...
- 详解vue全局组件与局部组件使用方法
这篇文章主要为大家详细介绍了vue全局组件与局部组件的使用方法,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. vue全局/局部注册,以及一些混淆的组件main.js ...
- TZ_16_Vue定义全局组件和局部组件
1.定义全局组件 我们通过Vue的component方法来定义一个全局组件. <div id="app"> <!--使用定义好的全局组件--> <co ...
- uni app中使用自定义图标库
项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...
随机推荐
- 基于 ASP.NET 的投票系统
OnlineVoting 基于 ASP.NET 的投票系统 功能页面 登录 注册 首页 投票广场 查看别人发布的投票. 个人中心 个人资料 换头像.修改密码和其他信息. 发布投票 项目地址:https ...
- 利用AI点亮副业变现:5个变现实操案例的启示
整体思维导图: 在这里先分享五个实操案例: 宝宝起名服务 AI科技热点号 头像壁纸号 小说推广号 流量营销号 你们好,我是小梦. 最初我计划撰写一篇关于AI盈利策略的文章,对AI目前的技术走向.应用场 ...
- Android13深入了解 Android 小窗口模式和窗口类型
Android13深入了解 Android 小窗口模式和窗口类型 小窗模式,作为一种在移动设备上的多任务处理方式,为用户带来了便捷和高效的体验,尤其在一些特定场景下,其价值愈发凸显.以下是为什么需要小 ...
- PyCharm的基础了解
简单了解PyCharm PyCharm的简单使用 修改主题 1 2 切换解释器 1 如何创建pythin文件 1 2 3 4 注释语法 行注释 这里是注释 块注释 '''这里是注释''' 常量和变量的 ...
- 简述Spring Cache缓存策略
一.简介 Spring框架提供了一种名为Spring Cache的缓存策略.Spring Cache是一种抽象层,它提供了一种方便的方式来管理缓存,并与Spring应用程序中的各种缓存实现(如EhCa ...
- Solution -「CF 959E」Mahmoud and Ehab and the xor-MST
Description Link. 一完全图有 \(n\) 个节点 \(0,...,n-1\),其中边 \((i,j)\) 的权值为 \(i\oplus j\),其中 \(\oplus\) 为位异或操 ...
- 记一次 .NET某新能源MES系统 非托管泄露
一:背景 1. 讲故事 前些天有位朋友找到我,说他们的程序有内存泄露,跟着我的错题集也没找出是什么原因,刚好手头上有一个 7G+ 的 dump,让我帮忙看下是怎么回事,既然找到我了那就给他看看吧,不过 ...
- 记一次 .NET 某拍摄监控软件 卡死分析
一:背景 1. 讲故事 今天本来想写一篇 非托管泄露 的生产事故分析,但想着昨天就上了一篇非托管文章,连着写也没什么意思,换个口味吧,刚好前些天有位朋友也找到我,说他们的拍摄监控软件卡死了,让我帮忙分 ...
- Linux系列教程——Linux磁盘管理、Linux进程管理、Linux系统服务、 Linux计划任务
@ 目录 1 Linux磁盘管理 1.磁盘的基本概念 1.什么是磁盘 2.磁盘的基本结构 3.磁盘的预备知识 1.磁盘的接口类型 2.磁盘的基本术语 3.磁盘在系统上的命名方式 4.磁盘基本分区Fdi ...
- Linux系列教程——Linux文件编辑、Linux用户管理
@ 目录 1 Linux基本权限 1.权限基本概述 1.什么是权限? 2.为什么要有权限? 3.权限与用户之间的关系? 4.权限中的rwx分别代表什么含义? 2.权限设置示例 1.为什么要设定权限,我 ...