SCSS全解
SCSS教程
SCSS 是什么
SCSS 的历史
安装与运行
零配置学习 - 使用 parcel
零配置学习 - 使用 jsbin.com
最简单的几个语法
嵌套选择器
变量
$grey:#666; $gray:$grey; $border-width:2px; .nav{ border:$border-width solid $grey; >ul{ background:white; >li{ border:$border-width solid red; } } }mixin
什么是mixin,就是在css中使用类似于函数的代码.
@mixin和@include同时使用。
$grey:#666; $gray:$grey; $border-width:2px; @mixin debug{ border:1px solid red; } .nav{ @include debug; border:$border-width solid $grey; >ul{ background:white; >li{ border:$border-width solid red; } } }mixin这里可以设置参数
$grey:#666; $gray:$grey; $border-width:2px; @mixin debug($border-color){ //@mixin debug($border-color:red) 如果什么颜色都没传,那么默认就是红色 border:1px solid $border-color; } .nav{ @include debug(red); border:$border-width solid $grey; >ul{ background:white; >li{ border:$border-width solid red; } } }mixin的问题就是:最终代码还是通过复制粘贴,并没有实际节省代码。因此我们需要placeholder。
placeholder
把mixin改成%
省代码的原理就是不copy样式,而是将选择器提到样式前面。
维基百科
https://zh.wikipedia.org/wiki/Sass
Sass(英文全称:Syntactically Awesome Stylesheets)
是一个最初由Hampton Catlin设计并由Natalie Weizenbaum开发的类 CSS 语言。
发行时间:2007年 稳定版本:2016年3月28日
Sass 十分简洁,语法中几乎不含括号。
后来前端工程师表示不含括号看不懂,于是 Sass 的开发者又提供了 Scss,含括号,就基本和CSS一样了。但是SCSS添加了一些功能,比如变量、嵌套、混入(Mixin)、选择器继承等。
弱弱的前端工程师终于表示能看懂了。
Sass的官方解释器是开源的并且用Ruby语言写成,但是也有用PHP、C语言、Java等实现的版本(C语言版本叫做llibSass,Java语言版本叫做JSass)。
课堂上用到的代码
如果发现 node-sass 安装出错,请百度。 如果需要设置 npm 淘宝源,请百度。
SCSS 基础语法
在手机端/APP学习本课
中文文档:www.sasscss.com/docs/#css-extensions
选择器扩展
BEM 命名法
全称是Block Element Modifier,css的命名法
取一个主要的名字,比如
user-card所有的命名围绕
.user-card.user-card__picture,user-card__name,.user-card__description,或者当鼠标悬浮在卡片上时,或者是点击卡片,可以写成.user-card--active,.user-card--deactive,.user-card__picture--active,曾经在中国很流行。但是写起来很繁琐。方方老师推荐的方法
比如
.user-card__picture--active,可以写成.userCard-picture.active两个class
嵌套选择器
& 符号
假设我们现在有如下结构
scss嵌套可以写成下面这样,我们发现
.userCard-name在浏览器中会重复因此我们改成下面这种写法
&.active 和.active的区别
嵌套属性
上面的写法也特别适合background这种有很多缩写的属性。
注释
变量
变量是有作用域的。
比如下面的代码,加入我想在其他地方使用$red
可以把变量放到作用域里。
引入变量是为了后期方便修改。
可以使用 !global 强行变为全局变量(不推荐使用)
如果你定义了一个名为 $main-width,您可以使用 $main_width访问它。
运算 数字的加减乘除模5中运算, css被scss鸡了,所以也支持,比如
calc(200px / 2),不打空格可能会报错。scss的除法
原生的/代表分割两个不同的数值
取模(用来处理奇偶性)
颜色相关运算
scss有十几个内置的颜色函数,用到的时候再去搜。
字符串插值
代码
制作会动的按钮
加了下面这段代码,整个窗口就不会再滚动了。
keyframes中,各个阶段设置百分比很麻烦,可以使用@for来简化代码,具体可以看原文。
上面这段代码会生成下面这段代码

如果出现动画没有效果,很有可能是{}match有问题。
css和scss最好的practice rule就是CRM(Copy Run Modify)
SCSS响应式(上)
这节课我们依然沿用「就是干」的思路来学习如何用 SCSS 做到响应式(实际上跟 CSS 的思路一样,我在 CSS 深入浅出里讲过)
如何适配所有手机(不包括PC)
所有宽度用 vw 计算,这样就能动态缩放。
使用函数将 px -> vw 的计算过程简化:
如果 vw 的兼容性你不能接受,可以使用「动态 REM 方案」来模拟。
SCSS适应所有手机
如何写一套css,适应所有的手机?比如下面淘宝的圆形logo,如何自适应所有的页面,logo长宽可以自适应?
答:所有宽度用 vw 计算,这样就能动态缩放。

如果这个时候,设计师的手机图是按照iphone 6的尺寸设计的,那么可以通过设计稿上的宽或者高/iphone 6手机的宽度,比如圆形logo的宽和高是48px,iphone 6的宽度是375px,用48/375 得到0.128,那么width和height可以设置成12.8vw。
如果每个数值都这样写的话会很麻烦,因此需要用到scss的一个很强大的功能,@function, 这样就可以保证比例一致。
vw的唯一缺点就是不是所有的浏览器版本都兼容。但是大部分都支持,支持比例在96%以上。


SCSS 响应式(下)
SCSS 里的媒体查询更厉害哦。
如何让网页在不刷新的情况下,用一个页面即适应手机又适应PC,

👆这张图中,只有当鼠标放在字上面才可以点击,因为a标签的border只包住了字,如果希望整个区域都能点击到,所以应该把padding放到a标签里面就可以了。
但是,由于a标签是內联元素,所以添加上下padding是没有用的,需要把a标签变成inline-block,这样就可以了。

背景渐变可以网上搜css gradient generator, 找w3c标准的css代码即可。
flex-shrink:用来防止压缩
比如下面这个,如果不加的话,字就会被压缩到下一行,加了之后就不会压缩。


@content就是你要写的内容
webpack4、@mixin、% 和 @function
在手机端/APP学习本课
用法
联系
区别
我跳过了webpack4,直接从@mixin开始
mixin
最后更新于
这有帮助吗?