个人心得:无论学习任何新的知识,或者接受新事物,从以下几个方面入手,个人感觉会更加轻松快捷哦
1.产生背景 2.是什么 3.怎么做 4.可以干什么 即Who what that
那么,根据上面的这4点,跟大家一起分享一下sass吧
1.sass的产生背景
前端的三大组成神器(html、javascript、css)
首先HTML5火遍了大江南北
其次javascript由于Node.js而成为目前前后端统一开发语言的不二之选
反观只有css似乎成为前端开发中被忽视的角色了。一直以静态语言存在,其存在着很多显而易见的不足,例如:
1.复杂且没有逻辑性的嵌套关系;(逻辑性弱)
2.不同元素设置相同样式时,一遍又一遍写着重复的代码;(复用性差)
3.近乎于单独设置的元素样式,不利于后期差异化太大的更改维护,例如后期需要更改网页整体色调,或者重大节日或者纪念日,更换页面主体色调等;(维护成本高)
......
就在这样的背景下,始终坚持秉承高举“Don‘t Repeat Yourself”大旗的程序员进行了再次创新与创作,css预处理器问世,从而降低了“码农”的工作量,提高了效率!
2.什么是css预处理器?sass和css预处理器有何关系?
官方: CSS 预处理器用一种专门的编程语言,进行 Web 页面样式设计,然后再编译成正常的 CSS 文件,以供项目使用。
通俗来讲: css预处理器就是将源文件进行预先指令处理,变为css文件后然后让项目进行解析渲染;CSS预处理器为CSS增加一些编程的特性,无需考虑浏览器的兼容性问题。支持嵌套、变量和逻辑等。可以让CSS更加简洁、提高代码复用性、逻辑分明等等;
有何关系呢? : css预处理器目前市面上有很多种。最常见的分别为:Sass , Less , Stylus等;Sass即为css预处理的一种;
3.那在多种css预处理器中,为何选用sass并学习呢?
各种css预处理的功能其实大同小异,但在代码书写方面有着不同的书写规范,为了加快我们的上手能力和降低学习成本,从代码书写规范方面以及其与css本身的差异性方面综合考虑而言,Sass的优势是比较显而易见的,所以优先推荐选用学习sass,到这里,再将sass的那什么B装到底,借用官方的宣告,让我们再次大喊:“ Sass是世界上最成熟、最稳定、最强大的专业级CSS扩展语言!”哈哈
4.说了这么多了,那sass(css预处理器)的出现与学习到底能解决哪些问题呢?
- 在学会了sass之后, Sass让css有了动态语言的特点,通过其可以声明变量的优点,我们可以解决上文中说到不易大型修改主体色调等问题的维护,只需修改其变量值即可;
2.在学会sass之后,我们可以让选择器不再那么的长,那样的遥无边际,没有逻辑性,让你的选择器具有嵌套逻辑性,大大提高可读性和阅读性;
3.在学会sass之后,我们可以利用函数以及混合宏的优点,进行样式的多次调用复用,大大减少我们的代码量哦,写一次,用多次
在学会sass之后,我们可以.....
说到这里,您心动了嘛?好了,话不多说,我们开始正式介绍sass吧
5.sass的安装与使用:
如果您使用的是VS Code,可以直接在插件商城下载安装 Easy Sass插件即可
或者参考官方文档下载安装配置环境;
6.sass的基本规则:
1.注释规则
SASS共有两种注释方法。类似于css;
-
多行的CSS注释 /* 注释 */ ,会在编译后生成的css文件中保留显示。
-
单行注释 // 注释,只保留在SASS源文件中,编译后生成的css文化中会被省略。
2.嵌套规则
-
按照html标签结构嵌套书写,和写标签的嵌套几乎类似相同;
-
将子元素的选择器和样式列表直接包裹在父元素的样式列表中即可;
例如:div的宽高为200,背景红色,里面的p标签,文字颜色白色,字体大小20px里面的a标签没有下划线的写法为:
div {
width: 200px;
height: 200px;
background-color: red;
p {
color: white;
font-size: 20px;
a {
text-decoration: none;
}
}
}
3.各个sass文件直接的互相引用规则
-
Sass 的 @import ,允许其导入 SCSS 或 Sass 文件。被导入的文件将合并编译到同一个 CSS 文件中。相当于将一个sass导入到另一个sass中使用
-
@import "需要被引入的文件.scss";`
4.sass和scss一样嘛,有何种联系?
sass和scss其实是一样的css预处理语言,其后缀名是分别为 .sass和.scss两种。
SASS版本3.0之前的后缀名为.sass,而版本3.0之后的后缀名.scss。
总而言之,sass的书写规范要求更为严格,是升级前的版本名称,scss是升级后的版本名称,相对而言,其书写规范更为舒适一些;
7.Scss语法:
1.变量
-
变量的创建:值;变量名:变量值;
-
变量值可以是长度单位、颜色,以及其他变量等;
-
在命名变量名时,尽量让其有一定的识别性意义,方便他人阅读查找或者日后修改!
例如:
$myColor:#25aab2; //颜色
$backgroundColor:$myColor; //变量
$myHeight:50px; //长度单位
**2. 父选择器 & **
-
父选择器 & 的使用是代表当前作用域所有的结构集合,说的再简单点,其实&就代表着它自己;
-
如果需要使用伪类,必须使用&进行占位
3. 计算功能
SASS允许在代码中使用算式,注意运算的单位前后尽量保持一致。
例如:
div {
margin: (14px/2); //因为在css中/会被识别,所以要特别注意除法计算时一定要加();
top: 50px + 100px;
}
4.插值语句
- 上文中说到创建变量是可用于样式中的值,那么问题来了,变量是否可以在选择器上使用呢?答案是当然可以,但是需要一些特殊处理,那就是插值语句;
-
如果选择器想要使用变量,可以使用插值#{}包裹变量后使用。
-
而且使用插值语句,可以避免 Sass 运行运算表达式时,比如除法,有时候不是要除号而是需要斜杠。 例如
border-radius: #{$a}/#{$b};
使用插值语句,"/" 可以不看作除号
5.混合器指令
1.定义混合指令关键字 @mixin
声明混合指令和创建js函数很相似,需要一个名字,和一个定义样式的域{ }
语法 :@mixin
后添加名称与样式@mixin name {样式列表}
-
混合也需要包含选择器和属性,同样也可以用 & 引用父选择器(自己)
-
可以设置可以变化的参数,可以使用判断语句以及循环语句哦;
-
混合指令的名称可以自定义,命名规范和js变量命名规格几乎相同,不可以使用数字开头等;
- 引用混合样式关键字 @include
-
使用 @include 指令引用混合样式,格式是在其后添加混合名称
@include name;
-
将
@include
指令和调用混合名称直接放在需要的样式列表中 -
定义了混合指令就要用,需要在哪个地方用就使用
@include
来引用@mixin
的指令名即可; -
可以传递参数
@include name(30px);
也可以配合变量使用@include name($变量);
3.常用的@mixin方法展示:
//边框
@mixin yjbk ($num) {
-moz-border-radius: $num;
-webkit-border-radius: $num;
border-radius: $num;
}
//转块元素
@mixin block ($width, $height) {
width: $width;
height: $height;
display: block;
}
//转行内块元素
@mixin inline-block ($width, $height) {
width: $width;
height: $height;
display: inline-block;
}
//屏幕中居中
@mixin pm-center {
position: fixed;
top: 50%;
left: 50%;
transform: translate(-50%, -50%);
}
//文本省略
@mixin ellipsis($rowCount: 1) {
@if $rowCount <=1 {
overflow: hidden;
text-overflow: ellipsis;
white-space: nowrap;
} @else {
min-width: 0;
overflow: hidden;
text-overflow: ellipsis;
display: -webkit-box;
-webkit-line-clamp: $rowCount;
-webkit-box-orient: vertical;
}
}
//三角形()
@mixin sanjiaoxing($size: 5px, $color: rgba(0, 0, 0, 0.6), $dir: bottom) {
width: 0;
height: 0;
border-style: solid;
@if (bottom==$dir) {
border-width: $size $size 0 $size;
border-color: $color transparent transparent transparent;
} @else if (top==$dir) {
border-width: 0 $size $size $size;
border-color: transparent transparent $color transparent;
} @else if (right==$dir) {
border-width: $size 0 $size $size;
border-color: transparent transparent transparent $color;
} @else if (left==$dir) {
border-width: $size $size $size 0;
border-color: transparent $color transparent transparent;
}
}
//元素定位
@mixin postion ($type, $top, $right, $bottom, $left) {
position: $type;
top: $top;
bottom: $bottom;
left: $left;
right: $right;
& > #{$type} {
color: #f00;
}
}
// 隔行换色
@mixin ghhs($evenColor, $evenBgColor, $oddColor, $oddBgColor) {
&:nth-child(2n) {
color: $evenColor;
background-color: $evenBgColor;
}
&:nth-child(2n + 1) {
color: $oddColor;
background-color: $oddBgColor;
}
}
// 禁止文本被选择
@mixin user-select {
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
}
//修改input placeholder颜色
@mixin placeholderColor($color: #fff) {
&::-webkit-input-placeholder {
color: $color;
}
&::-moz-placeholder {
/* Mozilla Firefox 19+ */
color: $color;
}
&:-moz-placeholder {
/* Mozilla Firefox 4 to 18 */
color: $color;
}
&:-ms-input-placeholder {
/* Internet Explorer 10-11 */
color: $color;
}
}
//元素初始化
@mixin elinit ($w: auto,$h: auto,$c: #fff) {
width: $w;
height: $h;
background: $c;
}
//元素居中
@mixin content ($w,$h) {
position: absolute;
width: $w;
height: $h;
top: 50%;
left: 50%;
margin-top: -$h / 2;
margin-left: -$w / 2;
}
//阴影
@mixin boxshadow ($x) {
box-shadow: $x;
}