前  言

JRedu

 LESS  是一门 CSS 预处理语言,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展。

LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。

Sass 是一款强化 CSS 的辅助工具,它在 CSS 语法的基础上增加了变量 (variables)、嵌套 (nested rules)、混合 (mixins)、导入 (inline imports) 等高级功能,这些拓展令 CSS 更加强大与优雅。使用 Sass 以及 Sass 的样式库(如 Compass)有助于更好地组织管理样式文件,以及更高效地开发项目。

1  LESS预编译语言

1.1LESS的基础语法

1、声明变量:@变量名:变量值;
 使用变量:@变量名
 >>>变量使用的原则:
 多次频繁出现的值,后期需要统一修改的值,或者牵扯到数值运算的值,推荐使用变量
 >>>LESS中的变量类型
 在CSS中出现的属性值,在less中都可以用作变量名
 ① 数值类:不带单位的 123 带单位的 1px
 ② 字符串类型:带引号的"hahah" 不带引号的 red #ff000
 ③ 颜色类:red #ff000 rgb(255,255,0)
 ④ 值列表类型:多个值用逗号或空格分隔 10px solid red

  1. @color:#ff0000;
  2. @length:100px;
  3. #div1{
  4. width: @length;
  5. height: @length*2;
  6. background-color: @color;
  7. }

2、混合(Mixins)

①、无参混合
 声明 .class{}
 调用:在选择器中使用.class 直接调用

  1. //无参混合
  2. .borderRadius{
  3. border-radius: 10px;
  4. -webkit-border-radius: 10px;
  5. -moz-border-radius: 10px;
  6. }
  7.  
  8. //调用

.class{
width: 10px;
height: 10px;
.borderRadius();
}

  1.  

② 有参无默认值混合
 声明.class(@param)
 调用:.class(paramValue)//有参无默认值混合

  1. //有参无默认值混合
    .borderRadius1(@radius){
  2. border-radius: @radius;
  3. -webkit-border-radius: @radius;
  4. -moz-border-radius: @radius;
  5. }
    //调用
    .class{

width: 10px;
height: 10px;
.borderRadius1(20px);

}

  1.  

③ 有参有默认值混合
 声明:.class(@param:10px)
 调用:.class(paramValue) 或 .class()

  1. //有参有默认值混合
    .borderRadius2(@radius:10px){
  2. border-radius: @radius;
  3. -webkit-border-radius: @radius;
  4. -moz-border-radius: @radius;
  5. }

.class{
width: 10px;
height: 10px;
.borderRadius2();
}

  1.  

>>>如果声明时没有给参数赋默认值,则调用时必须赋值,否则报错
 >>>无参混合实际上就是一个普通的class选择器,会被编译到css文件中,
 而有参混合在编译时,不会出现在css文件中

3、less中的匹配模式:类似于switch 结构
 ① 声明: @pipei(条件一,参数) {} @pipei(条件二,参数) {} @pipei(@_,参数) {}
 ② 调用:@pipei(条件的值,参数的值){}
 ③ 匹配规则:
 根据调用时输入的条件值,去寻找与之匹配的混合执行,
 @_不管匹配成功与否,都会执行的选项。

  1. .pipei(lefts,@width:10px){
  2. margin-left: @width;
  3. }
  4. .pipei(rights,@width:10px){
  5. margin-right: @width;
  6. }
  7. .pipei(tops,@width:10px){
  8. margin-top: @width;
  9. }
  10. .pipei(bottoms,@width:10px){
  11. margin-bottom: @width;
  12. }
  13. .pipei(@_,@width:10px){
  14. padding: 10px;
  15. }
    //@_不管匹配成功与否,都会执行的选项。
  16. @position:leftss;
  17. .class1{
  18. .pipei(@position,20px);
  19. }

4、arguments特殊变量
在混合中,@arguments表示混合传入的所有参数.@arguments中的所有参数之间,用空格分隔。
 .argu(@width,@style,@color){
border: @arguments;--> border: @width @style @color;
}

  1. .argu(@width,@style,@color){
  2. //border: @width @style @color;
  3. border: @arguments;
  4. }
  5. .class2{
  6. .argu(10px,solid,red);
  7. }

5、less中加减乘除运算:
less中的所有变量和数值,可以进行加减乘除运算
需要注意的是,当颜色值运算时,红绿蓝分三组运算,组内单独计算,组间互不干涉。
6、less中的嵌套
less允许CSS选择器按照HTML代码的结构进行嵌套
section{
>p{}
ul{
&:hover
}
}
① less中的嵌套默认是后代选择器,如果需要子代选择器,需要在前面加>
② &符号,表示这个&所在的上一层选择器,比如上述&表示section ul:hover

1.2 SCSS预编译语言

3.2.1SCSS基础语法

/注释一:编译时不会被编译到CSS文件中
/*
* 注释二:在非compressed模式下,会被编译到CSS文件中。
*
*/
/*!
* 注释三:重要注释,在各种压缩模式下,都会被编译到CSS文件中。
*/
!scss基础语法
 1、scss中的变量
 ① 声明变量 $变量名:变量值;
 scss 中允许将变量嵌套在字符串中,但是变量必须使用井{}包裹
 eg:border-井{$left}:10px solid red;

  1. $width:100px;
  2. $position:left;
  3. #div1{
  4. width: $width;
  5. height: $width;
  6. background-color: red;
  7. border-#{$position}:10px solid green ;
  8. }

2、scss中的运算:会将单位进行运算。使用时需注意最终的单位是否正确。
 eg:10px*10px=100 px*px

3、scss中的嵌套:选择器嵌套 属性嵌套 伪类嵌套
 ① 选择器嵌套 ul{li{}}
 嵌套默认表示后代选择器,如果需要子代选择器,可以在选择器前加>
 可以在选择器的{}中,使用&表示上一层的选择器
 ② 伪类嵌套 :li{&:hover{}}
 在选择器的{}中,使用&配合伪类事件,可以表示当前选择器的伪类
 ③ 属性嵌套 font:{size:18px;} -->font-size:18px
 对于属性名有-分隔为多段的属性,可以使用属性嵌套,属性名的前半部分必须紧跟一个:,才能使用{}包裹属性的后半部分。

  1. section{
  2. background-color: #CCCCCC;
  3. p{
  4. color: red;
  5. }
  6. ul{
  7. padding: 0px;
  8. li{
  9. list-style: none;
  10. font:{
  11. size: 16px;
  12. weight:bold;
  13. family:"微软雅黑";
  14. style:"italic";
  15. }
  16. //& =="section ul li"
  17. }
  18. }
  19. }

对应的CSS文件:

  1. section {
  2. background-color: #CCCCCC;
  3. }
  4. section p {
  5. color: red;
  6. }
  7. section ul {
  8. padding: 0px;
  9. }
  10. section ul li {
  11. list-style: none;
  12. font-size: 16px;
  13. font-weight: bold;
  14. font-family: "微软雅黑";
  15. font-style: "italic";
  16. }

4、 混合宏 继承 占位符
 ① 混合宏 使用@mixin声明混合宏,在其他选择器中使用@include调用混合宏
 eg: @mixin hunhe($param:value){} .class{ @include hunhe(value); }
 @mixin hunhe{$param:value} .class{@include hunhe();}

>>>声明时,可以有参数,也可以没有参数。参数可以有默认值,也可以没有默认值。
 但是调用时,必须符合声明时的要求。与less中 的混合相同
 >>>优点:① 可以传参 ② 不会产生同名的class
 >>>缺点:调用时,会把混合宏中的所有代码copy到选择器中,产生大量冗余代码

  1. //混合宏
  2. @mixin hunhe($color:red){
  3. color: $color;
  4. }
  5. .class3{
  6. @include hunhe;
  7. background-color: yellow;
  8. }
  9. .class4{
  10. @include hunhe;
  11. background-color: blue;
  12. }

② 继承:声明一个普通的class,在其他选择器中使用@extend 继承这个class
 .class1{} .class2{@extend .class1;}
 >>>优点:将相同的代码,提取到并集选择器,减少冗余代码
 >>>缺点:①不能传参;②会生出一个多余的class

  1. //继承
  2. .class1{
  3. color: red;
  4. }
  5. .class{
  6. @extend .class1;
  7. background-color: yellow;
  8. }

③占位符:使用%声明占位符,在其他选择器中使用@extend继承占位符;
 %class{} .class1{@extend %class;}
 >>>优点:①将相同代码,提取到并集选择器,减少冗余代码 ② 不会产生同名的class
 >>>缺点:不能传参

  1. %class1{
  2. color: red;
  3. }
  4. .class4{
  5. @extend %class1;
  6. background-color: yellow;
  7. }

5、if条件结构
 条件结构需要写在选择器里面,条件结构的{}直接包裹样式属性。
 @if 条件{
 @else{}
 }

  1. //scss中的条件语句
  2. .class6{
  3. width: 100px;
  4. height: 100px;
  5. @if 1>2 {
  6. background-color: yellow;
  7. }
  8. @else{
  9. background-color: green;
  10. }
  11. }

6、for循环
 @for $i from 1 to 10{} 不包含10
 @for $i from 1 through 10{} 包含10

  1. @for $i from 1 to 10{
  2. .border-#{$i}{
  3. border: #{$i}px solid red;
  4. }
  5. }

7、while循环
 $i:0;
 @while $i<10{
 $i:$i+1;
 }

  1. $i:0;
  2. @while $i<{
  3. .while-#{$i}{
  4. border: #{$i}px solid red;
  5. }
  6. $i:$i + 1;
  7. }

8、 each 循环遍历
@each $item in a,b,c,d{
 //$item 表示 a,b,c,d中的每一项
 }

  1. //each 循环遍历
  2. @each $item in c1,c2,c3,c4{
  3. $i:$i+1;
  4. .#{$item}{
  5. border: #{$i}px solid red;
  6. }
  7. }

LESS SCSS 预编译语言的更多相关文章

  1. laravel 中CSS 预编译语言 Sass 快速入门教程

    CSS 预编译语言概述 CSS 作为一门样式语言,语法简单,易于上手,但是由于不具备常规编程语言提供的变量.函数.继承等机制,因此很容易写出大量没有逻辑.难以复用和扩展的代码,在日常开发使用中,如果没 ...

  2. 【前端开发】优化代码之减少引入,css预编译语言的优点,stylus的使用

    前言:我必须得承认在最最最开始的时候,我对于css的预编译是非常不以为然的,这是错误的.一般在页面编写过程中,我会将需要reset的css放在reset.css中,讲会需要重复用到的放置到public ...

  3. css预编译语言 sass scss(变量$var, css嵌套规则,@import规则,@extend,@mixin)

    什么是sass Sass 是对 CSS 的扩展,让 CSS 语言更强大.优雅. 它允许你使用变量.嵌套规则. mixins.导入等众多功能, 并且完全兼容 CSS 语法. Sass 有助于保持大型样式 ...

  4. Scss预处理器的使用总结

    变量 .嵌套.Mixin混合.function函数.插值 变量及文件导入 通过$定义变量 $white:#fff; $black:#000; 变量引用 .containner{ color:$blac ...

  5. CSS预编译语言-LESS

    LESS的作用 CSS层叠样式表,它是标记语言,不是编程语言:所有的预编译CSS语言(less/sass…)都是赋予了CSS的面向对象思想 LESS的编译 LESS叫做预编译CSS:写好的LESS代码 ...

  6. css预编译语言sass——mixin的使用

    以根据不同屏幕吃寸动态应用背景图片为例 新建一个mixin如下: @mixin bg_img($path, $ext){ @media screen and (max-device-width: 76 ...

  7. less预编译语言使用总结

    以前就使用过less和sass,其实很简单,就是很长时间不用,忘记语法了,现在来总结一片使用技巧 一.注释 less的注释不会被编译到css文件中,所以提倡多使用less中的注释:/**/ 二.变量 ...

  8. vue项目配置less预编译语言

    当所有东西都 准备好之后 : 第一步: 安装less依赖,npm install less less-loader --save 第二步:找到webpack配置文件webpack.base.conf. ...

  9. scss 入门基础

    在一个项目中,样式是必不可少的一部分,而对于一个完整的项目来说是有个基准色调的.在项目需求变化不大的情况下,可以直接在css中写这些颜色值之类的东西.但是如果遇到一个朝令夕改的领导或者甲方,那会变得相 ...

随机推荐

  1. nginx的ngx_http_realip_module模块和http头X-Forwarded-For、X-Real-IP

    ngx_http_realip_module模块 realip模块作用:当本机的nginx处于反向代理的后端时可以获取到用户的真实ip.可以让accesslog记录用户真实IP地址. set_real ...

  2. EaseType 缓动函数

    EaseType(动画曲线) EaseType 缓动函数或者我习惯叫它动画曲线,在很多的软件或动画中都有涉及到,下面是摘取的一些资料: 缓函数图例 Tween效果 每一幅图像当鼠标移上去,会有路径效果 ...

  3. dell t130服务器安装windowsserver2008R2系统

    dell T130服务器系统是可以安装windowsserver2008R2系统. 总共8个USB端口: 后置USB:2个USB 3.0和4个USB 2.0 前置USB:1个USB 2.0和1个USB ...

  4. 通过logstash过滤、分析日志数据

    logstash是怎么工作的呢? Logstash是一个开源的.服务端的数据处理pipeline(管道),它可以接收多个源的数据.然后对它们进行转换.最终将它们发送到指定类型的目的地.Logstash ...

  5. MySQL客户端工具的选择

    最近因系统云化项目,学习使用MySQL集群,为了找一款顺手的mysql客户端,反复使用了多个工具,并筛选出一个自认为最满意的,在此分享. 先说我的选择:SQLyog. 尝试的客户端:Toad for ...

  6. python3编写网络爬虫13-Ajax数据爬取

    一.Ajax数据爬取 1. 简介:Ajax 全称Asynchronous JavaScript and XML 异步的Javascript和XML. 它不是一门编程语言,而是利用JavaScript在 ...

  7. 组件的三大属性state,props,refs与事件处理

    组件的三大属性state state是组件对象最重要的属性, 值是对象(可以包含多个数据),组件被称为"状态机", 通过更新组件的state来更新对应的页面显示(重新渲染组件) 初 ...

  8. css3不错的教程

    <!DOCTYPE html><html><head><link rel="stylesheet" href="css/styl ...

  9. JSON数据解析(自写)

    自写的JSON解析数据 void setup() { Serial.begin(115200); char chArray[50] = "some characters"; Str ...

  10. mascara-1

    来源:https://github.com/MetaMask/mascara (beta) Add MetaMask to your dapp even if the user doesn't hav ...