详解less用法,为什么比传统css强很多?

详解less用法,为什么比传统css强很多?

1. 什么是less

首先Less 就是一个 CSS 预处理器,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。让 CSS 具有动态性。用了less之后才发现它的功能比传统的css强大太多。

1.1 传统css的痛点

  1. 会出现选择器连带写太多层的问题。也就是嵌套多层最常见的就是一个类名占完一整行。
  2. 会出现代码无法复用的问题。
  3. 没有专门的作用域或者嵌套。

1.2 解决:使用css预处理器

1.2.1 sass 与 scss

2007年诞生,是最早出现的也是最成熟的css预处理器,拥有ruby社区的支持。

受到less的影响,已经进化到了全面兼容css的scss

1.2.2 less

2009年出现,受sass的影响较大,但是又能够使用css的语法,让大部分的开发者更加容易上手,less的出现也影响了sass演变到scss的时代。Bootstrap的底层就是less 包括React的UI框架AntDesign。

1.2.3 stylus

2010年诞生,来自node.js社区,主要用于给node项目提供css预处理支持,语法偏向python,使用率相对于scss和less少很多。

2. less的编译

less最终需要被编译为css运行于浏览中 , 包括部署到服务器中。

  1. 使用node环境,通过npm包下载less工具,使用工具对代码进行编译。
  2. 通过vscode插件来编译 。
  3. 引入cdn的less编译代码,对less进行时事处理。
  4. 将less编译的js代码下载到本地,执行js代码堆less进行编译。

介于个人学习阶段的原因:只能通过VScode插件来编译。

3. 嵌套

3.1 &的妙用

&:代表 当前/上一层选择器 的意思,此处是 .container-list

// 需求:hovercontainer-list的时候,颜色变为红色
.wrapper {
    .container-list {
        width100px;
        height100px;
        background-color: skyblue;
        // &代表所处的当前选择器
        &:hover {
            background-color: red;
        }
    }
}

3.2 混入 混合 mixins

3.2.1 less具备计算能力,原生css不具备 (了解即可)

div {
    width100px + 50px;
    height150px;
    background-colorrgb(0,255,0) + rgb(00255);
}

3.2.2 文本显示省略号的三大件

/* 文本是否换行 */
white-spacenowrap;
/* 隐藏文本 */
overflowhidden;
/* 当文本超出边框时显示省略号 */
text-overflowellipsis;

3.2.3 自定义一个混入类,如函数一样调用即可

.white-ellipsis {
      white-space: nowrap;
      overflow: hidden;
      text-overflow: ellipsis;
}

.box1 {
    width200px;
    height200px;
    background-color: pink;
    // 使用混入
    .white-ellipsis();
}

3.2.4 自定义混入类练习

// 定义一个混入:要求应用该混入之后,元素能够具备5px 红色实线边框。
// 混入传参 => 了解即可
.main-border(@b-size5px, @b-color: red){
    border:@b-size solid @b-color; 
}

.box {
    width200px;
    height200px;

    // 2.使用混入
    // 如果直接使用混入,什么都不传入的情况下,会使用混入的默认值
    .main-border();
    // 传参
    // 50px 对应的就是混入中的第一个b-size变量,b-size变量的默认值是5px,
    // 但是因为我们自己传入了自定义的值,所以会覆盖掉默认值,最终b-size会渲染为50px
    // 同理,blue会覆盖b-color的默认值red,最终显示为蓝色
    // 而solid这个值是固定的,且并未对外暴露可替换接口,所以固定不变。
    .main-border(50px,blue);
}

4. 映射

需求:设置宽度为100px。

要使用box-size这个混入中的width的值100px。所以,先通过.box-size()找到混入规则,再使用[]将想要捕获的属性放在里面,就可以用了。

// 定义混入
.box-size {
    width100px;
    height100px;
}

.test {
    background-color: orange;
    width: .box-size()[width];
}

5. 继承 extend

继承语法:将box1里面的所有内容全部拿过来。

继承之后, box1 和 box2变成了并集选择器 => 你有的我也有

// 给box1定义了一个颜色
.box1 {
    width100px;
    height100px;
    // background-image:linear-gradient(red, yellow);
    // 内置函数 可以将英文的颜色转为十六进制的  了解即可
    background-colorcolor(orange);
}

.box2{
    &:extend(.box1);
}

6. iframe标签

iframe框架作用:

  1. 可以在a页面中嵌入其他页面
  2. frameborder: 只有0 和 1
  3. src属性指向默认展示的内容文件
  4. 现在很多网页做了同源策略,会导致iframe无法加载非同源的网页
详解less用法,为什么比传统css强很多?

文章出自:https://juejin.cn/post/7221730647042310202

作者:小彭很nice


原文始发于微信公众号(前端24):详解less用法,为什么比传统css强很多?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/216253.html

(0)
李, 若俞的头像李, 若俞

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!