Less 语法快速入坑

栏目: Html · 发布时间: 6年前

内容简介:注:本文适合前端新手或 scss 转 less 的开发者阅读,当然如果你是老司机也欢迎给我一些指点:blush:声明变量用Outputs

注:本文适合前端新手或 scss 转 less 的开发者阅读,当然如果你是老司机也欢迎给我一些指点:blush:

变量

声明变量用 @ 符号

@nice-blue: #5B83AD;
#header {
  color: @light-blue;
}

Outputs

#header {
  color: #5B83AD;
}

嵌套语法

less 与 scss 基本一致

.clearfix {
  display: block;
  zoom: 1;

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

指令属性冒泡

嵌套在选择器中的指令会冒泡到最外层去,@media, @supports 以及 @document 指令会将选择器规则与指令的规则进行合并,而 @keyframe, @font-face 则会单独分开。看例子:

.screen-color {
  @media screen {
    color: green;
    @media (min-width: 768px) {
      color: red;
    }
  }
  @media tv {
    color: black;
  }
}

#a {
  color: blue;
  @font-face {
    src: made-up-url;
  }
  padding: 2px;
}

Outputs

@media screen {
  .screen-color {
    color: green;
  }
}
@media screen and (min-width: 768px) {
  .screen-color {
    color: red;
  }
}
@media tv {
  .screen-color {
    color: black;
  }
}
#a {
  color: blue;
  padding: 2px;
}
@font-face {
  src: made-up-url;
}

操作符

支持 + - * /

计算结果的单位由最左边的单位决定,定为“结果单位”。后面的出现的单位如果可以转化为结果单位,则转化后进行计算。否则忽略当前单位(当做结果单位)直接进行计算。看例子:

// 最左边单位是cm, “结果单位” 是 cm, 10mm 又可以 转化为 1cm
// 因此最终的计算结果为 2cm + 5cm + 1cm = 8cm
@a1: 2 + 5cm + 10mm; 
// px 不能转化为 cm , 后面的10px 被当成 10cm 处理,结果为17cm
@a2: 2 + 5cm + 10px;

注意: * / 运算, 不会进行单位转化,而是直接忽略后面的单位

// 等价于 2cm * 3,结果为 6cm
@base: 2cm * 3mm;

color 颜色值也支持运算规则

@color: #224488 / 2; //results in #112244
background-color: #112244 + #111; // result is #223355

Mixins

常规用法

.my-hover-mixin() {
  &:hover {
    border: 1px solid red;
  }
}
button {  
  .my-hover-mixin;
}

Outputs

button {  
  &:hover {
    border: 1px solid red;
  }
}

混合用法

不推荐的做法, mixin 样式会被保留,实际上我们想要的是 button 选择器的样式,有保留需求推荐用 extends

.my-hover-mixin {
  &:hover {
    border: 1px solid red;
  }
}
button {  
  .my-hover-mixin;
}

Outputs

.my-hover-mixin {
  &:hover {
    border: 1px solid red;
  }
}
button {  
  &:hover {
    border: 1px solid red;
  }
}

带参数的mixins

Height mixin 支持传入一个参数来确定高度和行高,默认为 10px

.Height(@h:10px){
    height: @h;
    line-height: @h;
}
div{  
    .Height(20px)
}

注意单位不能省略,如果想偷懒不写单位,可以改写成下面的形式。不过不推荐,带上单位会便于对这个函数的理解。

.Height(@h:10){
    height: @h * 1px;
    line-height: @h * 1px;
}
div{  
    .Height(20)
}

不定参数传递

.padding(...){
    padding: @arguments;
}
.div1{
    .padding(1px, 2px)
}
.div2{
    .padding(1px, 2px, 3px)
}

内置函数

todo 待补充,整理业务常用的内置函数,并列举具体场景

Extends 继承

常见的使用场景,Button 样式定义

.base-btn {
    height: 36px;
    line-height: 36px;
    min-width: 100px;
    border-radius: 4px;
}

.default-btn {
    &:extend(.base-btn);
    color: black;
    background-color: white;
}
.primary-btn {
    &:extend(.base-btn);
    color: white;
    background-color: red;
}

Outputs

.base-btn,
.default-btn,
.primary-btn {
  height: 36px;
  line-height: 36px;
  min-width: 100px;
  border-radius: 4px;
}
.default-btn {
  color: black;
  background-color: white;
}
.primary-btn {
  color: white;
  background-color: red;
}

Extends VS Mixins

虽然说这两个功能都是为提高复用性而存在的,但是本质上还是有区别的,理解它们本质上的功能,可以利于我们编写更高效的 less 代码。

还是以 Button 为例子,下面 mixin 的方式实现

.base-btn {
    height: 36px;
    line-height: 36px;
    min-width: 100px;
    border-radius: 4px;
}
.default-btn {
  .base-btn;
  color: black;
  background-color: white;
}
.primary-btn {
  .base-btn;
   color: white;
   background-color: red;
}

Outputs

.base-btn {
  height: 36px;
  line-height: 36px;
  min-width: 100px;
  border-radius: 4px;
}
.default-btn {
  height: 36px;
  line-height: 36px;
  min-width: 100px;
  border-radius: 4px;
  color: black;
  background-color: white;
}
.primary-btn {
  height: 36px;
  line-height: 36px;
  min-width: 100px;
  border-radius: 4px;
  color: white;
  background-color: red;
}

可见 使用 Mixins 并不会对公共样式进行合并,而是类似于将一个代码块复制到相应的选择器中。

因此个人认为(只是个人观点:joy:) extends 适合于对现有选择器样式的继承,类似于 btn-default 与 btn-primary 继承默认的 button 样式。

button {  
    height: 36px;
    line-height: 36px;
    min-width: 100px;
    border-radius: 4px;
}
.default-btn {
    &:extend(button);
    color: black;
    background-color: white;
}
.primary-btn {
    &:extend(button);
    color: white;
    background-color: red;
}

而 mixins 适用于对常见样式的封装,例如:元素居中、渐变、文字溢出(...代替)等常见样式。

text-overflow() {  
    text-overflow: ellipsis;
    white-space: nowrap;
    overflow: hidden;
    display: block;
}

.center-position() {
    position: absolute;
    top: 50%;
    left: 50%;
    transform: translate(-50%, -50%);
}
.container {
    .text-overflow();
    .center-position(); 
}

笔者之前的技术栈是scss,最近也在学习 less,把目前学到且比较常见的知识点做了个总结,当然 less 的知识点远远不止这些,不足的地方,随时欢迎大佬们的指点:smile:。

参考文档:

- less 文档手册

- 掘金:学习Less-看这篇就够了


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Web Analytics 2.0

Web Analytics 2.0

Avinash Kaushik / Sybex / 2009-10-26 / USD 39.99

The bestselling book Web Analytics: An Hour A Day was the first book in the analytics space to move beyond clickstream analysis. Web Analytics 2.0 will significantly evolve the approaches from the fir......一起来看看 《Web Analytics 2.0》 这本书的介绍吧!

RGB转16进制工具
RGB转16进制工具

RGB HEX 互转工具

图片转BASE64编码
图片转BASE64编码

在线图片转Base64编码工具

RGB CMYK 转换工具
RGB CMYK 转换工具

RGB CMYK 互转工具