全网最详细的less教程(为什么使用less和less的语法)以及 解决css的兼容性问题,并解决NameError: variable ## is undefined的问题

本文主要是介绍全网最详细的less教程(为什么使用less和less的语法)以及 解决css的兼容性问题,并解决NameError: variable ## is undefined的问题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

目录

  • 1. 为什么使用less
    • 1.1 CSS的兼容性问题
    • 1.2 解决兼容性问题
  • 2. less简介
  • 3. 如何使用less
    • 3.1 安装less
    • 3.2 less编译
    • 3.3 less基本语法
    • 3.4 less语言拓展
  • 4. 问题

1. 为什么使用less

1.1 CSS的兼容性问题

在这里插入图片描述
我们现在想使用css原生设置变量的方式,来设置三个div不同属性的相同颜色,都是绿色,如上图所示。

假设三个div的id分别是div1 div2 div3

  • div1:边框为绿色
  • div2:字体为绿色
  • div3:背景框为绿色

因而,实现的代码如下:

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>CSS的兼容性问题</title><style type="text/css">/*设置颜色变量*/html {--color:green;}/*边框定义绿色*/#div1 {width: 50px;height: 50px;border: 1px solid var(--color);}/*设置字体为绿色*/#div2 {width: 50px;height: 50px;color: var(--color);}/*背景定义为绿色*/#div3 {width: 50px;height: 50px;background-color: var(--color);}</style>
</head>
<body><div id="div1"></div>
<div id="div2">这是div2</div>
<div id="div3"></div></body>
</html>

但是,我们如果将这段代码,使用ie浏览器打开,便是这样的:
在这里插入图片描述
ie直接报出兼容性的问题,而且如上样式也没有显示出来。

因而,CSS原生的设置变量会存在兼容性问题。

1.2 解决兼容性问题

我们可以通过less语言来解决上诉兼容性问题。

通过less代码生成CSS代码之后,使用ie浏览器打开,如下图所示:

在这里插入图片描述

2. less简介

  1. less官网

    • 中文:https://less.bootcss.com/

    • 英文:https://lesscss.org/

  2. 何谓less

less是一门css预处理语言:

  • 通过less可以编写更少的代码实现更强大的样式。

  • less中添加了许多的新特性,像对变量的支持,对mixin的支持… …

  • less的语法大体上与css语法一致,但是less中增添了许多对css的扩展

但是,浏览器无法直接执行less代码。要执行必须将less样式转换为css,然后再由浏览器执行。

3. 如何使用less

3.1 安装less

npm install less -g

-g 参数表示将lessc命令安装到全局环境。

对于特定版本(或 tag),你可以在软件包(package)名称后面添加 @VERSION ,例如:

 npm install less@2.7.1 -g

如果你的电脑出现 npm 不是内部或外部命令等错误,也就是说你的电脑没有安装node,此时你需要安装node

3.2 less编译

我们不能直接使用less文件,需要将less文件编译成css文件,如下代码所示:

D:\project\1myProject\bloghtml\less>lessc test.less test.css

使用外链的方式引入到html文件中,如下代码所示:

在这里插入图片描述

3.3 less基本语法

  1. 注释

css注释外,less还支持//注释

  1. 变量

less可以像js一样声明变量,如下所示:

//声明
@width: 10px;//在属性值中使用变量
#header {width:@width;
}==== 插值语法 ====
//选择器中使用变量
@my-selector: banner;.@{my-selector} {width:100px;
}//URL中使用变量
@images: "../img";body {background:url("@{images}/white-sand.png");
}
  1. 作用域

js一样,less变量向父级作用域查找,如下所示:

@var: red;#page {@var: white;#header {color: @var; // white}
}
  1. 导入外部less(@import)
@import "lib.less";
@import "lib";
  1. 嵌套(nesting)

嵌套是一种简写css选择器的方法

//嵌套将会将父级和祖级元素添加到前面
#header {color:black;.logo {   //等同于#header .logocolor:red; tr {     //等同于#header .logo trcolor:yellow;}}
}
  1. 父级选择器

less通过&简写父级选择器

a {color:blue;&:hover {        //等同于 a:hovercolor:green;}& + & {  // a + acolor:white;}&-children {  // a-childrencolor:black;}
}
  1. 冒泡

针对媒体查询,这样同样的样式就不用复写了。

.component {width:300px;color:white;@media (min-width: 768px) {  // 等于复写一个@media>.component,已有的color属性将写入,width将覆盖width:600px;}
}
  1. 运算

    • less支持+,-,*,/运算,基本同js

    • 属性值的单位将参与换算,如果12px+12px = 24px

    • 当单位无法换算时,取消单位计算,比如12em+12px = 24

  2. 转义

转义中的文字将会原样输出,不会进行计算和转化

//less 3.5以下版本
@data: ~"min-width:640px";//less 3.5+
@min768: (min-width: 768px);

3.4 less语言拓展

  1. Mixins混入样式

Mixin将一个样式集,“混入”另一个样式中,主要是方便简写复用属性

.borderd {border-top:2px;
}
#main a {color:white;.borderd();   //border-top:2px
}
  1. 带参数的混入样式
.border-radius(@radius){border-radius:@radius;
}//调用
header {.border-radius(4px);  //border-radius: 4px;
}
  1. 参数可带默认值,可多个,可覆盖和@arguments
.border-radius (@radius: 5px,@color:yellow) {....//@arguments 变量包含所有参数的值
}
//调用
header {.border-radius; //直接调用.border-radius(2px) //部分覆盖}
  1. 不带参数(隐藏混入)
// 集合将被隐藏,不会暴露到css中
.wrap(){text-wrap:wrap;    
}//调用
pre {.wrap
}
  1. 命名空间

命名空间用于在某一样式下声明的mixin,这样可以和其他mixin区分开

.bundle {mixin(){...}
}//调用
.bundle>mixin()
  1. 模式匹配的混合样式
//我们可以给多个样式匹配同一指定
.mixin (dark, @color) {  //只接受dark为首参color: darken(@color, 10%);
}
.mixin (light, @color) {  //只接受light为首参color: lighten(@color, 20%);
}
.mixin (@_, @color) {  //接受任意值display: block;
}
  1. 样式继承(Extend)
.inline{width:100px;
}nav ul {&:extend(.inline);color:white;
}
  1. 样式合并(merge)
  • 逗号合并(使用+)

.myfunc() {box-shadow+: 5px 5px 5px grey;
}
.class {.myfunc();box-shadow+: 0 0 5px #f78181;
}
//  结果box-shadow: 5px 5px 5px grey, 0 0 5px #f78181;
  • 空格合并(使用 + 或 +_)
.mixin() {transform+_: scale(1);
}
.class {.mixin();transform+_: rotate(2deg);
}
//结果:  transform: scale(1) rotate(2deg);
  1. 导引(Guards)

导引类似条件判断,less通过导引混合而非if/else语句来实现条件判断,因为前者已在@media query特性中被定义。

.mixin (@a) when (lightness(@a) >= 50%) {   //后面的运算为true值,则应用样式background-color: black;
}.mixin(#ddd); //导引中可用的全部比较运算有: >, >=, =, =<, <。,
//注意a=b,等同于js中a==b
//此外,关键字true只表示布尔真值,除去关键字true以外的值都被视示布尔假
//使用not关键字表示非//导引序列使用逗号‘,’—分割,表示&&
.mixin (@a) when (@a > 10), (@a < -10) { ... }//参数比较运算
.max (@a, @b) when (@a > @b) { width: @a }//is*函式检验是否为某数据类型
.mixin (@a) when (isnumber(@a)) and (@a > 0) { ... }//CSS Guards()
.style when (@usedScope=mixin)
  1. 循环

通过导引来实现循环语句

.cont(@count) when (@count > 0) {.cont((@count - 1));width: (25px * @count);
}
div {.cont(7);
}
  1. 映射(Maps)

Less 3.5 版本开始,你还可以将混合(mixins)和规则集(rulesets)作为一组值的映射(map)使用。

#colors() {primary: blue;secondary: green;
}.button {color: #colors[primary];border: 1px solid #colors[secondary];
}
  1. JavaScript表达式引入

less引入js很简单,只需要反引号:

//使用反引号表示
@var: `"hello".toUpperCase() + '!'`;
  1. 内置函数

函数手册

@width: 0.5;
percentage(@width); //50%

例:color函数

lighten(@color, 10%);     // return a color which is 10% *lighter* than @color
darken(@color, 10%);      // return a color which is 10% *darker* than @colorsaturate(@color, 10%);    // return a color 10% *more* saturated than @color
desaturate(@color, 10%);  // return a color 10% *less* saturated than @colorfadein(@color, 10%);      // return a color 10% *less* transparent than @color
fadeout(@color, 10%);     // return a color 10% *more* transparent than @color
fade(@color, 50%);        // return @color with 50% transparencyspin(@color, 10);         // return a color with a 10 degree larger in hue than @color
spin(@color, -10);        // return a color with a 10 degree smaller hue than @colormix(@color1, @color2);    // return a mix of @color1 and @color2

例:Math 函数

round(1.67); // returns `2`
ceil(2.4);   // returns `3`
floor(2.6);  // returns `2`
percentage(0.5); // returns `50%`

4. 问题

在编码时遇到的如是问题:NameError: variable ## is undefined

  1. 复现问题

这个问题是在将less编译成CSS报出的错误,比如NameError: variable @color is undefined,即变量@color未定义。如下文字所示:

D:\project\my\ts\less>lessc less解决CSS兼容性问题.less
NameError: variable @color is undefined in D:\project\my\ts\less\less解决CSS兼容性问题.less on line 8, column 21:
7   height: 50px;
8   border: 1px solid @color;
9 }
  1. 分析问题

那么如何解决呢?因为,我在定义@clolor变量时,没有在结尾处写结束符号,即;,如下截图所示:

在这里插入图片描述

  1. 解决问题

只要在@color:green加上分号即可,如@color:green;

这篇关于全网最详细的less教程(为什么使用less和less的语法)以及 解决css的兼容性问题,并解决NameError: variable ## is undefined的问题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/541451

相关文章

解决Java异常报错:java.nio.channels.UnresolvedAddressException问题

《解决Java异常报错:java.nio.channels.UnresolvedAddressException问题》:本文主要介绍解决Java异常报错:java.nio.channels.Unr... 目录异常含义可能出现的场景1. 错误的 IP 地址格式2. DNS 解析失败3. 未初始化的地址对象解决

C#实现访问远程硬盘的图文教程

《C#实现访问远程硬盘的图文教程》在现实场景中,我们经常用到远程桌面功能,而在某些场景下,我们需要使用类似的远程硬盘功能,这样能非常方便地操作对方电脑磁盘的目录、以及传送文件,这次我们将给出一个完整的... 目录引言一. 远程硬盘功能展示二. 远程硬盘代码实现1. 底层业务通信实现2. UI 实现三. De

使用Vue-ECharts实现数据可视化图表功能

《使用Vue-ECharts实现数据可视化图表功能》在前端开发中,经常会遇到需要展示数据可视化的需求,比如柱状图、折线图、饼图等,这类需求不仅要求我们准确地将数据呈现出来,还需要兼顾美观与交互体验,所... 目录前言为什么选择 vue-ECharts?1. 基于 ECharts,功能强大2. 更符合 Vue

如何合理使用Spring的事务方式

《如何合理使用Spring的事务方式》:本文主要介绍如何合理使用Spring的事务方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍1.1、底层构造1.1.事务管理器1.2.事务定义信息1.3.事务状态1.4.联系1.2、特点1.3、原理2. Sprin

Vue中插槽slot的使用示例详解

《Vue中插槽slot的使用示例详解》:本文主要介绍Vue中插槽slot的使用示例详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友参考下吧... 目录一、插槽是什么二、插槽分类2.1 匿名插槽2.2 具名插槽2.3 作用域插槽三、插槽的基本使用3.1 匿名插槽

springboot+vue项目怎么解决跨域问题详解

《springboot+vue项目怎么解决跨域问题详解》:本文主要介绍springboot+vue项目怎么解决跨域问题的相关资料,包括前端代理、后端全局配置CORS、注解配置和Nginx反向代理,... 目录1. 前端代理(开发环境推荐)2. 后端全局配置 CORS(生产环境推荐)3. 后端注解配置(按接口

使用WPF实现窗口抖动动画效果

《使用WPF实现窗口抖动动画效果》在用户界面设计中,适当的动画反馈可以提升用户体验,尤其是在错误提示、操作失败等场景下,窗口抖动作为一种常见且直观的视觉反馈方式,常用于提醒用户注意当前状态,本文将详细... 目录前言实现思路概述核心代码实现1、 获取目标窗口2、初始化基础位置值3、创建抖动动画4、动画完成后

Vue 2 项目中配置 Tailwind CSS 和 Font Awesome 的最佳实践举例

《Vue2项目中配置TailwindCSS和FontAwesome的最佳实践举例》:本文主要介绍Vue2项目中配置TailwindCSS和FontAwesome的最... 目录vue 2 项目中配置 Tailwind css 和 Font Awesome 的最佳实践一、Tailwind CSS 配置1. 安

PyQt5 QDate类的具体使用

《PyQt5QDate类的具体使用》QDate是PyQt5中处理日期的核心类,本文主要介绍了PyQt5QDate类的具体使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价... 目录核心功能常用方法及代码示例​1. 创建日期对象​2. 获取日期信息​3. 日期计算与比较​4. 日

Go语言使用slices包轻松实现排序功能

《Go语言使用slices包轻松实现排序功能》在Go语言开发中,对数据进行排序是常见的需求,Go1.18版本引入的slices包提供了简洁高效的排序解决方案,支持内置类型和用户自定义类型的排序操作,本... 目录一、内置类型排序:字符串与整数的应用1. 字符串切片排序2. 整数切片排序二、检查切片排序状态: