前端开发必学的Less实用指南(详细版) 您所在的位置:网站首页 前端学哪些东西比较好 前端开发必学的Less实用指南(详细版)

前端开发必学的Less实用指南(详细版)

2024-06-29 01:51| 来源: 网络整理| 查看: 265

一.什么是Less

      Less(Leaner Style Sheets的缩写),它是一门向后兼容的CSS扩展语言,Less和Css两者之间是非常像的,因此,如果有CSS基础,学起Less也是比较容易的。Less和其他预处理在本质上都是JS库,这些库的作用是将预处理代码编译成标准的CSS代码,所以我们使用预处理器可以通过多种方式来使用。

二.Less的使用方式      1.直接引用JS文件

          使用JS直接使用Less的时候需要注意,link的标签需要在less.js之前引入,并且link标签的rel属性要设置为stylesheet/less.

Less使用指南 //引入自己写的less代码 //引入Less.js的核心库   2.通过npm全局安装来使用less

          通过npm全局安装        

npm install less -g

-g参数表示将lessc命令安装到全局环境,如果想要安装特定的 版本,可以在包名称后面添加@版本号,如npm install [email protected] -g.

在命令行中运行如下代码就可以将test.less编译为test.css。

lessc test.less test.css

但是在命令行中手动去编译less文件为css文件的这种使用频率不高,因为大多数情况下,作为前端一般都使用Vue,React等主流框架进行开发,所以我们大多数情况下都会在Webpack中使用Less.

  3.在Webpack中使用Less

   由于Webpack本身只能处理js文件,所以需要借助less-loader来帮忙处理Less文件

//下载less,less-loader npm install less less-loader -save-dev //下载css-loader,style-loader npm install css-loader style-loader -save-dev

  配置webpack.config.js:

module.exports = { module: { rules: [ { test: /\.less$/i, loader: [ // 将 less 文件编译成 css 文件,注意 Webpack Loader 加载顺序从右到左 'style-loader', 'css-loader', 'less-loader' ] } ] } };

 实际上,在使用像Vue这样的框架时,官方的CLI脚手架已经帮我们集成了css预处理器,不需要我们自己手动进行Webpack的配置,在使用脚手架初始化项目的时候勾选上自己喜欢的预处理器就好了。

三.Less的具体用法    1.嵌套

      less支持以嵌套的方式去写css代码,不过多赘述,直接上代码

按照父类嵌套子类规范来书写的css:

/*CSS写法*/ .msg-list{ width: 500px; padding: 16px 20px; max-height: 500px; } .msg-list .msg-item{ height: 200px; left: 20px; } .msg-list .msg-item .msg-item-title{ color: antiquewhite; font-size: 24px; }

使用Less嵌套写法:

/*Less写法*/ .msg-list{ width: 500px; padding: 16px 20px; max-height: 500px; .msg-item{ height: 200px; left: 20px; &-title{ color: antiquewhite; font-size: 24px; } } }

以上这两种写法在页面上得到的效果是一样的,但是我们可以直观地感受到Less的写法更优雅,更简洁,在Less写法中支持嵌套使用父选择器&,这样写起来更简洁优雅,不需要再去嵌套复杂的css代码了。

 2.Less中的变量

    在Less中,支持想JS中声明一个变量,在变量声明时需要以@开头,并且需要以分号来结束声明,在使用时直接用变量名来替换设置的样式值即可。代码如下:

/*Less写法*/ /* 声明变量 */ @fontSize: 16px; @height: 500px; /* 使用变量 */ .msg-list{ height: @height; font-size:@fontSize; line-height:@height; }

编译后的CSS代码:

/* CSS代码 */ .msg-list{ height: 500px; font-size: 16px; line-height: 500px; }

使用变量的好处就是,我们可以将公共的样式值抽离出来,如果多个模块文件共用变量时,我们就可以将这些公共的样式值放在一个单独的文件中,然后使用@import导入。

3.导入使用

   下面是一个公共文件的public.less的代码:

@text-size: 20px; @text-color:black; @text-title-color:pink; @text-title-size:36px;

在业务模块中就可以通过@import来使用public.less中的一些变量:

@import "public.css": .msg-item{ font-size: @text-size; color: @text-color; &-title{ font-size: @text-title-size; color:@text-title-color; } } 4.插值用法

   以上的例子都是用在CSS中的属性值,其实变量还能以插值的形式在选择器名称,属性名称,URL路径以及@import声明中使用,插值用法类似于JS模板字符串,在使用时首先定义一个变量a,然后以@{a}的方式去使用:

/* 定义变量 */ @slec:banner; @fontSize:font-size; @imgPath:img-path; .@{slec}{ @{fontSize}:16px; font-weight:bold; maigin:auto; background-img:url("@{imgPath}/1.png"); }

编译后:

.banner{ font-size: 16px; font-weight: bold; margin: auto; background-img:url("img-path/1.png"); } 5.混合

 熟悉Vue框架的对mixin应该很熟悉,Less中的混合就和Vue中的mixin的概念差不多,Less中的混合就是一个设置了属性的选择器a混入选择器b中,这样,选择器b中既有选择器b本身设置的属性也包含选择器a中的属性,Less混合代码如下:

.flex-center { display: flex; justify-content: center; align-items: center; } .box-wrap{ padding: 8px 16px; border: 1px solid black; .flex-center(); }

编译后的CSS代码如下:

.box-wrap{ padding: 8px 16px; border: 1px solid black; display: flex; justify-content: center; align-items: center; }

以上的用法都是固定的属性,其实混合还可以带参数使用,这种用法跟 JS 函数非常类似

.size(@s) { width: @s; height: @s; } // 默认参数 .br(@r: 4px) { border-radius: @r; } .box { padding: 4px; .size(20px); .br(); }

编译后的CSS如下:

.box { padding: 4px; width: 20px; height: 20px; border-radius: 4px; }

另外需要注意的是,Less 代码编译时,会把混合代码也选择渲染出来,如果不想保留混合原本的代码,定义的时候可以在它后面加上 () ;此外,在混合代码后面加上!important,所有的属性都会加上!important。

6.函数与计算

Less中使用函数和计算的频率并不是特别高,因为CSS本身就是负责页面样式的,计算的事情还是交给JS处理比较好,在这里也就以颜色计算和图片尺寸计算简单地说一下:

// 假设有一个16进制的颜色值,需要取它的不透明度为50%的值,有几种做法: // 16进制的颜色值 @color: #ea78bc; // 做法1:去找一个可以将16进制转成rgb的网站,将其转为rgb形式后再用rgba表示 @colorRgb: rgb(234, 120, 188); // 16进制 -> rgb @colorResult1: rgba(234, 120, 188, 0.5); // 做法2:使用Less提供的red、green、blue函数获取rgb值,再用rgba表示 @colorResult2: rgba(red(@color), green(@color), blue(@color), 0.5); // 做法3:使用fade、fadeout函数直接处理 @colorResult3: fade(@color, 50%); // 设置颜色的不透明度 @colorResult4: fadeout(@color, 50%); // 增加颜色的不透明度

以上得到的颜色效果是一样的

图片相关函数:

// 返回图片宽高 @imgSize: image-size("image.jpg"); // output: 100px 100px // 返回图片宽 @imgWidth: image-width("image.jpg"); // output: 100px // 返回图片高 @imgHeight: image-height("image.jpg"); // output: 100px // 返回图片的base64数据 @imgUrl: data-uri('./image.jpg'); // output: url('data:image/jpeg;base64,bm90IGFjdHVhbGx5IGEganBlZyBmaWxlCg==') .box-wrap { width: @imgWidth; height: @imgHeight; background-image: @imgUrl; background-size: @imageSize; }

 在上述代码中,由于不确定图片尺寸而无法精确涉及元素样式时,Less中和图片有关的函数就起作用了。

关于计算属性,在Less官网中给的定义是这样的:

算术运算符 +、-、*、/ 可以对任何数字、颜色或变量进行运算。如果可能的话,算术运算符在加、减或比较之前会进行单位换算。计算的结果以最左侧操作数的单位类型为准。如果单位换算无效或失去意义,则忽略单位。无效的单位换算例如:px 到 cm 或 rad 到 % 的转换。

如果光看官网中的解释可能会有点抽象,在代码中诠释这段话的具体代码如下:

// 所有操作数被转换成相同的单位 @conversion-1: 5cm + 10mm; // 结果是 6cm @conversion-2: 2 - 3cm - 5mm; // 结果是 -1.5cm // conversion is impossible @incompatible-units: 2 + 5px - 3cm; // 结果是 4px // example with variables @base: 5%; @filler: @base * 2; // 结果是 10% @other: @base + @filler; // 结果是 15%

 

 

 



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有