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 ...
随机推荐
- Combobox后台绑定
本文主要介绍WPF中Combobox的后台绑定,我在这里主要讲解数据驱动 1.对于前台绑定,我们首先写出想要绑定的对象 新建一个Models文件夹,将Student类写入 public class S ...
- 关于三维模型OSGB格式轻量化在数据存储的重要性浅析
关于三维模型OSGB格式轻量化在数据存储的重要性浅析 三维模型的OSGB格式是一种常见的数据格式,用于存储和传输地理信息系统(GIS)中的三维地图数据.随着技术的不断发展,三维模型的应用越来越广泛,包 ...
- GitHub Actions CI/CD 工作流实战
1. 什么是 GitHub Actions 与 workflow ? GitHub Actions 是 GitHub 提供的一种持续集成(CI)和持续部署(CD)的工具,用于自动化软件开发过程中的各种 ...
- 使用 SQL 的方式查询消息队列数据以及踩坑指南
背景 为了让业务团队可以更好的跟踪自己消息的生产和消费状态,需要一个类似于表格视图的消息列表,用户可以直观的看到发送的消息:同时点击详情后也能查到消息的整个轨迹. 消息列表 点击详情后查看轨迹 原理介 ...
- CodeForces-1324D-Pair-of-Topics
题意 对于两个长度为\(n\)的数组\(a[]\)和\(b[]\),找到有多少对\(i\)和\(j\)\((i<j)\),满足\(a_i+a_j>b_i+b_j\) 分析 首先发现如果\( ...
- Excel单元格快速交换相邻位置内容
一.相邻两列内容交换(A1与B1交换)1.首先选择A1单元格的边框位置,出现了向上下左右的十字标志 2.此时按住shift键,并且拖向B1单元格的右边,出现"工"汉字标志 3.松开 ...
- 全景VR KRPano项目打包成安卓APP快速简易教程
有时候,我们可能不想把我们制作的全景VR项目发布到网站上,而是想把它作为一个手机应用来使用或者分享.这样,我们就可以更好地保护我们的作品,也可以更方便地展示给客户或者朋友.本文将介绍一种简单的方法,让 ...
- Dami 基于事件总线的本地过程调用框架(首次发版)
Dami,专为本地多模块之间通讯解耦而设计(尤其是未知模块.隔离模块.领域模块).零依赖,特适合 DDD. 特点 结合 Bus 与 RPC 的概念,可作事件分发,可作接口调用,可作异步响应. 支持事务 ...
- Python基础——CPU详解
一 五大组成单元=>三大核心组件 组成计算机五大单元可以合并成三大核心组件:CPU.IO设备.主存储器 1.控制单元+算数逻辑单元=>CPU 2.主存储器,即主記憶體 3.输入单元Inpu ...
- 文心一言 VS 讯飞星火 VS chatgpt (109)-- 算法导论10.1 7题
七.用go语言,说明如何用两个队列实现一个栈,并分析相关栈操作的运行时间. 文心一言: 在Go语言中,我们可以用两个队列(queue1和queue2)实现一个栈.以下是实现代码: package ma ...