Vue3之路--Less教学

2023-11-18

概览

Less (Leaner Style Sheets 的缩写) 是一门向后兼容的 CSS 扩展语言。这里呈现的是 Less 的官方文档(中文版),包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS 样式的 Less.js 工具。

因为 Less 和 CSS 非常像,因此很容易学习。而且 Less 仅对 CSS 语言增加了少许方便的扩展,这就是 Less 如此易学的原因之一。

变量(Variables)

无需多说,看代码一目了然:

@width: 10px;
@height: @width + 10px;

#header {
  width: @width;
  height: @height;
}

编译为:

#header {
  width: 10px;
  height: 20px;
}

了解关于变量的更多信息

混合(Mixins)

混合(Mixin)是一种将一组属性从一个规则集包含(或混入)到另一个规则集的方法。假设我们定义了一个类(class)如下:

.bordered {
  border-top: dotted 1px black;
  border-bottom: solid 2px black;
}

如果我们希望在其它规则集中使用这些属性呢?没问题,我们只需像下面这样输入所需属性的类(class)名称即可,如下所示:

#menu a {
  color: #111;
  .bordered();
}

.post a {
  color: red;
  .bordered();
}

.bordered 类所包含的属性就将同时出现在 #menu a 和 .post a 中了。(注意,你也可以使用 #ids 作为 mixin 使用。)

了解关于混合(Mixin)的更多信息

嵌套(Nesting)

Less 提供了使用嵌套(nesting)代替层叠或与层叠结合使用的能力。假设我们有以下 CSS 代码:

#header {
  color: black;
}
#header .navigation {
  font-size: 12px;
}
#header .logo {
  width: 300px;
}

用 Less 语言我们可以这样书写代码:

#header {
  color: black;
  .navigation {
    font-size: 12px;
  }
  .logo {
    width: 300px;
  }
}

用 Less 书写的代码更加简洁,并且模仿了 HTML 的组织结构。

你还可以使用此方法将伪选择器(pseudo-selectors)与混合(mixins)一同使用。下面是一个经典的 clearfix 技巧,重写为一个混合(mixin) (& 表示当前选择器的父级):

.clearfix {
  display: block;
  zoom: 1;

  &:after {
    content: " ";
    display: block;
    font-size: 0;
    height: 0;
    clear: both;
    visibility: hidden;
  }
}

了解有关夫选择器的详细信息

@规则嵌套和冒泡

@ 规则(例如 @media 或 @supports)可以与选择器以相同的方式进行嵌套。@ 规则会被放在前面,同一规则集中的其它元素的相对顺序保持不变。这叫做冒泡(bubbling)。

.component {
  width: 300px;
  @media (min-width: 768px) {
    width: 600px;
    @media  (min-resolution: 192dpi) {
      background-image: url(/img/retina2x.png);
    }
  }
  @media (min-width: 1280px) {
    width: 800px;
  }
}

编译为:

.component {
  width: 300px;
}
@media (min-width: 768px) {
  .component {
    width: 600px;
  }
}
@media (min-width: 768px) and (min-resolution: 192dpi) {
  .component {
    background-image: url(/img/retina2x.png);
  }
}
@media (min-width: 1280px) {
  .component {
    width: 800px;
  }
}

运算(Operations)

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

乘法和除法不作转换。因为这两种运算在大多数情况下都没有意义,一个长度乘以一个长度就得到一个区域,而 CSS 是不支持指定区域的。Less 将按数字的原样进行操作,并将为计算结果指定明确的单位类型。

@base: 2cm * 3mm; // 结果是 6cm

你还可以对颜色进行算术运算:

@color: #224488 / 2; //结果是 #112244
background-color: #112244 + #111; // 结果是 #223355

不过,Less 提供的 色彩函数 更有使用价值。

calc() 特例

Released v3.0.0

为了与 CSS 保持兼容,calc() 并不对数学表达式进行计算,但是在嵌套函数中会计算变量和数学公式的值。

@var: 50vh/2;
width: calc(50% + (@var - 20px));  // 结果是 calc(50% + (25vh - 20px))

转义(Escaping)

转义(Escaping)允许你使用任意字符串作为属性或变量值。任何 ~"anything" 或 ~'anything' 形式的内容都将按原样输出,除非 interpolation

@min768: ~"(min-width: 768px)";
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

编译为:

@media (min-width: 768px) {
  .element {
    font-size: 1.2rem;
  }
}

注意,从 Less 3.5 开始,可以简写为:

@min768: (min-width: 768px);
.element {
  @media @min768 {
    font-size: 1.2rem;
  }
}

在 Less 3.5+ 版本中,许多以前需要“引号转义”的情况就不再需要了。

函数(Functions)

Less 内置了多种函数用于转换颜色、处理字符串、算术运算等。这些函数在Less 函数手册中有详细介绍。

函数的用法非常简单。下面这个例子将介绍如何利用 percentage 函数将 0.5 转换为 50%,将颜色饱和度增加 5%,以及颜色亮度降低 25% 并且色相值增加 8 等用法:

@base: #f04615;
@width: 0.5;

.class {
  width: percentage(@width); // returns `50%`
  color: saturate(@base, 5%);
  background-color: spin(lighten(@base, 25%), 8);
}

参见:函数手册

命名空间和访问符

(不要和 CSS @namespace 或 namespace selectors 混淆了)。

有时,出于组织结构或仅仅是为了提供一些封装的目的,你希望对混合(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 形式
}

注意:如果不希望它们出现在输出的 CSS 中,例如 #bundle .tab,请将 () 附加到命名空间(例如 #bundle())后面。

映射(Maps)

从 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;
}

参见: 映射(Maps)

作用域(Scope)

Less 中的作用域与 CSS 中的作用域非常类似。首先在本地查找变量和混合(mixins),如果找不到,则从“父”级作用域继承。

@var: red;

#page {
  @var: white;
  #header {
    color: @var; // white
  }
}

与 CSS 自定义属性一样,混合(mixin)和变量的定义不必在引用之前事先定义。因此,下面的 Less 代码示例和上面的代码示例是相同的:

@var: red;

#page {
  #header {
    color: @var; // white
  }
  @var: white;
}

参见:懒加载

注释(Comments)

块注释和行注释都可以使用:

/* 一个块注释
 * style comment! */
@var: red;

// 这一行被注释掉了!
@var: white;

导入(Importing)

“导入”的工作方式和你预期的一样。你可以导入一个 .less 文件,此文件中的所有变量就可以全部使用了。如果导入的文件是 .less 扩展名,则可以将扩展名省略掉:

@import "library"; // library.less
@import "typo.css";
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Vue3之路--Less教学 的相关文章

  • 使用 WebEssentials 创建 LESS 源映射文件

    根据 WebEssential 日志 从 VS2013 版本 1 6 2014 年 1 月 2 日 开始支持 LESS 源映射 http vswebessentials com changelog http vswebessentials
  • 在 LESS mixin 中使用选择器名称作为变量

    我正在尝试在 LESS 中创建一个 mixin 它将使用它的选择器名称作为混合内部的变量 mixin 应该看起来像这样 但我找不到它的确切语法 或者是否可能 bg background image url images SELECTORNA
  • LESScss 将 rgba 转换为十六进制?如何将颜色变量嵌套到 mixin 中?

    LESScss 是否将所有 rgba 颜色转换为十六进制值 我正在尝试创建一个 mixin 例如 color 它允许您传入先前定义的颜色变量 并且我希望它位于 rgba 中 这是行不通的 但想法是这样的 bgcolor colorvaria
  • 将所有 less 文件编译到一个样式表中?

    我使用 simples 将项目拖入其中并将所有 less 文件定位到 styles css 问题是 编译较少的样式表时只是相互编写而不是合并在一起 编译时有没有办法将它们全部合并到 styles css 中 您必须创建一个导入子文件的主较少
  • Webpack / ES6:如何导入样式表

    我看到像 bootstrap 这样的存储库开始在它们的中包含额外的标签package json 文件 例如 style 和 less https github com twbs bootstrap blob v4 0 0 alpha 2 p
  • 如何在没有 CLI 的情况下在 Angular 组件中使用 less

    我有一个应用程序 我必须在其中配置和使用较少的内容来实现动态主题 问题是我们没有使用 angular cli 并且这里的配置有点奇怪 所以我们手动引导 Angular 模块 以下是应用程序的配置 包 json dependencies an
  • 如何在 webpack 中以正确的顺序导入样式

    我使用 bootstrap css 和一个用 less 编写的附加模板 我将两者导入到我的反应组件的根组件中 不幸的是 即使 less 文件是第二个导入的文件 引导程序中的样式也会推翻 less 样式 有没有办法确保 webpack 中样式
  • 无法使用 Web Compiler 2015 编译嵌套的 less 文件

    好吧 当我为 Visual Studio 2015 安装 Web Essentials 2015 时 我感到非常惊讶 因为它不再包含 less 编译器 Web Essentials 2015 不再包含捆绑和缩小 JS CSS 和 HTML
  • 如何在 Angular 2 中使用 Less?

    我想知道如何在我的 Angular 2 项目中添加更少的编译 因为每个组件都有自己的 css 文件 现在将是 less文件 我不确定如何使文件编译为 css 我也用谷歌搜索了这个问题 但没有找到任何解决我的问题的方法 EDIT为了让我的问题
  • 使用 LESS mixin 添加供应商前缀

    我收到此混合的语法错误 vendors statement statement moz statement webkit statement 任何方法都可以做到这一点 或者混合变量必须位于 a 的右侧 从 Less v2 开始 你可以使用自
  • 通过 less 生成 CSS 组

    是否能够创建这样一个生成CSS组的mixin 我将在下面解释我的意思 fancymixin max prefix content what I don t know how to code fancymixin 10 x 它会生成类似以下内
  • 使用 LESS 将样式应用于子元素

    这有效 layoutList background color CFCFCF layoutList gt entityCard hover background color FFFFFF border 1px solid yellow 为什
  • Symfony 2 如何从另一个包导入 LESS 文件

    LESS 具有 import 其他 LESS 文件的能力 这个问题旨在找到一种解决方案 从 Symfony 项目中的另一个 Bundle 导入 LESS 文件中的 LESS 文件 我正在开发一个 Symfony2 项目 使用 LESS 和
  • 有没有一个插件可以在我的网页中显示 HTML 代码

    我想在我的页面中显示大块 LESS 文件 我希望它看起来尽可能漂亮 以便看到它的用户能够轻松阅读 stackoverflow 让我像这样显示它 例如 header color red div myClass color blue 但是有没有
  • 终端中的 LESS css 编译器帮助

    我使用 Ubuntu 13 04 Linux 我已经安装了node和npm 使用 npm 我通过终端下载的内容更少 我在我的简单 HTML CSS 项目中使用了它 纯前端 它不是 Ruby 或 Nodejs 项目 当我这样做时 lessc
  • ASP MVC Less 文件给出: 调用目标已引发异常

    我有一个简单的 asp net mvc 4 站点 使用较少的文件 当我在本地电脑上运行它时 它工作正常 但是当我将其发布到服务器时 我收到以下错误 During the output text content of processed as
  • Webpack 2 的语义 UI 问题

    一直在努力使用 Webpack 2 进行语义 ui 设置 我遇到了一些与默认语义 ui 主题中的字体相关的错误 以及另一个关于image webpack loader ERROR in css loader lessPlugins opti
  • LessCSS 中的 @media 和 @font-face 支持

    你好 有谁知道如何使用 LessCSS 进行媒体查询吗 media screen and max width 600px container width 480px 给我以下错误 Syntax Error on line 23 expect
  • Webpack 4 with Less 和 MiniCssExtractPlugin 使用条目

    我的应用程序中的样式结构如下 应用 css bootstrap boostrap less gt has import another less another less common common less entries bootstr
  • LESS CSS 语法对现代化很有用

    通常我使用现代化 http modernizr com 了解浏览器的功能 同时 我用LESS CSS http lesscss org 使我的CSS更具可读性和可维护性 使用 LESS 嵌套规则的常见样式如下所示 header color

随机推荐

  • Linux系统shell脚本之检测两台服务器指定目录下的文件一致性

    Linux系统shell脚本之检测两台服务器指定目录下的文件一致性 一 脚本要求 二 脚本内容 三 测试设置 1 server1创建文件 2 server2创建文件 3 配置ssh免密 四 执行脚本 一 脚本要求 检测两台服务器指定目录下的
  • 安装 Debian10 提示缺少 bnx2/bnx2-mips-06-6.2.3.fw

    安装过程中报错 提示缺少文件 如果跳过 配置网络报错 安装好后网络是配置好的 但是插上网线状态一直是down 处理过程 下载firmware bnx2 20161130 5 deb8u1 all deb u盘拷贝到debian dpkg i
  • 【基础算法】简单了解一下常见的几种散列算法?

    简单了解一下常见的几种散列算法 如果觉得对你有帮助 能否点个赞或关个注 以示鼓励笔者呢 博客目录 先点这里 前提概念 好的哈希函数 MD5 与 SHA MD5 SHA 家族 CRC MurmurHash times31 33 times33
  • QML的基本使用:建立一个简单得窗口以及一些属性的基本使用

    QML得基本使用 建立一个简单得窗口弹出式对话框 QML的基本使用之有标题栏和无标题栏的区别 首先本人使用的Qt版本是6 3 2因为公司做项目就是用的这个版本所以如果你使用的版本不一样 请自行对代码进行转换 本人建议如果版本不一样 可以通过
  • HarmonyOS应用开发者高级认证练习题

    系列文章目录 HarmonyOS应用开发者基础认证练习题 HarmonyOS应用开发者高级认证练习题 文章目录 系列文章目录 前言 一 判断 二 单选 三 多选 前言 本文所有内容来源于个人进行HarmonyOS应用开发者系列认证的学习过程
  • 3、设置IP地址:节点名

    1 vi空格 etc hosts 点击回车 2 删除当前页面内容后编辑 192 168 空格hadoop1 192 168 空格hadoop2 192 168 空格hadoop3 3 Esc wq 保存退出 是强制退出
  • 无线组网168元的4G路由器真实价值多少?蒲公英4G路由器X4C测评

    4G路由器 看不上 觉得有网线为什么还要4G 就好比无线鼠标和有线鼠标 我肯定选有线鼠标 低延迟先不说 还不需要充电 一样的道理4G有宽带稳定 速度快吗 但是回家过了趟年就有了改观 关在家里两个月 还没有网 只能靠手机打发时间 难受香菇 还
  • serverTimezone

    今天第一次写springboot的时候遇到了这个问题 页面一直刷新不出来 显示url有问题 后来发现在url后面加上 serverTimezone GMT即可 spring datasource url jdbc mysql 127 0 0
  • pandas基本操作3

    字典转DataFrame出错 ValueError If using all scalar values you must pass an index 使用DataFrame columns 初始化并结合使用df append 字典 增加行
  • hadoop集群出现两个datanode节点互相排斥的情况解决

    我明明配置了3个节点的datanode 但是在 http mini2 50070 dfshealth html tab overview 的管理界面了只看到两天存活 Live Nodes 为 2 Dead Nodes 为 0 我想就算有一台
  • Montreal Forced Aligner (MFA)安装教程&失败原因集合

    写在前面 本文章只考虑2 x版本以后的安装时遇到的问题 推荐大家看官方的安装教程 里面设计不同系统 不同场景的安装方式 官网安装教程地址 https montreal forced aligner readthedocs io en lat
  • 出现( linker command failed with exit code 1)错误总结

    这种问题 通常出现在添加第三方库文件或者多人开发时 这种问题一般是找不到文件而导致的链接错误 我们可以从如下几个方面着手排查 1 以如下错误为例 如果是多人开发 你同步完成后发现出现如下的错误 Undefined symbols for a
  • ABAP DOI详解

    导语 DOI是SAP与Office集成的一种技术 是早期OLE的升级版本 把Excel嵌套在程序当中进行展示 需要提前上传模板 在Excel模板中 可以事先设计好公式 在SAP将数据写入Excel中之后会自动用公式进行计算 对于习惯于用Ex
  • [Android] 拍照、截图、保存并显示在ImageView控件中

    最近在做Android的项目 其中部分涉及到图像处理的内容 这里先讲述如何调用Camera应用程序进行拍照 并截图和保存显示在ImageView控件中以及遇到的困难和解决方法 PS 作者购买了本 Android第一行代码 著 郭霖 参照里面
  • python程序里一定要有一个主函数吗_Python 为什么没有 main 函数?为什么我不推荐写 main 函数?...

    在开始正题之前 先要来回答这两个问题 所谓的 main 函数 是指什么 为什么有些编程语言需要强制写一个 main 函数 某些编程语言以 main 函数作为程序的执行入口 例如 C C C Java Go 和 Rust 等 它们具有特定的含
  • JS属性defer

    JS属性defer 利用defer属性 让浏览器读js脚本的时候完全不等脚本 就开始读取图片和html代码 给外链JS脚本添加defer true
  • Android源码分析 - Framework层的ContentProvider全解析

    开篇 本篇以android 11 0 0 r25作为基础解析 在四大组件中 可能我们平时用到最少的便是ContentProvider了 ContentProvider是用来帮助应用管理其自身和其他应用所存储数据的访问 并提供与其他应用共享数
  • Rocky9.2 第一次配置virtualbox报错Kernel driver not installed (rc=-1908)

    完整报错信息如下 Kernel driver not installed rc 1908 The VirtualBox Linux kernel driver is either not loaded or not set up corre
  • PDF文件转化成mobi格式,亲测kindle或者iReader可用!

    convertfiles 点击连接 然后选择要转换的文件 比如我的是MySQL的 选择输入文件和输出文件的格式 转换 对了记得输入邮箱号码 转化完毕会发送连接到邮箱提供下载 或者 网络流畅的情况下转化完毕会自动重定向到下载页面
  • Vue3之路--Less教学

    概览 Less Leaner Style Sheets 的缩写 是一门向后兼容的 CSS 扩展语言 这里呈现的是 Less 的官方文档 中文版 包含了 Less 语言以及利用 JavaScript 开发的用于将 Less 样式转换成 CSS