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 拓展名 ,则可以将拓展名省略掉
相关推荐
下雪天的夏风10 分钟前
TS - tsconfig.json 和 tsconfig.node.json 的关系,如何在TS 中使用 JS 不报错
前端·javascript·typescript
diygwcom21 分钟前
electron-updater实现electron全量版本更新
前端·javascript·electron
Hello-Mr.Wang38 分钟前
vue3中开发引导页的方法
开发语言·前端·javascript
程序员凡尘1 小时前
完美解决 Array 方法 (map/filter/reduce) 不按预期工作 的正确解决方法,亲测有效!!!
前端·javascript·vue.js
编程零零七4 小时前
Python数据分析工具(三):pymssql的用法
开发语言·前端·数据库·python·oracle·数据分析·pymssql
(⊙o⊙)~哦6 小时前
JavaScript substring() 方法
前端
无心使然云中漫步7 小时前
GIS OGC之WMTS地图服务,通过Capabilities XML描述文档,获取matrixIds,origin,计算resolutions
前端·javascript
Bug缔造者7 小时前
Element-ui el-table 全局表格排序
前端·javascript·vue.js
xnian_7 小时前
解决ruoyi-vue-pro-master框架引入报错,启动报错问题
前端·javascript·vue.js
麒麟而非淇淋8 小时前
AJAX 入门 day1
前端·javascript·ajax