vue使用--saas的引入与使用
什么是saas、scss?
saas是一种动态样式语言,属于CSS预处理器,为CSS增加了一些编程特性,比如变量、嵌套、函数、继承、运算等等。开发人员可以像使用js等语言一样使用saas进行css的编程开发。
scss是saas改进版本saas 3的简称,它对原saas的语法兼容,区别于使用 {} 代替了原来的缩进;
1.安装与引入配置
初始化vue-cli项目,这里就不详述了,需要的可以查看之前写的一篇随笔,穿梭>>>
依赖安装,执行以下安装命令:
npm install node-sass --save-dev
npm install sass-loader --save-dev
配置webpack.base.conf.js --- 在module节点rules数组中添加以下代码
{
//配置编译识别sass!
test: /\.scss$/,
loaders: ["style", "css", "sass"]
}
2.使用示例
①变量定义 ($)
<style lang="scss" scoped>
$fontcolor: #88f1e8; // 定义变量fontcolor, 格式'$变量名: value' .myscss {
color: $fontcolor; // 使用变量
}
</style>
✦定义格式: ‘$变量名: value’,注意value不需要引号一起来
✦使用:'$变量名'
✦注意:使用scss,style标签的要设置 lang="scss"
②混合器使用(@mixin)
<style lang="scss" scoped>
// 定义mixin混合器
@mixin demoDiv ($height, $width, $bgColor: #eee) {
width: $width;
height: $height;
background-color: $bgColor;
} .myscss {
// 使用
@include demoDiv(300px, 300px)
/*
编译后
width: 300px;
height: 300px;
background-color: #eee;
*/
}
</style>
✦定义格式: ‘@mixin 名称 (变量1,变量2...) { // 样式 }’, 也可以不带变量,变量可以设置默认值(带默认值的引用时可以不传)
✦使用:'@include 名称 (value1, value2...)'
✦优点:将相似的样式提取出来,允许传入参数的自定义设置,代码简洁、使用方便
③继承(@extend)
<style lang="scss" scoped>
.myscss {
.demo1 {
width: 100px;
font-size: 14px;
}
.demo2 {
@extend .demo1; // 使用@extend 继承
color: aqua;
}
/*
编译后
.myscss .demo1, .myscss .demo2 {
width: 100px;
font-size: 14px;
}
.myscss .demo2 {
color: aqua;
}
*/
}
</style>
✦使用@extend 来实现继承操作
✦继承就是将一个样式的数据引入到一个样式中,个人觉得有点类似引用无参的混合器,混合器中存放一段相同的代码
④属性嵌套
<style lang="scss" scoped>
.myscss {
.demo1 {
width: 100px;
font-size: 14px;
}
/*
编译后
.myscss .demo1 {
width: 100px;
font-size: 14px;
}
*/
}
</style>
✦属性嵌套让层级的样式看起来更加直观优美
⑤占位符(%)
<style lang="scss" scoped>
%comdiv {
width: 300px;
height: 300px;
color: $titleColor;
}
.myscss {
.demo1 {
@extend %comdiv;
}
/*
编译后
.myscss .demo1 {
width: 300px;
height: 300px;
color: $titleColor;
}
*/
}
</style>
✦占位符使用 % 声明
✦占位符与普通样式的区别在于,不被@extend调用就不会被编译
⑥变量嵌套引用(#{})
<style lang="scss" scoped>
$divborder: left;
.myscss {
.demo1 {
border-#{$divborder}: 1px solid #eee;
}
/*
编译后
.myscss .demo1 {
border-left: 1px solid #eee;
}
*/
}
</style>
⑦编程式方法
//1. @if...@else...
.demo {
@if $ival > 3 {
// do something
} @else {
// do something
}
} //2. for循环
//@for $i from <start> through <end> 包含end
//@for $i from <start> to <end> 不包含end
@for $i from 1 to 3 {
.demo_#{$i} {
color: red;
}
} //3.while 循环
// @while <表达式>
$wval: 3
@while $wval > 1 {
//do something
$wval: $wval - 1;
} //4.each循环
//@each $var in <list>($var为变量值,list为sassscript表达式)
@each $var in demo1, demo2 {
.#{$var} {
color:red;
}
} //5.function函数(自定义函数)
//@function
@function getcolor($sn){
@if $sn = 1 {
return red;
} @else {
return blue;
}
}
其它功能的使用,后期再补充✨
3.抽离共用
对于变量、混合器、公共样式等,我们如果像上面的示例一样都写在组件当中,问题就不仅是代码的冗余,还失去了使用的意义,所以我们需要将变量、混合器等抽离出来,放到公共的scss文件中。
①文件目录
我们创建三个scss文件,变量文件(var.scss)、混合器文件(mixin.scss)、公共样式文件(common.scss)

②引用
在app.vue中引入公共样式(变量和混合器不在此引入,具体一会说明)
<style>
@import "static/css/common.scss"; /*引入公共样式,在组件中直接使用样式即可*/
#app {
font-family: 'Avenir', Helvetica, Arial, sans-serif;
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
text-align: center;
color: #2c3e50;
margin-top: 60px;
}
</style>
在utils.js(build>utils.js)中引入变量和混合器文件,在utils.js中添加以下:
exports.cssLoaders = function (options) {
// 其它默认代码
function generateSassResourceLoader () {
var loaders = [
cssLoader,
'sass-loader',
{
loader: 'sass-resources-loader',
options: {
resources: [
path.resolve(__dirname, '../src/assets/var.scss'),
path.resolve(__dirname, '../src/assets/mixins.scss')
]
}
}
]
if (options.extract) {
return ExtractTextPlugin.extract({
use: loaders,
fallback: 'vue-style-loader'
})
} else {
return ['vue-style-loader'].concat(loaders)
}
}
return {
css: generateLoaders(),
postcss: generateLoaders(),
less: generateLoaders('less'),
sass: generateSassResourceLoader(), //更改为generateSassResourceLoader
scss: generateSassResourceLoader(), //更改为generateSassResourceLoader
stylus: generateLoaders('stylus'),
styl: generateLoaders('stylus')
}
}
之所以不在vue文件中引用变量和混合器文件,是由于变量作用域的问题,需要在用到的vue组件中进行引用,这样会造成到生成代码的冗余。
而不把common.scss放到utils中,是因为utils中的引入与手动import无差异,会造成生成代码的冗余
so,common.js在app.vue中引入,变量等在utils中引入
参考文章与资料:
https://www.jianshu.com/p/bb1cedade712
https://www.cnblogs.com/roashley/p/7731865.html
https://www.cnblogs.com/chenguangliang/p/9540518.html
https://www.jianshu.com/p/5c3d457fbec9
https://blog.csdn.net/zhouzuoluo/article/details/81010331
vue使用--saas的引入与使用的更多相关文章
- vue脚手架使用swiper /引入js文件/引入css文件
1.安装vue-cli 参考地址:https://github.com/vuejs/vue-cli 如果不使用严格语法需要在后三项打no:(加了挺头疼的,老是报错,但是对自己的代码规范性也是有很大的帮 ...
- vue中的js引入图片,必须require进来
需求:如何components里面的index.vue怎样能把assets里面的图片拿出来. 1.在img标签里面直接写上路径: <img src="../assets/a1.png& ...
- vue引入swiper vue使用swiper vue脚手架使用swiper /引入js文件/引入css文件
vue引入swiper vue使用swiper vue脚手架使用swiper /引入js文件/引入css文件 ------------------------------------------- ...
- vue怎么将一个组件引入另一个组件?
项目是由的vue-cli搭建 1.这里有两个组件,需求是把newComponents.vue里面的东西引入到helloWorld里面 2.index.js里面的配置 3.newComponents里面 ...
- vue中的js引入图片,使用require相关问题
vue中的js引入图片,必须require进来 或者引用网络地址 <template> <div class="home"> <img alt=&qu ...
- vue学习笔记:在vue项目里面使用引入公共方法
首先新建一个文件夹:commonFunction ,然后在里面建立 一个文件common.js 建立好之后,在main.js里面引入这个公共方法 最后是调用这个公共方法 测试一下,我在公共方法里面写了 ...
- Vue ElementUI 按需引入
一.element UI组件的单独使用(第一种方法): 1.cnpm install babel-plugin-component -D 2.找到.babelrc 配置文件 ...
- vue+elementui按需引入
转载自以下网址,仅作备忘之用:https://www.cnblogs.com/lwj820876312/p/9169457.html 基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 ...
- vue框架(三)_vue引入jquery、bootstrap
一.vue安装jquery 1.按照之前博客的内容,新建一个vue工程. 2.在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 3.在build/ ...
随机推荐
- PKUWC/SC 做题笔记
去年不知道干了些啥,什么省选/营题都没做. 现在赶应该还来得及(?) 「PKUWC2018」Minimax Done 2019.12.04 9:38:55 线段树合并船新玩法??? \(O(n^2)\ ...
- windows7 php 环境架设
参考 https://www.jb51.net/article/38048.htm 常见问题解决方案 https://blog.csdn.net/w_yunlong/article/det ...
- python--基础知识点梳理(二)面向对象
面向过程:根据业务逻辑从上到下写代码 面向对象:将数据与函数绑定在一起,进行封装,优点:快速高效 ,减少代码重写 面向对象三大特性:封装.继承.多态 # 封装的意义,隐藏实现细节 将属性和方法放到一起 ...
- Python开发GUI实战:图片转换素描画工具!
奋斗没有终点 好好学习72变,因为将来 没有人能替你阻挡81难 . 生如蝼蚁,当有鸿鹄之志: 命如纸薄,应有不屈之心 . 今天被这句话触动了,所以开篇分享给大家.鸡汤有毒,但有时大家却靠它激励自己 ...
- Containers vs Serverless:本质区别是什么?
在云计算领域,容器和无服务器计算已经占据了发展前列. 作者 | Emra Samdan 翻译 | bocloudresearch 一点历史 在不久以前,应用程序的开发.部署和维护要比现在复杂得多,耗时 ...
- Java电商项目-3.使用VSFTPD_Nginx完成商品新增
目录 到Github获取源码请点击此处 一. 商品类目查询 二. FTP图片服务器的搭建 图片上传思路介绍 Linux中安装vsftpd 接着配置ftp服务, 让外网可以访问 Http服务器搭建 Ng ...
- 使用ZeroClipboard操作剪切板
一.ZeroClipboard下载地址 点击下载 二.添加js引用 <script src="../Assets/js/jquery-1.8.3.min.js">< ...
- Z从壹开始前后端分离【 .NET Core2.2/3.0 +Vue2.0 】框架之五 || Swagger的使用 3.3 JWT权限验证【必看】
本文梯子 本文3.0版本文章 前言 1.如何给接口实现权限验证? 零.生成 Token 令牌 一.JWT ——自定义中间件 0.Swagger中开启JWT服务 1:API接口授权策略 2.自定义认证之 ...
- Python 使用 PyMysql、DBUtils 创建连接池,提升性能
转自:https://blog.csdn.net/weixin_41287692/article/details/83413775 Python 编程中可以使用 PyMysql 进行数据库的连接及诸如 ...
- indexOf()字符位置
package seday01; /** * int indexOf(String str) * 查找给定字符串在当前字符串中的位置,若返回值为-1,则 * 表示当前字符串中不含有给定的内容. * @ ...