什么是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的引入与使用的更多相关文章

  1. vue脚手架使用swiper /引入js文件/引入css文件

    1.安装vue-cli 参考地址:https://github.com/vuejs/vue-cli 如果不使用严格语法需要在后三项打no:(加了挺头疼的,老是报错,但是对自己的代码规范性也是有很大的帮 ...

  2. vue中的js引入图片,必须require进来

    需求:如何components里面的index.vue怎样能把assets里面的图片拿出来. 1.在img标签里面直接写上路径: <img src="../assets/a1.png& ...

  3. vue引入swiper vue使用swiper vue脚手架使用swiper /引入js文件/引入css文件

    vue引入swiper  vue使用swiper  vue脚手架使用swiper /引入js文件/引入css文件 ------------------------------------------- ...

  4. vue怎么将一个组件引入另一个组件?

    项目是由的vue-cli搭建 1.这里有两个组件,需求是把newComponents.vue里面的东西引入到helloWorld里面 2.index.js里面的配置 3.newComponents里面 ...

  5. vue中的js引入图片,使用require相关问题

    vue中的js引入图片,必须require进来 或者引用网络地址 <template> <div class="home"> <img alt=&qu ...

  6. vue学习笔记:在vue项目里面使用引入公共方法

    首先新建一个文件夹:commonFunction ,然后在里面建立 一个文件common.js 建立好之后,在main.js里面引入这个公共方法 最后是调用这个公共方法 测试一下,我在公共方法里面写了 ...

  7. Vue ElementUI 按需引入

    一.element UI组件的单独使用(第一种方法): 1.cnpm install babel-plugin-component -D         2.找到.babelrc 配置文件       ...

  8. vue+elementui按需引入

    转载自以下网址,仅作备忘之用:https://www.cnblogs.com/lwj820876312/p/9169457.html 基于Vue的Ui框架 饿了么公司基于vue开的的vue的Ui组件库 ...

  9. vue框架(三)_vue引入jquery、bootstrap

    一.vue安装jquery 1.按照之前博客的内容,新建一个vue工程. 2.在项目文件夹下,使用命令npm install jquery --save-dev 引入jquery. 3.在build/ ...

随机推荐

  1. MySQL基础之STRAIGHT JOIN用法简介

    MySQL基础之STRAIGHT JOIN用法简介 引用mysql官方手册的说法: STRAIGHT_JOIN is similar to JOIN, except that the left tab ...

  2. MySQL数字类型学习笔记

    数字类型 最近在看<MySQL技术内幕:SQL编程>并做了笔记,所以本博客是一篇笔记类型博客,分享出来方便自己复习,也可以帮助他人 整型 类型 占用空间 最小值(SIGNED) 最大值(S ...

  3. 【CF528E】Triangles 3000(计算几何)

    [CF528E]Triangles 3000(计算几何) 题面 CF 平面上有若干条直线,保证不平行,不会三线共点. 求任选三条直线出来围出的三角形的面积的期望. 题解 如果一定考虑直接计算这个三角形 ...

  4. Web前端——Html常用标签及属性

    html 常用的标题等标签就不记录了,只记录一下比较少见的标签以及属性 表格 table td 单元格 tr 表的行 th 表头 td或th可以下面的两个属性达到跨行或跨列 表格跨行 rowspan ...

  5. 在生成.net core 3.0程序时不包含nuget库

    在.net core 3.0中,默认的生成行为有了两个变化,一个是默认生成可执行文件,另一个是会复制依赖的Nuget项. 前一个变化会默认生成可执行的exe,用起来更加方便了.另一个变化可能是为了减少 ...

  6. windows环境下安装配置MongoDB

    版本选择MongoDB的版本命名规范如:x.y.z: y为奇数时表示当前版本为开发版,如:2.3.0.2.1.1: y为偶数时表示当前版本为稳定版,如:2.0.1.2.2.0: 目前官网上最新的版本为 ...

  7. Java入门——初识Java

    Java入门——初识Java 摘要:本文主要对Java这门编程语言进行简单的介绍. Java简介 说明 Java语言历时十多年,已发展成为人类计算机史上影响深远的编程语言,从某种程度上来看,它甚至超出 ...

  8. Java生鲜电商平台-微服务入门与服务的拆分架构实战

    Java生鲜电商平台-微服务入门与服务的拆分架构实战 刚开始进入软件行业时还是单体应用的时代,前后端分离的概念都还没普及,开发的时候需要花大量的时间在“强大”的JSP上面,那时候SOA已经算是新技术了 ...

  9. ping、网络抖动与丢包

    基本概念: ping: PING指一个数据包从用户的设备发送到测速点,然后再立即从测速点返回用户设备的来回时间.也就是俗称的“网络延迟”   一般以毫秒(ms)计算   一般PING在0~100ms都 ...

  10. SpringCloud之API网关与服务发现——Cloud核心组件实战入门及原理

    微服务发展历史 单体模式——>服务治理(服务拆分)——>微服务(细分服务)——>Segments(服务网格) 微服务 VS SOA 微服务:模块化.独立部署.异构化 SOA:共同的治 ...