CSS预处理器-Less

这篇具有很好参考价值的文章主要介绍了CSS预处理器-Less。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、什么是less

       ~~~~~~       Less(Leaner Style Sheets 精简样式表) 是一种动态样式语言,属于 css 预处理器的范畴,它扩展了 CSS 语言,增加了变量、Mixin、函数等特性,使 CSS 更易维护和扩展,Less 既可以在 客户端 上运行 ,也可以借助 Node.js 在服务端运行。
Less 编译工具:

  • Koala(opens new window)
  • vscode 的 Easy LESS 插件

二、基本使用

2.1 基本语法

  • 多行注释保留
  • 单行注释不被保留在编译生成的 CSS 中
  • @ 声明变量,作为普通属性值使用
/*
多行注释保留
*/
// 单行注释不被保留在编译生成的 CSS 中
@width:100px;
.outer{
    width: @width+100px;
    height: @width+100px;
    border: 1px solid red;
    .inner{
        margin: 0 auto;
        margin-top: 50px;
        width: 50px;
        height: 50px;
        background-color: orange;
    }
}

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <link rel="stylesheet" type="text/css" href="../css/01.css"/>
</head>
<body>
    <div class="outer">
        <div class="inner"></div>
    </div>
</body>
</html>

2.2 变量插值

  • 变量用于选择器名、属性名、URL、@import语句
/*
变量用于选择器名、属性名、URL、@import语句
*/
@selector:outer;
// 需要添加 {}
.@{selector}{
    height: 200px;
    width: 200px;
    background-color: orange;
}

@property: color;

.widget {
  @{property}: #0ee;
  background-@{property}: #999;
}
@images: '../img';

// Usage
body {
  color: #444;
  background: url('@{images}/white-sand.png');
}

@themes: '../../src/themes';

// Usage
@import '@{themes}/tidal-wave.less';

2.3 延迟加载

当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。

//当一个变量被声明多次,会取最后一次的值,并从当前作用域往外寻找变量。
@var:0;
.outer{
    @var:1px;
    .inner{
        @var:2px;
        height: 200px;
        width: 200px;
        background-color: orange;
        border: @var solid black;
        @var:3px;
    }
    width: 300 * @var;
    height: 300 * @var;
}

.outer {
  width: 300px;
  height: 300px;
}
.outer .inner {
  height: 200px;
  width: 200px;
  background-color: orange;
  border: 3px solid black;
}

2.4 属性名变量

您可以很容易地将属性看作是使用$prop语法的变量

// 您可以很容易地将属性看作是使用$prop语法的变量
.outer{
    width: 200px;
    height: @width;
    border: 1px solid black;
}

2.5 嵌套

Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力

//Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力
.outer{
    width: 200px;
    height: 200px;
    border: 1px solid black;
    @width:50px;
    @height:50px;
    .inner1{
        width: @width;
        height: @height;
        background-color: orange;
    }
    .inner2{
        width: @width;
        height: @height;
        background-color: red;
    }
}

2.6 父选择器

在嵌套规则中, & 表示父选择器,常用于给现有选择器添加伪类。

//在嵌套规则中, &表示父选择器,常用于给现有选择器添加伪类。
// 如果没有 &,会被编译成后代选择器 .inner1 :hover。
.outer{
    width: 200px;
    height: 200px;
    border: 1px solid black;
    margin: 0 auto;
    position: relative;
    .inner1{
        width: 100px;
        height: 100px;
        background-color: orange;
        transition: 0.2s linear;
        position: absolute;
        top: 50px;
        left: 50px;
        &:hover{
            box-shadow: 0 0 20px black;
        }
    }
}

如果没有 &,会被编译成后代选择器 a :hover。

除此之外,& 还能用于生成重复类名:

//除此之外,& 还能用于生成重复类名:
.box{
    &-demo{
        width: 200px;
        height: 200px;
        background-color: red;
    }
}

三、混合

3.1 普通混合

混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴

//混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方式,可理解为复制粘贴。
.test{
    width: 100px;
    height: 100px;
    background-color: orange;
}
.outer{
    width: 200px;
    height: 200px;
    border: 1px solid black;
    .inner1{
        .test()
    }
}
.test {
  width: 100px;
  height: 100px;
  background-color: orange;
}
.outer {
  width: 200px;
  height: 200px;
  border: 1px solid black;
}
.outer .inner1 {
  width: 100px;
  height: 100px;
  background-color: orange;
}

3.2 带参数的混合

  1. 混合带参数,参数需要按顺序传递
    //1.混合带参数,参数需要按顺序传递
    .border1(@width,@style,@color){
        border: @width @style @color;
    }
    .outer{
        width: 200px;
        height: 200px;
        .border1(1px,solid,black);
    }
    
    .outer {
      width: 200px;
      height: 200px;
      border: 1px solid black;
    }
    
  2. 混合带参数并有默认值
    需注意的是,就算有默认值,也要按顺序传递
//2.混合带参数并有默认值
.border2(@width:2px,@style,@color:red){
    border: @width @style @color;
}
.outer{
    .inner1{
        width: 100px;
        height: 100px;
        .border2(1px,solid);
    }
}

3.3 命名参数

可以在向混合传参是指定参数名称,从而不需要按顺序传入

//可以在向混合传参时指定参数名称,从而不需要按顺序传入
.border1(@width:2px,@style,@color){
    border: @width @style @color;
}
.outer{
    width: 200px;
    height: 200px;
    .border1(@style:solid,@color:black);
}

3.4 @arguments 变量

@arguments 变量包含了传入的所有参数

//@arguments 变量包含了传入的所有参数
.box-shadow(@x: 0, @y: 0, @blur:20px, @color: #000){
    box-shadow: @arguments;
}
.outer{
    height: 200px;
    width: 200px;
    border: 1px solid black;
    .box-shadow(0,0,@color:red);
}

3.5 匹配模式

在多个相同的混合中(参数个数必须相同),匹配特定的混合。

.mixin(dark, @color) {
  color: darken(@color, 10%);
}
.mixin(light, @color) {
  color: lighten(@color, 10%);
}
// @_ 表示匹配所有
.mixin(@_, @color) {
  display: block;
}

@switch: light;

.class {
  .mixin(@switch, #888);
}

.class {
  color: #a2a2a2;
  display: block;
}

四、运算

计算结果以操作数最左侧的单位类型为准

//计算结果以操作数最左侧的单位类型为准
@conversion-1: 5cm + 10mm; // 6cm
@conversion-2: 2 - 3cm - 5mm; // -1.5cm
@conversion-3: 3.1 * 2cm; // 6.2cm
@conversion-4: 4px / 2; // 4px / 2

// conversion is impossible
@incompatible-units: 1cm - 1px; // 0.97354167cm

// example with variables
@base: 5%;
@filler: @base * 2; // 10%
@other: @base + @filler; // 15%

@color: #224488 / 2; // #112244

body{
    background-color: #112244 + #111; // #223355
}

五、继承

5.1 继承格式

继承可让多个选择器应用同一组属性,最终编译为并集选择器
其性能比混合高,但灵活性比混合低

/*
继承可让多个选择器应用同一组属性,最终编译为并集选择器
其性能比混合高,但灵活性比混合低
*/
.inner1{
    &:extend(.inner);
    background-color: orange;
}
.inner{
    width: 50px;
    height: 50px;
}

.inner1 {
  background-color: orange;
}
.inner,
.inner1 {
  width: 50px;
  height: 50px;
}

5.2 继承all

可理解为把 all 前的选择器出现的地方全都替换为 extend 前的选择器
即把 .test 替换为 .replacement 生成一个新的选择器应用样式,且不破坏原有的选择器

/*
可理解为把 all 前的选择器出现的地方全都替换为 extend 前的选择器
即把 .test 替换为 .replacement 生成一个新的选择器应用样式,且不破坏原有的选择器
*/
.box.inner1{
    width: 200px;
    height: 200px;
    background-color: orange;
}
.inner2:extend(.inner1 all){

}
.box.inner1,
.box.inner2 {
  width: 200px;
  height: 200px;
  background-color: orange;
}

六、避免编译

通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中

//通过加引号可以避免 Less 编译,直接把内容输出到 CSS 中
.outer{
    width: '200px + 100px';
    height: 200px;
    background-color: orange;
}
.outer {
  width: '200px + 100px';
  height: 200px;
  background-color: orange;
}

七、命名空间和访问符

有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(mixins)进行分组。你可以用 Less 更直观地实现这一需求。假设你希望将一些混合(mixins)和变量置于 #bundle 之下,为了以后方便重用或分发:

#bundle() {
  .button {
    display: block;
    border: 1px solid black;
    background-color: grey;
    &:hover {
      background-color: white;
    }
  }
  .tab { ... }
  .citation { ... }
}

现在,如果我们希望把 .button 类混合到 #header a 中,我们可以这样做:

#header a {
  color: orange;
  #bundle.button();  // 还可以书写为 #bundle > .button 形式
}

八、映射

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

#colors() {
  primary: blue;
  secondary: green;
}

.button {
  color: #colors[primary];
  border: 1px solid #colors[secondary];
}
.button {
  color: blue;
  border: 1px solid green;
}

learn more文章来源地址https://www.toymoban.com/news/detail-666954.html

到了这里,关于CSS预处理器-Less的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 拥抱简洁:探索Stylus的简洁语法与CSS预处理器之美

    Stylus 是一种 CSS 预处理器,具有以下十大特点: Stylus 使用类似于 Python 的缩进风格的语法,可以省略大括号和分号,使代码更加简洁易读。 当涉及到Stylus的简洁语法时,以下是一个实际的代码案例来展示其特点: 在这个例子中,我们可以看到 Stylus 的简洁语法。它省略了大

    2024年02月12日
    浏览(81)
  • Less预处理器教程

    less官方文档 lesscss.org/ less中文文档 less.bootcss.com/ less是一种css预处理器,它扩展了css语言,提供了变量、嵌套、混合、运算等功能,使样式表的编写更加灵活和高效,用来书写css的工具。 通俗的说,less是一种专门编写css代码的语言(工具),通过less来编写css代码变得更灵活,

    2024年02月21日
    浏览(47)
  • Less预处理——继承、导入、条件表达式和函数

    1、extend 的使用 extend 是 Less 的一个伪类,它可继承所匹配声明中的全部样式 index.less 文件 index.css 文件 自动转义后的 css 文件内容如下 2、all 全局搜索替换 使用选择器匹配到的全部声明 index.less 文件 index.css 文件 自动转义后的 css 文件内容如下 3、减少代码的重复性

    2024年02月20日
    浏览(50)
  • 前端三大Css处理器之Less

    Less是Css预处理器之一,分别有Sass、Less、Stylus这三个。         Less https://lesscss.org/         Less 是用JavaScript编写的,事实上,Less是一个JavaScript库,他通过混合、变量、嵌套和规则设置循环扩展了原生普通Css的功能。 Less的少数缺点之一是它 不支持函数 。 Less的语法与Scss十

    2024年02月10日
    浏览(48)
  • less预处理语言的运用之-变量拼接那点事

    less语法的技巧总结,很基础,熟练掌握后能提高我们在大型项目中的开发效率 递归 less连接符与import 关注我的个人公众号,获取更多前后端开发经验知识

    2024年02月16日
    浏览(75)
  • 前端:css less语法 /deep/ 深度影响的用法

    css中通常会在 style 标签内添加 scoped 来避免父组件对子组件的影响,添加了之后只能修改当前组件的样式。 这样做的原理是通过在打包的时候给每个样式都添加一个独一无二的hash值,从而避免父组件对子组件的样式的影响。 添加后控制台显示的样式就会像这样:     设置

    2024年02月12日
    浏览(45)
  • 前端css/less绕椭圆轨道旋转动画 带遮挡效果 3D

    效果如图,多个物体在轨道上绕中心物体旋转,当旋转到物体后面时将被遮挡。主要使用css实现,为了简化代码,引入less进行处理。 本质上是使用动画控制轨道带动内部的物体进行旋转,计算出每个物体在椭圆轨道上的位置,使用绝对定位放置物体。由于轨道上物体有多个

    2024年02月03日
    浏览(91)
  • 【前端面经】CSS-less/sass/scss的区别和基本使用

    随着Web开发的不断发展,CSS预处理器变得越来越流行。它们为Web开发者提供了一种更高效、更简便的CSS编写方式。Less、Sass以及SCSS作为最受欢迎的三种CSS预处理器,它们都为CSS编写提供了不同的特点和功能。 在本篇博客中,我们将会探讨这三种预处理器之间的区别以及它们的

    2024年02月06日
    浏览(58)
  • 前端实现动态切换主题色-使用 css/less 动态更换主题颜色(换肤功能)或通过单击更改背景颜色

    提示: 以下是本篇文章正文内容,主要描述 使用 css/less 动态更换主题色(换肤功能) 提示: 使用 css/less 动态更换主题色(换肤功能), 方法共通,不限制技术栈: 其实在日常项目开发中经常会遇到有些用户想要一些自定义的的主题色来满足不同的视觉需求,这时候就需

    2024年02月15日
    浏览(66)
  • CSS样式前端HTML页面常用CSS效果实现及其相关配置信息------前端入门基础教程

    !DOCTYPE html !-- 这是HTML的注释 -- html lang=\\\"en\\\" id=\\\"myHtml\\\"     head         !-- 这里不是设置了编码,而是告诉浏览器,用什么编码方式打开文件避免乱码 --         meta charset=\\\"UTF-8\\\"         meta name=\\\"viewport\\\" content=\\\"width=device-width, initial-scale=1.0\\\"         titleHtmlAll/title         

    2024年02月05日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包