当前位置: 首页 > news >正文

CSS预处理语言LESS与SCSS的介绍

 预处理语言出现的背景:     

        CSS作为一种标记语言可以很好地完成页面样式的定义,但是一些标记语言固有的缺陷也限制了编写CSS的效率。要提高效率,一方面依赖工具,比如编辑器的自动补全;另一方面要依赖于语言本身的改进,但是由于CSS和浏览器以及互联网上的历史数据紧急耦合,由于兼容性问题,目前要设计新的语言来代替CSS是不太现实的。下面将要介绍的CSS预处理语言利用其他编程语言,巧妙地解决了CSS存在的不足。

LESS介绍:

        LESS诞生于2009年,是使用JavaScript语言编写的一种CSS预处理语言,它为CSS赋予了编程语言的特性,如变量、继承、运算、函数等。LESS既可以在客户端上运行,也可以借助Node.js或Rhino在服务端运行。

1.使用基础

客户端调试方式:

(1).引用.less样式文件:

<link rel="stylesheet/less" type="text/css" href="http://localhost/styles.less">

要设置rel值为“stylesheet/less”。需要引入http链接的.less的样式文件,使用本地的.less文件会报错。

(2)下载less.js,在<head>中引入:

<script src="less.js" type="text/javascript"></script>

* less样式文件一定要在引入less.js前先引入。

2.使用变量和操作符

使用@关键字进行变量的定义。

@color: #00c;

#header {
    color: @color;
}


/* 编译后的css代码 */
#header {
    color: #0000cc;
}

3.使用Mixin混入

 Mixin概念在很多编程语言中都有,一般译作混合、混入,是可以重用的代码块。

.rounded-corners(@radius: 5px) {
    -webkit-border-radius: @radius;
    -moz-border-radius: @radius;
    -ms-border-radius: @radius;
    -o-border-radius: @radius;
    border-radius: @radius;
}

#main {
    .rounded-corners;
}    

#btn-corners {
    .rounded-corners(8px);
}

/* 编译后的css代码 */

#main {
    -webkit-border-radius: 5px;
    -moz-border-radius: 5px;
    -ms-border-radius: 5px;
    -o-border-radius: 5px;
    border-radius: 5px;
}

#btn-corners {
    -webkit-border-radius: 8px;
    -moz-border-radius: 8px;
    -ms-border-radius: 8px;
    -o-border-radius: 8px;
    border-radius: 8px;
}

Mixin的语法关键字是一个.符号,可以将其联想记忆为CSS选择器中的类。采用Mixin,实现一次定义,无限使用,既可以大大缩减无谓的重复定义,又提高了代码的可读性和可维护性。

4.内嵌规则

使用嵌套的方式编写层叠样式。

// css的写法
#main div li {
    list-style: none;
}

#main .container {
    margin: 0 auto;
    width: 960px
} 



// 使用less的写法
#main {
    div li {
        list-style: none;
    }

    .container {
        margin: 0 auto;
        width: 960px
    }
}    

5.运算

   任何数字、颜色或者变量都可以参与运算。

@base: 5px;

@doubleBase: @base * 2;

color: #999 / 3;

border: 1px solid @base*2;

SCSS介绍:

        说起SCSS,我们不得不说SASS。SASS是采用Ruby语言编写的一款CSS预处理语言,诞生于2007年,是最早的成熟CSS预处理语言。SASS从第三代开始,完全向下兼容普及的CSS代码,这一代的SASS也被称为SCSS。

1.使用变量

SCSS的变量关键字和PHP一样,都是一个美元符号$开头。

$color: #00c; 

div {
    color: $color;
}


$side: left;
.rounded {
    border-#{$side}-radius: 5px
}

/* 使用scss编译之后 */

div {
    color: #00c;
}

.rounded {
    border-left-radius: 5px;
}

  2.计算

        允许直接在代码中编写算式,并且支持变量和函数。

$width: 100px;
#main {
    width: $width * 10;
    margin:(20px / 2);
    padding: pi()px;
}

/* 使用scss编译之后 */
#main {
    width: 1000px;
    margin: 40px;
    padding: 3.14159px;
}

3.使用@import导入

@import可以用来插入外部文件;如果插入的是CSS文件,则等同于CSS的import命令。

@import "style.scss";

@import "styles.css";

4.使用@extend继承

支持编程语言中的继承概念。

.class1 {
    border: 1px solid #333;
}

.class2 {
    @extend .class1;
    width: 100px;
}

5.使用@mixin混入

@mixin float_left {
    float: left;
    margin-left: 10px;
}

#main {
    @include float_left;
}

6.使用@function定义函数

@function double($n) {
    @return $n * 2;
}

#sidebar {
    width: double(5px)
}

7.控制语句

编程语言都有程序控制语句,来控制代码的运行方向。SCSS中也有@if、@else、@while等控制语句。

(1)if 语句:

div {
    
    @if lightness($color) > 30% {
        background-color: #333;
    } @else {
        background-color: #fff;
    }
}

(2) for 循环:

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

(3) while 循环:

$i: 8;

@while $i > 0 {
    .item-#{$i} {
        width: 2px * $i
    }
}

LESS与SCSS的不同:

后续整理中……

相关文章:

  • 互联网摸鱼日报(2022-12-26)
  • 【Python学习记录】matplotlib绘图基本配置
  • java语言的resource 接口
  • 【C语言进阶】想用好C++?那就一定要掌握动态内存管理
  • 【Maven基础】单一架构案例(三)
  • Nacos 寻址机制
  • Python绘制地磁场
  • Android -- 每日一问:介绍一下你经常浏览的 Android 技术网站
  • 2023跨年代码(烟花+自定义文字+背景音乐+雪花+倒计时)
  • Linux 命令(235)—— mktemp 命令
  • You are not allowed to create a user with GRANT
  • 分布式系列之聊聊Nginx实现原理
  • RabbitMQ:基本消息模型
  • 双软认证”包含的具体内容
  • 软件测试 -- 进阶 8 软件测试流程和过程
  • Angular js 常用指令ng-if、ng-class、ng-option、ng-value、ng-click是如何使用的?
  • Angular6错误 Service: No provider for Renderer2
  • interface和setter,getter
  • JavaScript标准库系列——Math对象和Date对象(二)
  • Python socket服务器端、客户端传送信息
  • python 装饰器(一)
  • SQLServer插入数据
  • Xmanager 远程桌面 CentOS 7
  • 从@property说起(二)当我们写下@property (nonatomic, weak) id obj时,我们究竟写了什么...
  • 复习Javascript专题(四):js中的深浅拷贝
  • 通过几道题目学习二叉搜索树
  • (C语言)求出1,2,5三个数不同个数组合为100的组合个数
  • (ros//EnvironmentVariables)ros环境变量
  • (附源码)springboot 智能停车场系统 毕业设计065415
  • (规划)24届春招和25届暑假实习路线准备规划
  • (四)Tiki-taka算法(TTA)求解无人机三维路径规划研究(MATLAB)
  • (一)RocketMQ初步认识
  • (转) Android中ViewStub组件使用
  • .360、.halo勒索病毒的最新威胁:如何恢复您的数据?
  • .net core 6 集成和使用 mongodb
  • .NET/C# 异常处理:写一个空的 try 块代码,而把重要代码写到 finally 中(Constrained Execution Regions)
  • /etc/sudoers (root权限管理)
  • @FeignClient注解,fallback和fallbackFactory
  • @KafkaListener注解详解(一)| 常用参数详解
  • [ vulhub漏洞复现篇 ] Grafana任意文件读取漏洞CVE-2021-43798
  • [20150321]索引空块的问题.txt
  • [20180224]expdp query 写法问题.txt
  • [ACTF2020 新生赛]Upload 1
  • [C#]winform部署PaddleOCRV3推理模型
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [IE编程] IE8的SDK 下载
  • [iOS]-UIKit
  • [Kubernetes]2. k8s集群中部署基于nodejs golang的项目以及Pod、Deployment详解
  • [lintcode easy]Maximum Subarray
  • [one_demo_10]递归解决汉诺塔问题
  • [pytorch入门] 3. torchvision中的transforms
  • [Redis] Redisson实现分布式锁
  • [Silverlight 4 RC]RichTextBox概览
  • [SWPUCTF 2021 新生赛]ez_unserialize
  • [USACO07JAN]区间统计Tallest Cow