前言

好,经过上个章节的介绍完毕之后,了解了一下 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件事:

  1. 定义全局的 scss 样式变量
  2. 通过修改系统内置的 scss 样式变量来定制组件的样式
  3. 通过修改系统内置的 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全局样式和局部样式的更多相关文章

  1. P27_wxss - 全局样式和局部样式

    全局样式 定义在 app.wxss 中的样式为全局样式,作用于每一个页面. 局部样式 在页面的 .wxss 文件中定义的样式为局部样式,只作用于当前页面. 注意: 当局部样式和全局样式冲突时,根据就近 ...

  2. uni app 零基础小白到项目实战-1

    uni-app是一个使用vue.js开发跨平台应用的前端框架. 开发者通过编写vue.js代码,uni-app将其编译到Ios,android,微信小程序等多个平台,保证其正确并达到优秀体验. Uni ...

  3. React编写组件的局部样式

    我们都知道,在Vue的单文件组件中,style标签中编写的样式默认为全局样式,如果我们想编写局部样式, 使用一个scoped关键字就可以. 那么在React中怎么实现呢? (注: 这种方法必须使用类选 ...

  4. WPF 样式(定义样式、引用样式、样式作用域、Trigger触发器)

    1.定义 资源字典   <ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presenta ...

  5. Vue基础学习 --- 全局组件与局部组件

    组件分为 全局组件 局部组件 全局组件 // 语法---Vue.component('组件名', {组件参数}) Vue.component('com1', { template: '<butt ...

  6. vue.js中的全局组件和局部组件

    组件(Component)是 Vue.js 最强大的功能之一.组件可以扩展 HTML 元素,封装可重用的代码.在较高层面上,组件是自定义元素, Vue.js 的编译器为它添加特殊功能. 组件的使用有三 ...

  7. vue.js 组件-全局组件和局部组件

    这两天学习了Vue.js 感觉组件这个地方知识点挺多的,而且很重要,所以,今天添加一点小笔记. 首先Vue组件的使用有3个步骤,创建组件构造器,注册组件,使用组件3个方面. 代码演示如下: <! ...

  8. 详解vue全局组件与局部组件使用方法

    这篇文章主要为大家详细介绍了vue全局组件与局部组件的使用方法,具有一定的参考价值,对此有需要的朋友可以参考学习下.如有不足之处,欢迎批评指正. vue全局/局部注册,以及一些混淆的组件main.js ...

  9. TZ_16_Vue定义全局组件和局部组件

    1.定义全局组件 我们通过Vue的component方法来定义一个全局组件. <div id="app"> <!--使用定义好的全局组件--> <co ...

  10. uni app中使用自定义图标库

    项目中难免会用到自定义图标,那在uni app中应该怎么使用呢? 首先, 将图标目录放在static资源目录下: 在main.js中引入就可以全局使用了 import '@/static/icon-o ...

随机推荐

  1. Mysql高级7-存储过程

    一.介绍 存储过程是事先经过编译并存储在数据库中的一段sql语句的集合,调用存储过程可以简化应用开发人员的很多工作,减少数据在数据库和应用服务器之间的传输,对于提高数据处理的效率是有好处的.存储过程思 ...

  2. 关于 Llama 2 的一切资源,我们都帮你整理好了

    Llama 2 是一个由 Meta 开发的大型语言模型,是 LLaMA 1 的继任者.Llama 2 可通过 AWS.Hugging Face 获取,并可以自由用于研究和商业用途.Llama 2 预训 ...

  3. 【pytorch】目标检测:YOLO的基本原理与YOLO系列的网络结构

    利用深度学习进行目标检测的算法可分为两类:two-stage和one-stage.two-stage类的算法,是基于Region Proposal的,它包括R-CNN,Fast R-CNN, Fast ...

  4. 分布式存储系统举例剖析(elasticsearch,kafka,redis-cluster)

    1. 概述 对于分布式系统,人们首先对现实中的分布式系统进行高层抽象,然后做出各种假设,发展了诸如CAP, FLP 等理论,提出了很多一致性模型,Paxos 是其中最璀璨的明珠.我们对分布式系统的时序 ...

  5. Go 语言中排序的 3 种方法

    原文链接: Go 语言中排序的 3 种方法 在写代码过程中,排序是经常会遇到的需求,本文会介绍三种常用的方法. 废话不多说,下面正文开始. 使用标准库 根据场景直接使用标准库中的方法,比如: sort ...

  6. python如何提取浏览器中保存的网站登录用户名密码

    python如何提取Chrome中的保存的网站登录用户名密码? 很多浏览器都贴心地提供了保存用户密码功能,用户一旦开启,就不需要每次都输入用户名.密码,非常方便.作为python脚本,能否拿到用户提前 ...

  7. 搭建企业知识库:基于 Wiki.js 的实践指南

    一.简介 在当今知识经济时代,企业知识库的建设变得越来越重要.它不仅有助于企业知识的沉淀和共享,还能提升员工的工作效率,促进企业的创新发展.企业知识库是企业中形成结构化文档,共享知识的集群,可以促进企 ...

  8. Confluence的Excel插件Elements Spreadsheet安装

    背景 Confluence是现在广泛使用的团队协作文档系统.虽然自身带了一些表格编辑功能,但表格的整体功能较弱,比如不能通过Excel文件进行导入导出,表格在复制到Excel时格式会比较奇怪等等.对于 ...

  9. MySQL 表分区使用实践

    在使用 MySQL 8.0 表分区时,需要注意以下一些关键事项和最佳实践: 支持的存储引擎: MySQL 8.0 表分区仅支持一些特定的存储引擎,如 InnoDB 和 NDB(NDB 是 MySQL ...

  10. Solution -「SCOI 2016」萌萌哒

    Description Link. 给定一个长度为 \(n\) 的数组让你填数,需要满足 \(m\) 个形如 \(([l_{1},r_{1}],[l_{2},r_{2}])\) 的要求,这两个区间填好 ...