SASS教学+SCSS:CSS 再进化,掌握语法攻略,面试心得体会2000字

  1. 重复执行:看有几个档案需监听,就输入几次。

$ sass --watch path/to/filename. scss :path/filename. css

  1. 一次执行:看有几个档案需监听,一次下指令。

$ sass --watch path/filename1. scss :path/filename1. css path/filename2. scss :path/filename2. css path/filename3. scss :path/filename3. css

  1. 指定目录下全部监听:监听sass 目录下的sass/scss 档案到指定的css 目录下(下面指令为两个资料夹在同一层)

$ sass --watch sass:css

  1. 当前目录下全数监听,并直接生成css 档案。

$ sass --watch .

到了这一步,若顺利的话,相信你也学会,如何在编写sass/scss 档案时,指定的css 档案可以同步的进行编译,并让浏览器能够顺利的出现画面。

个人觉的sass 学习比较麻烦的就是安装+执行这个章节,后面就是语法部分,语法就相对简单明了了,原来就有css 开发经验的捧有们,相信也可以很快就入手的

接下来,我们开始前进到语法部分

3. 嵌套


SASS 提供CSS 语法扩展,如:嵌套功能( Nested Rules ),主要是解决CSS 编写过程中,父元素重复编写问题,可以缩短开发流程、方便后续维护、?样式模组化等… 优点

这是容易入门SASS教学的第一步,直接上代码,我们使用SASS 编写样式,并对比编译后的CSS ,如下:

/** 编译前( sass 语法 ) **/

#main {

width: 200px;

height: 100px;

background: #ddb92a;

.greenbox{

width: 100px;

height: 50px;

background: green;

p, a {

font-size: 20px;

}

}

}

/** 编译后( 转为CSS 语法输出) **/

#main {

width: 200px;

height: 100px;

background: #ddb92a;

}

#main .greenbox{

width: 100px;

height: 50px;

background: green;

}

#main .greenbox p, #main .greenbox a{

font-size: 20px;

}

除此之外,常用的属性也可以进行CSS「 嵌套属性」,比如:font-familyfont-sizefont-weight,会发现 font 多次出现。

还有常见的 background 系列,比如:background-colorbackground-positionbackground-sizebackground-image,都可以用嵌套功能,来节省开发时间,这边上代码,如下:

/** 编译前( sass语法) **/

.main {

font: {

family: Helvetica, sans-serif;

size: 15em;

weight: bold;

}

}

/** 编译后( 转为CSS 语法输出) **/

.main {

font-family: Helvetica, sans-serif;

font-size: 15em;

font-weight: bold;

}

到目前,对嵌套功能应该有初步认识了,若之前有看过别人写的SASS / SCSS 档,应该会有种似曾相似的感觉吧

理解了它,接下来我们继续看SASS 还有什么特别的地方,可以让我们学习的…

4. 引用父选择器&


如果想在嵌套状态下,取得外层的父选择器,那可以使用「 & 」,它会直接抓父选择器给你用。

常会把它用在,如CSS 元件状态: :hover:focus:hover:link:visited 等…,或是 :before:after ,这边上个代码,如下:

/** 编译前( sass语法) **/

#main {

display: block;

a {

color: #d0b95b;

&:hover, &:active, &:focus {

color: #a08106;

outline: none;

text-decoration: none !important;

}

}

}

/** 编译后( 转为CSS 语法输出) **/

#main {

display: block;

}

#main a {

color: #d0b95b;

}

#main a:hover, #main a:active, #main a:focus {

color: #a08106;

outline: none;

text-decoration: none !important;

}

还有另一种用法,也常常看到,如下:

/** 编译前( sass语法) **/

#main{

&.color- 2 {

background: red;

&:before {

border: 1px solid #ccc;

}

}

&.color- 3 {

background: yellow;

&:before {

border: 1px solid blue;

}

}

}

/** 编译后( 转为CSS 语法输出) **/

#main.color-2 {

background: red;

}

#main.color-2:before {

border: 1px solid #ccc;

}

#main.color-3 {

background: yellow;

}

#main.color-3:before {

border: 1px solid blue;

}

能抓到父选择器,是不是开发起来也方便多了呢?

一开始看到别人编写的SASS 时,觉得「 & 」的写法满酷的,后来才懂… 原来是这样运作呀

5. 变量


在我们实际编写CSS 的过程中,常会遇到多次相同的颜色、字型、字体大小等… 重复出现。

重复出现是好事,因为只要复制+贴上就好了…但假如遇到哪天设计师/客户,需要修改就…(因为全都需要更改)

所以SASS 可以协助我们解决这问题,就如同JS 变量逻辑一样,只需改最源头的变量即可,其他所有引用该变量的地方,值都会自动更改。

SASS 中使用 $ 进行变量声明,支持7 种主要数据类型:

  • 数字(如:1, 1. 5, 20px
  • 字符串,带引号和不带引号(如:"foo", 'foo', foo
  • 颜色(如:red, #28b0b4, rgba ( 0 , 0 , 0 , 0.5 )
  • 布尔值(如: true, false
  • 空值(如: null
  • 值列表(list),用空格或逗号分开(如:2em 1em 0 1emHelvetica, Arial
  • maps:从一个值映射到另一个(如:( key1: value1, key2: value2 )

这边来对比一下,使用SASS 开发的编译前( SASS 语法) & 编译后( 转为CSS 语法输出)的程式码,如下:

/** 编译前( sass 语法) **/

$bnr-font: Helvetica, sans-serif;

$bnr-color: #494947;

.banner1 p {

font-family: $bnr-font;

color: $bnr-color;

padding: 10px 15px;

letter-spacing: 0.2 em;

}

.banner2 p {

font-family: $bnr-font;

color: $bnr-color;

margin: 15px;

}

/** 编译后( 转为CSS 语法输出) **/

.banner1 p {

font-family: Helvetica, sans-serif;

color: #494947;

padding: 10px 15px;

letter-spacing: 0.2 em;

}

.banner2 p {

font-family: Helvetica, sans-serif;

color: #494947;

margin: 15px;

}

如此一来,当哪天收到需要更改某通用按钮颜色、通用字体字型… ,就可以直接更改变量即可,是不是很方便

6. 引入


SASS 扩展了CSS 的 @import 功能,允许在文件内导入其他的SASS 或SCSS 子文件。

在文件进行编译后,被导入的SASS 或SCSS 子文件,会全部合并到同一个CSS 文件,然后呈现出来。

常见的 .sass.scss 导入

这边展示一下基本用法,我们把 _reset. scss 导入到 main. scss 中,直接上代码:

/** 编译前( sass 语法) **/

/** _reset.scss **/

html, body, ul, ol, a {

margin: 0 ;

padding: 0 ;

}

/** main.scss **/

@import ‘reset’ ;

body {

background: #a08106;

font-size: 16px;

}

/** 编译后( 转为CSS 语法输出) **/

html, body, ul, ol, a {

margin: 0 ;

padding: 0 ;

}

body {

background: #a08106;

font-size: 16px;

}

小提醒:若有多个文件需汇入,可同时使用多个 @import 引用文件,如下图

bootstrap.scss 多个文件引入

监听父文件即可

编写代码过程中,可以把不同样式区块的SASS 或SCSS 代码,拆开成不同独立的文件,然后使用 @import 把各片段文件,统整汇入到同一支 .sass.scss 文件中,并监听这一支文件即可

在文件进行监听时,所有 @import 进来的 .sass.scss 子文件,也同时被监听,所以当子文件有修改,父文件编译出的 .css 也会自动更新。

使用下划线,SASS 编译自动忽略

若有片段文件不需SASS 编译出新的CSS 文件,可在文件开头添加一个下划线,在编译过程中,系统就会忽略它,而只对开头无下划线的文件,进行新的CSS 文件生成。

上述的范例说明

看一下另一个范例,下面是bootstrap 的目录文件:

左图:目录结构 。右图: bootstrap.scss 文件

1.把多个scss 文件,使用 @import添加到 bootstrap.scss 中。

2.之后只需监听--watch bootstrap.scss 这一支文件即可,假如内部@import 的文件有变更,都会在bootstrap.css 自动更新。

3.bootstrap.scss 文件内的 @import 档案,不需要加下划线。

开头有下划线的文件,在执行sass 指令时,不会生成新的css 文件,系统会自动忽略。

4.@import scss 片段文件,不用加上副档名也可以,系统会自动寻找同名的副档名 .scss.sass 文件,并依序导入。

一般CSS @import 功能

@import 默认情况,会预设导入同名的 .sass.scss 文件,但在以下情况下,仅当成一般的CSS @import 语句,不会导入任何的SASS 文件,如下:

  • 如果文件的副档名是 .css@import "foo.css" ;
  • 文件名以 http :// 开始:@import "http://foo.com/bar" ;
  • 文件名是 url ()@import url ( foo ) ;
  • @import 中包含媒体查询(media queries)

7. 混合


若是有重复的代码,会不断使用到,就可用混合指令(Mixin Directives),直接把样式封装成一个类名称,就可以重复调用,如下:

/** 编译前( sass 语法) **/

/** 定义mixin 指令**/

@mixin font-main {

font: {

family: Arial;

size: 16px;

weight: 100 ;

}

color: #000;

}

/** 引用mixin **/

.box p {

@include font-main;

}

/** 编译后( 转为CSS 语法输出) **/

.box p {

font-family: Arial;

font-size: 16px;

font-weight: 100 ;

color: #000;

}

  • 使用 @mixin 定义一个「 混合」
  • 使用 @include 引用一个「 混合」
  • 可同时引用多个「 混合」

使用参数功能

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数前端工程师,想要提升技能,往往是自己摸索成长或者是报班学习,但对于培训机构动则几千的学费,着实压力不小。自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年Web前端开发全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img
img
img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上前端开发知识点,真正体系化!

由于文件比较大,这里只是将部分目录大纲截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且后续会持续更新

如果你觉得这些内容对你有帮助,可以添加V获取:vip1024c (备注前端)
img

Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
img

…(img-i4kDzavy-1712760212319)]

Vue 面试题

1.Vue 双向绑定原理
2.描述下 vue 从初始化页面–修改数据–刷新页面 UI 的过程?
3.你是如何理解 Vue 的响应式系统的?
4.虚拟 DOM 实现原理
5.既然 Vue 通过数据劫持可以精准探测数据变化,为什么还需要虚拟 DOM 进行 diff 检测差异?
6.Vue 中 key 值的作用?
7.Vue 的生命周期
8.Vue 组件间通信有哪些方式?
9.watch、methods 和 computed 的区别?
10.vue 中怎么重置 data?
11.组件中写 name 选项有什么作用?
12.vue-router 有哪些钩子函数?
13.route 和 router 的区别是什么?
14.说一下 Vue 和 React 的认识,做一个简单的对比
15.Vue 的 nextTick 的原理是什么?
16.Vuex 有哪几种属性?
17.vue 首屏加载优化
18.Vue 3.0 有没有过了解?
19.vue-cli 替我们做了哪些工作?
[外链图片转存中…(img-w0dIiN3K-1712760212319)]

一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!
[外链图片转存中…(img-Ixj4zOLf-1712760212319)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值