前  言

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

@color:#ff0000;
@length:100px;
#div1{
width: @length;
height: @length*2;
background-color: @color;
}

2、混合(Mixins)

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

//无参混合
.borderRadius{
border-radius: 10px;
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
} //调用

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

 

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

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

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

}

 

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

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

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

 

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

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

.pipei(lefts,@width:10px){
margin-left: @width;
}
.pipei(rights,@width:10px){
margin-right: @width;
}
.pipei(tops,@width:10px){
margin-top: @width;
}
.pipei(bottoms,@width:10px){
margin-bottom: @width;
}
.pipei(@_,@width:10px){
padding: 10px;
}
//@_不管匹配成功与否,都会执行的选项。
@position:leftss;
.class1{
.pipei(@position,20px);
}

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

.argu(@width,@style,@color){
//border: @width @style @color;
border: @arguments;
}
.class2{
.argu(10px,solid,red);
}

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;

$width:100px;
$position:left;
#div1{
width: $width;
height: $width;
background-color: red;
border-#{$position}:10px solid green ;
}

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

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

section{
background-color: #CCCCCC;
p{
color: red;
}
ul{
padding: 0px;
li{
list-style: none;
font:{
size: 16px;
weight:bold;
family:"微软雅黑";
style:"italic";
}
//& =="section ul li"
}
}
}

对应的CSS文件:

section {
background-color: #CCCCCC;
}
section p {
color: red;
}
section ul {
padding: 0px;
}
section ul li {
list-style: none;
font-size: 16px;
font-weight: bold;
font-family: "微软雅黑";
font-style: "italic";
}

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

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

//混合宏
@mixin hunhe($color:red){
color: $color;
}
.class3{
@include hunhe;
background-color: yellow;
}
.class4{
@include hunhe;
background-color: blue;
}

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

//继承
.class1{
color: red;
}
.class{
@extend .class1;
background-color: yellow;
}

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

%class1{
color: red;
}
.class4{
@extend %class1;
background-color: yellow;
}

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

//scss中的条件语句
.class6{
width: 100px;
height: 100px;
@if 1>2 {
background-color: yellow;
}
@else{
background-color: green;
}
}

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

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

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

$i:0;
@while $i<{
.while-#{$i}{
border: #{$i}px solid red;
}
$i:$i + 1;
}

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

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

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. EF扩展 更新指定字段

    using System.Data.Entity.Infrastructure; using System.Threading.Tasks; /// <summary> /// EF扩展 ...

  2. 第三章 Hyper-V 2012 R2配置选项

    原书中的第二章 是介绍了下hyper-v的管理器和检查点的使用,导入导出虚拟机,所以我跳过了不高兴写,很简单.直接进入第三部分,介绍虚拟机的三个重要组成部分:CPU,内存,硬盘的配置选项. Hyper ...

  3. Fedora 29 使用 SCL (Software Collections)

    在社区中SCL 由Centos 项目进行维护,所以我们使用CentOS 7 SCL源.CentOS SCL中提供了devtoolset-7-gcc-c++,版本正好为 gcc version 7.3. ...

  4. 使用parted创建gpt大分区例子

    [root@VM000000518 ~]# parted /dev/xvde GNU Parted 2.1 Using /dev/xvde Welcome to GNU Parted! Type 'h ...

  5. [Demo_01] MapReduce 实现密码 Top10 统计

    0. 说明 通过 MapReduce 实现密码 Top10 统计 通过两次 MapReduce 实现 1. 流程图 2. 程序编写 密码 Top10 统计代码

  6. win10无法删除文件夹(其中的文件或者文件夹已在另一个程序中打开)怎么办?

    1. 右键点击任务管理器 2.打开资源监视器 3.搜索任务,结束任务(可能会死机)

  7. MySQL使用索引的场景分析、不能使用索引的场景分析

    一.MySQL中能够使用索引的典型场景 1.匹配全值.对索引中的列都有等值匹配的条件.即使是在and中,and前后的列都有索引并进行等值匹配. 2.匹配值的范围查询,对索引的值能够进行范围查找. 3. ...

  8. if 嵌套if 的先后顺序的区别 (自测)

    # 验证 verify very good! # username = input("请输入用户名").capitalize()# password = input("请 ...

  9. 简单Nginx下防跨站、跨目录安全设置,支持PHP 5.3.3以上版本

    Nginx下存在跨站和跨目录的问题,跨站和跨目录影响同服务器/VPS上的其他网站. PHP在5.3.3以上已经增加了HOST配置,可以起到防跨站.跨目录的问题. 如果你是PHP 5.3.3以上的版本, ...

  10. 面转栅格之ERROR 999999:执行函数时出错

    今天进行矢量面转栅格的操作时,总是出现ERROR 999999:执行函数时出错,如下图所示: 刚开始以为是栅格保存的路径太长的问题,后来发现是矢量面的路径问题,我的矢量面是放在自建的图层组下面,如下图 ...