一、LESS
1.条件判断
在less中我们可以通过条件判断实现渲染不同的样式,有点像switch,不是通过if实现的,而是when实现
在when方法中添加条件时,不需要单位
当判断相等时,使用=实现,没有==和===
判断多个条件时使用and关键字,配合when使用 when and
判断非语句,使用not, when not
2.函数-Math
在less中我们可以像js中使用Math对象一样使用less中的数学函数
Floor():向下取整(参数可以带单位)
Ceil():向上取整
Round():四舍五入
Percentage():将数值转换为百分数,(参数如果带有%单位是无效的),参数只能是数字
sqrt():平方根
abs():绝对值
sin():sin函数
asin():arcsin函数
cos():cos函数
acos():arccos函数
tan():tan函数
atan();arctan函数
pi():返回π
pow(a,b):次方 a的b次方
mod(m,n):m对n取余
convert(m,n):数字之间的转换
unit(m,n):不转换情况下替换数字的单位
3.颜色定义函数
rgb():可以生产一个16进制的色彩值,标准色彩方法
语法:rgb(red,green,blue);
每个值都是0-255
rgba():rgba(red,green,blue,alpha)
红绿蓝透明度
hsl():表示色相,饱和度,亮度模式,是一种工业标准色彩模式
语法:hsl(h,s,l)
h:色相,表示某一个颜色(0-360)
s:饱和度,色彩的浓度,单位是百分数,0%表示灰色,100%表示纯色
l:亮度,单位也是百分比,0%表示黑色,100%表示白色
4.颜色通道
less中色彩通道的方法:
red():获取色中的红色通道
green():获取色中的绿色通道
blue():获取色中的蓝色通道
alpha():获取色中的透明度通道
hue():获取色中的色值通道,数字(0-360)
saturation():获取色中的饱和度通道,百分数
lightness():获取色中的亮度通道,结果是百分数
这七个通道方法都只能接受一个参数,这个参数就是某个颜色
灰色是由三个相同的通道组成的,值越小灰度越大
5.颜色操作
颜色操作类函数,用于处理色彩
fade():对色彩进行透明度处理
fade(color,alpha)
fade(red,0.4)
fadeIn():表示增加透明度,当第一个参数不是颜色时,得到的是一个16进制不透明的颜色,透明度大于1
fadeout():透明度减少,可以接受两个参数,第一个表示颜色,第二个表示透明度的变化,是一个百分数
greyscale():得到混合色灰色的颜色值,接受一个表示颜色的参数
mix():将两种颜色混合,默认情况下取两种颜色相加后的平均值,第三个参数表示取的数值,是百分比,表示色彩混合的一个权重
saturate():增加饱和度
参数1:颜色
参数2:饱和度的增加量
desaturate():减少饱和度
lighten():提高颜色亮度
参数1:颜色
参数2:提高的亮度
darken():降低颜色亮度
6.色彩混合函数
这个函数只做颜色处理,不处理图片
softlight:柔光处理
参数1:底色
参数2:添加色
hardlight:强光处理
参数1:底色
参数2:添加色
7.字符串方法
escape(str):将字符串做url转码
参数是需要转码的字符串,将空格,等号 等字符转义
e():表示对字符串不做编译
replace():替换字符串中的子串
参数1:源字符串
参数2:被替换的字符串
参数3:替换的字符串
8.命名空间
命名空间是用来约束管理变量的,解决,变量在作用域中混乱的问题,防止变量污染作用域。
设计模式中单体模式是实现命名空间管理的一种常见设计模式。
在less中引入了该思想,在less中我们可以通过命名空间来管理变量混合,以及方法
为了更好组织 CSS 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,防止重名的出现,以及更好的管理变量和混合
&:在less中表示该元素,注意,&符号要写在里面
注意,引用混合时,要将属性赋值给谁就要放在谁的里面
9.作用域
Less到底是一个什么样的作用域呢?
在less中,作用域更像是一个块作用域,定在块内部的变量在外界访问不到。
在less中,访问变量的顺序,就近原则,哪个变量离他近就使用哪个
对于函数,它的存在也是依赖块级作用域,定义在块内部的函数,在外界访问不到,
但是我们可以通过命名空间使用它。
对于变量,他的存在也是依赖于块级作用域,定义在块内部的变量,我们在外界访问不到,
但是我们也不能通过命名空间访问。变量更像是一种私有的。
10.文件引入
如果将css样式全部写在一个文件中很不方便,所以要分开
利用文件引入,在less文件之间创建依赖
语法:
@import 'filename';
通过import导入一个文件的内容,被导入的文件中的变量,混合,方法等内容在编译后会留在当前文件中,可以被调用使用
11.插值
如果我们需要将一个变量插入到一个字符串中,可以使用less的插值处理
语法:
@{key} //key是变量名字
二、Sass
1.简介
SASS 是一种css的开发工具,提供了许多便利的写法,大大节省了开发者的时间,使css的开发变得简单可维护
sass 的本质是一种可以简化css工作流程的方式,可以帮助我们更简单的开发和维护css内容
sass 是ruby语言写的,因此电脑需要先安装ruby,mac已经自带了,Windows系统需要重新安装环境
ruby -v
//如安装成功会打印
ruby 2.2.2p95 (2015-04-13 revision 50295) [i386-mingw32]
//1.删除原gem源
gem sources --remove https://rubygems.org/
//2.添加国内淘宝源
gem sources -a https://ruby.taobao.org/
//3.打印是否替换成功
gem sources -l
//4.更换成功后打印如下
*** CURRENT SOURCES ***
https://ruby.taobao.org/
//安装如下(如mac安装遇到权限问题需加 sudo gem install sass)
gem install sass
gem install compass
检查版本号
sass -v
//更新sass
gem update sass
//查看sass帮助
sass -h
一般情况sass文件会写为scss
sass index.scss index.css
sass index.scss>index.css
2.变量与作用域
变量定义:$key:value;
作用域对变量的影响:在作用域内部定义的变量,外部无法访问,是私有的
3.父选择器
在sass中可以通过&符号,在父选择器内部访问父选择器
选择当前选择器
4.属性嵌套
sass 允许对css的属性进行嵌套,通常是对复合属性进行嵌套
border-top-color ==>
border:{
top:{
color:red;
}
left:{
style:solid;
}
}
在css中对属性嵌套,当编译时,会根据嵌套的层级进行编译结果
5.混合
sass中混合作用是为了继承复用
语法:
定义:@mixin names($w,$h) {width:100px}
使用:@include names(100px,200px);
多参数混合:
6.继承
sass中的混合,与less中的方法有点像
sass中的继承,与less中的混合有点像
继承是用来实现对其他类或者元素或者id样式的继承
语法:
@extend 选择器;
sass不仅仅可以继承元素的名称的选择器,还可以继承自定义的元素名称
7.解决中文报错
在ruby中找到engine.rb文件,在该文件require XXXX 后边写上:
Encoding.default_external = Encoding.find('utf-8')
8.作用域对混合以及继承的影响
sass中:
定义在作用域内部的混合,在外部无法访问,只能在内部访问
定义在作用域内部的继承,在作用域外部是可以访问的,不管该选择器写在任何位置,都可以被继承到
less中:
less的混合与sass的继承比较像,less定义在作用域内部的混合,外部不能直接访问,需要通过命名空间进行访问
less的方法和sass的混合比较像,less定义在作用域内部的方法,在外部不能直接访问,需要通过命名空间访问
9.占位符
我们自定义一个选择器样式,用于继承,继承结束,我们不想要这个选择器了,删掉它
此时可以使用占位符,表示定义一组临时属性,当 编译结束 就立马被删除
占位符只能用于标签选择器,其他选择器不能用
语法:
%div{}
%mydiv{}
10.数字运算
sass中也有+-*/ 运算,可以进行数字变量之间的运算,可以带单位运算
带有单位运算时:默认是px,哪个单位在前边,最终结果就以哪个单位为标准
除法有点特殊:
1) 加上()
2) 变量或者是函数的返回结果
3) 除法运算只是表达式的一部分
满足以上任何一个条件都可以
11.色彩运算
sass中支持色彩的加减乘除,注意除法要满足上边的数学运算中的条件
16进制的色彩运算,每个通道进行独立运算,
如果十六进制色彩每个通道的值大于255或小于0,不会影响其他通道,大于255取255,小于0取0
在rgba下,进行运算时,要求透明度必须一致,否则无法运算,最终结果不会影响透明度
12.插值与字符串拼接
插值:
为了动态创建属性
语法:
#{$dir}
字符串拼接:
+ 拼接两个字符串,没有''
no + -repeat
$re:-repeat
no + $re
13. if语句
语法:
@if 定义if语句
@else if 定义 else if 语句
@else 定义 else 语句
or 或 and 与 not 非
判断相等使用:== <= >= < >
14. for循环
语法:
@for $i from start through end{
//循环体
}
@for:定义for循环
$i:循环变量
start:$i的初始值,包含start
end:$i的结束值,包括end
from:从哪里开始
through:到哪里结束
15. while循坏
语法:
@while 条件 {}
$i : 0;
@while $i < 20{
//循环体
$i:$i+1;
}
16.三元运算符
if(条件,true结果执行,false结果执行)