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 拓展名 ,则可以将拓展名省略掉