最简单的几个语法
变量
$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。
把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 淘宝源,请百度。
在手机端/APP学习本课
中文文档:www.sasscss.com/docs/#css-extensions
选择器扩展
BEM 命名法
全称是Block Element Modifier,css的命名法
.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在浏览器中会重复
因此我们改成下面这种写法
嵌套属性
上面的写法也特别适合background这种有很多缩写的属性。
变量
变量是有作用域的。
比如下面的代码,加入我想在其他地方使用$red
可以把变量放到作用域里。
引入变量是为了后期方便修改。
可以使用 !global 强行变为全局变量(不推荐使用)
如果你定义了一个名为 $main-width,您可以使用 $main_width访问它。
运算 数字的加减乘除模5中运算, css被scss鸡了,所以也支持,比如calc(200px / 2),不打空格可能会报错。
scss的除法
原生的/代表分割两个不同的数值
取模(用来处理奇偶性)
颜色相关运算
scss有十几个内置的颜色函数,用到的时候再去搜。
字符串插值
代码
codepen
加了下面这段代码,整个窗口就不会再滚动了。
keyframes中,各个阶段设置百分比很麻烦,可以使用@for来简化代码,具体可以看原文。
上面这段代码会生成下面这段代码

如果出现动画没有效果,很有可能是{}match有问题。
css和scss最好的practice rule就是CRM(Copy Run Modify)
这节课我们依然沿用「就是干」的思路来学习如何用 SCSS 做到响应式(实际上跟 CSS 的思路一样,我在 CSS 深入浅出里讲过)
如何适配所有手机(不包括PC)
如果 vw 的兼容性你不能接受,可以使用「动态 REM 方案」来模拟。
SCSS适应所有手机
如何写一套css,适应所有的手机?比如下面淘宝的圆形logo,如何自适应所有的页面,logo长宽可以自适应?
答:所有宽度用 vw 计算,这样就能动态缩放。
codesandbox
Screen Shot 2022-06-17 at 3.55.32 PM 如果这个时候,设计师的手机图是按照iphone 6的尺寸设计的,那么可以通过设计稿上的宽或者高/iphone 6手机的宽度,比如圆形logo的宽和高是48px,iphone 6的宽度是375px,用48/375 得到0.128,那么width和height可以设置成12.8vw。
如果每个数值都这样写的话会很麻烦,因此需要用到scss的一个很强大的功能,@function, 这样就可以保证比例一致。
vw的唯一缺点就是不是所有的浏览器版本都兼容。但是大部分都支持,支持比例在96%以上。
Screen Shot 2022-06-21 at 12.06.38 AM SCSS 里的媒体查询更厉害哦。
如何让网页在不刷新的情况下,用一个页面即适应手机又适应PC,
Screen Shot 2022-06-24 at 1.04.47 AM 👆这张图中,只有当鼠标放在字上面才可以点击,因为a标签的border只包住了字,如果希望整个区域都能点击到,所以应该把padding放到a标签里面就可以了。
但是,由于a标签是內联元素,所以添加上下padding是没有用的,需要把a标签变成inline-block,这样就可以了。
Screen Shot 2022-06-24 at 1.07.39 AM 背景渐变可以网上搜css gradient generator, 找w3c标准的css代码即可。
flex-shrink:用来防止压缩
比如下面这个,如果不加的话,字就会被压缩到下一行,加了之后就不会压缩。
Screen Shot 2022-06-24 at 1.25.45 AM @content就是你要写的内容
codesandbox
webpack4、@mixin、% 和 @function
在手机端/APP学习本课
我跳过了webpack4,直接从@mixin开始