css -预处理器less

CSS 编写的痛点

CSS 作为一种样式语言 ,本身用来给HTML元素添加样式 是没有问题的.

但是目前前端项目已经越来越复杂,不再是简简单单的几行CSS 就可以搞定的,我们需要几千行甚至上万行的CSS 来完成页面的美化工作.

随着代码量的增加,必然会造成很多的编写不便:

  • 比如大量的重复代码,虽然可以用类来勉强管理和抽取 ,但是使用起来依然不方便
  • 比如无法定义变量(当然通过CSS 函数目前已经支持),如果一个值被修改,那么需要修改大量代码,可维护性很差;(比如主题颜色)
  • 比如没有专门的作用域和嵌套 ,需要定义大量的id/class 来保证选择器的准确性,避免样式混淆.

所以 有一种对CSS 称呼是 "面向命名编程"

CSS痛点问题的解决

  • 社区为了解决 CSS 面临的这些问题,出现了一系列的CSS 预处理器(CSS preprocessor)
  • CSS 预处理器是一个能让你通过预处理自己独有的语法来生成 CSS 的程序.
  • 市面上有很多CSS 预处理器可供选择 ,且大多数预处理器会增加一些原生CSS 不具备的特性;
  • 代码最终会转化为CSS 来运行 ,因为对于浏览器来说:它只识别CSS;

常见的CSS 预处理器

常见的预处理器有哪些呢? 目前使用较多的是三种预处理器:

Sass/Scss:

  • 2007年 诞生,最早也是最成熟的CSS 预处理器,拥有ruby社区的支持,是属于Haml(一种模版系统)的一部分;
  • 目前受LESS 影响,已经进化到了全面兼容CSS的SCSS;

Less:

  • 2009年出现,受SASS 的影响比较大,但又使用CSS的语法 ,让大部分开发者更容易上手
  • 比起SASS 来,可编程功能不够,不过优点是使用方式简单,便捷,兼容CSS,并且已经足够使用
  • 另外反过来也影响了SASS 演变到了 SCSS的时代;
  • 著名的Twitter Bootstrap 就是采用 LESS做底层语言的,也包括React 的UI框架 AntDesign.

Stylus:

  • 2010年产生,来自Node.js社区,主要用来给Node项目进行CSS 预处理支持;
  • 语法偏向于Python,使用率相对于Sass/Less 少很多

Less 预处理器

什么是LEss呢? 官方的介绍如下:

It's CSS, with just a little more.

Less (Leaner Style Sheets 的缩写) 是一门CSS 拓展语言,并且兼容CSS.

  • Less 增加了 很多相比于CSS 更好用的特性;
  • 比如 定义变量,混入,嵌套,计算等等
  • Less 最终需要被编译成CSS 运行于浏览器中(包括部署到服务器中)

Less 代码的编译

less 代码的编译 通常有如下几种方式:

方式一 : 下载Node环境,通过 npm 包管理下载less 工具,使用less 工具进行编译;

可以通过webpack 配置 完成此操作,篇幅问题,不再做演示.

方式二: 通过VSCode 插件来完成CSS 或者在线编译

lesscss.org/less-previe... (在线翻译网站)

方式三:引入CND的less 编译代码,对less 进行实时的处理

css 复制代码
<script src="https://cdn.jsdelivr.net/npm/less@4" ></script>

方式四: 将less 编译的js 代码下载到 本地,执行js代码对less 进行编译;

  • 将方式三链接种的代码 拷贝到本地
  • 在html 中引入js 文件
html 复制代码
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
<link rel="stylesheet/less" href="./test.less">
<script src="./lessc.js"></script>
</head>
<body>
    <div class="box"></div>
    
</body>
</html>

Less 常用语法

Less 语法一: Less 兼容CSS

  • 我们可以在Less 文件中编写所有的CSS 代码.
  • 只是将CSS的拓展名变成了.less结尾而已

Less 语法二 - 变量

在一个大型的网页项目中,我们CSS 使用到的某几种属性值往往是特定的.

  • 比如我们使用到的主题颜色值,比如每次编写类似于 #f3c258格式的语法;
  • 一方面是记忆不太方便,需要重新编写或者拷贝样式;
  • 另一方面如果有一天 主题颜色改变,我们需要修改大量的代码;
  • 所有,我们可以将常见的颜色或者字体等定义为变量来使用

在Less 中使用如下的格式来定义变量:

@变量名:变量值;

使用时,通过 @变量名 ,来引用对应的变量

less 语法三 -嵌套

在css 中,当我们需要找到 一个内层的元素时,往往需要嵌套很多层的选择器

Less 提供了选择器的嵌套

特殊符号: & 表示当前选择器的父级

Less 语法四 - 运算

在Less 中,算术运算符 + ,-, / 可以对任何数字,颜色或变量进行计算 * 算术运算符在加,减比较之前会进行单位计算,计算的结果 以最左侧操作数的单位类型为准; 如果单位换算无效或失去意义,则忽略单位;

Less 语法五 - 混合 (Mixins)

在CSS 编写过程中,多个选择器中可能会有大量相同的代码

  • 我们希望 可以将这些代码抽取到一个独立的地方,任何选择器都可以进行复用.
  • 在less 中提供了**混入(Mixins)**来帮助我们完成这样的操作;

混合(Mixin) 是一种将一组属性 从一个规则集混入到另一个规则集的方法

注意:混入在没有参数的情况下,小括号可以省略,但是不建议这样使用;

**混入 也可以穿入变量 **

Less 语法六:映射

混入和映射 可以结合,当作一个自定义的函数来 使用

less 语法七: extend 继承

和 mixins 作用类似,用于复用代码

和 mixins相比,继承 代码最终会转化成并级选择

less 语法八: Less内置函数

Less 内置了多种函数 用于 颜色转换,处理字符串,算术运算等. 内置函数手册:less.bootcss.com/functions/

Less 语法九:作用域(Scope)

  • 在查找一个变量时,首先在本地查找变量和混合
  • 如果找不到,则从"父"级作用域继承

Less 语法十: 导入

  • 导入的方式和CSS 的用法是一致的.
  • 导入一个.less 文件,这个less 文件中的所有变量就可以全部使用
  • 如果导入的文件是.less 拓展名 ,则可以将拓展名省略掉
相关推荐
y先森1 小时前
CSS3中的伸缩盒模型(弹性盒子、弹性布局)之伸缩容器、伸缩项目、主轴方向、主轴换行方式、复合属性flex-flow
前端·css·css3
前端Hardy1 小时前
纯HTML&CSS实现3D旋转地球
前端·javascript·css·3d·html
susu10830189111 小时前
vue3中父div设置display flex,2个子div重叠
前端·javascript·vue.js
IT女孩儿2 小时前
CSS查缺补漏(补充上一条)
前端·css
吃杠碰小鸡3 小时前
commitlint校验git提交信息
前端
虾球xz4 小时前
游戏引擎学习第20天
前端·学习·游戏引擎
我爱李星璇4 小时前
HTML常用表格与标签
前端·html
疯狂的沙粒4 小时前
如何在Vue项目中应用TypeScript?应该注意那些点?
前端·vue.js·typescript
小镇程序员4 小时前
vue2 src_Todolist全局总线事件版本
前端·javascript·vue.js
野槐4 小时前
前端图像处理(一)
前端