跳到主要内容

4.2-CSS预处理器

Create by Fall on 2020---- Recently revised in 2022-09-27

变量的声明

less 变量的声明

@number : 40px;
@boxname : .box1;
@{boxname}{
height:@number;
}

sass 变量的声明

$number :40px;
$boxname :box2;
#{$boxname}{
height:$number;
}

选择器的嵌套

SCSS和LESS大部分嵌套方式没有太大区别

body {
.container{
.top_left{
.title{
height: 400px;
width: 400px;
}
.content{
margin-top: 2px;
box-shadow: 2px saddlebrown ;
}
}
.top_right{
.detail{}
}
}
}
//伪类选择器 可以使用&符号取消生成css后中间的空格
box1{
&:hover{
background-color : pink
}
}

sass 独有属性嵌套

.box{
font{
size:14px;
weight:2;
}
}

单位的转译

less

  1. 按照第一个出现的单位进行转变
  2. 如果出现"/"号,在font里面会保留

scss

  1. 如果单位不同,报错
  2. scss的默认规则比less更加严谨

内置函数

函数名称函数作用支持
round进行四舍五入取整
percentage: 自动转化为百分比
random:生成一个随机数仅scss支持
sqrt开平方less

注 :sass 支持自定义函数 书写格式:

@function  sum($n,$m){
@return $n+$m;
}
font-size: sum(5px,6px)

混合输入

混合输入可以帮助你一次复用多个样式,在编写重复的样式时,会更简单,并且可以传递参数

less 的混入

.hide{
display:none;
}
.some(){
font-size:50px;
}
// 可以传入参数
.way(@bgcolor){
background-color:@bgcolor;
}
.box{
height:400px;
.hide;
.some();
.way(yellow)
}
// 将混合输入的对象进行封装
#pj1{
.some(){
height:50px;
}
}
.box2{
.some();
#pj1.some();
}

scss 的混入

@mixin show {
display :block;
}
@mixin hide($color){
display : none;
color :$color;
}
.box{
width:100px;
@include show;
}

继承

可以继承其它选择器的样式,来达到精简代码量的目的

less 的继承

.dis{
display: inline;
}
.box5{
&:extend(.dis);
}
.box6{
&:extend(.dis);
}

scss 的继承

// %作为占位符,编译之后不显示
%line{
display:inline;
}
.box1{
@extend %line;
}
.box2{
@extend %line;
}

文件导入

sass 的 @import 规则在生成 css 文件时就把相关文件导入进来。这意味着所有相关的样式被归纳到了同一个 css 文件中。、

局部导入

sass 局部文件的文件名以下划线开头。这样,sass就不会在编译时单独编译这个文件输出css,而只把这个文件用作导入。当你@import一个局部文件时,还可以不写文件的全名,即省略文件名开头的下划线。举例来说,你想导入themes/_night-sky.scss这个局部文件里的变量,你只需在样式表中写@import "themes/night-sky";

嵌套导入

//blue-theme.scss

.blue-theme {@import "blue-theme"}
// 等价于下面的代码
.blue-theme {
aside {
background: blue;
color: #fff;
}
}

多个属性并列操作

less

// "+"可以把并列的属性书写在一起
// 在后面添加"_"用于将连接的","更换成" " 空格
.box{
background+ :url(a.png);
background+ :url(b.png);
transform+_ :scale(2);
transform+_ :rotate(30deg);
}

scss

// 对url进行统一管理
$bg :(
a:url(a.png),
b:url(b.png),
);
$transform : (
a : scale(2),
b : rotate(30deg)
)
box{
background: map-values($bg);
transform : zip(map-values(transform)...)
}

媒体查询

多端兼容

lessscss

.box10{
width : 100px ;
@media all and (min-width:768px){
width :600px;
}
@media all and (min-width:1440px){
width : 900px
}
}

逻辑运算

less的逻辑运算

// 判断语句
@count :3366;
.get(@cn) when (@cn >4){
width : 100px + @cn;
}
.get(@cn) when (@cn<4){
width :10px +@cn;
}
.box{
.get(@count);
}
// 通过递归实现循环
@count2 :0;
.get(@cn) when (@cn<3){
.box-@{cn}{
width: 100px+10*@cn
}
.get2((@cn+1));
}

scss的逻辑运算

// 判断语句
$count :5;
.box{
@if($count >4){
width : 100px + $count;
}
@else{
width :10px +$count;
}
}
//循环语句
@for $i from 0 through 2{
.box-#{$i}{
width : 100px +$i;
}
}

库的引入

less的引入

@import "./reset.less";

scss的引入

@import "./reset.scss";

CSS 相关文件名

文件夹作用
base初始通用样式,或者动画,工具,打印等
components用于构建页面的所有组件,按钮,表单,表格,弹窗
layout用于布局页面的不同部分,页眉,页脚,弹性布局,网格布局
pages放置页面之间不同的样式,如首页特殊样式,列表页特殊样式
themes应用不同的主题样式,如管理员,普通用户,不同用户群体看到不同的页面
abstracts放置变量,函数,响应式等辅助开发的部分
vendors放置一些第三方独立的CSS文件,bootstrap,iconfont