zoukankan      html  css  js  c++  java
  • 动态的 css——less

    less 是一种样式语言,它将 css 赋予了动态语言的特性,如变量、 继承、 运算、 函数。less 既可以在客户端上运行(支持 ie6+,webkit,firefox),也可以借助 Node.js 或者 Rhino 在服务端运行。

    less 做为 css 的一种形式的扩展,它并没有阉割 css 的功能,而是在现有的 css 语法上,添加了很多额外的功能,所以对于前端开发人员来所,学习 less 是一件轻而易举的事情。我们先看下用 less 写的一段 css:

    复制代码
    @base: #f938ab;
    
    .box-shadow(@style, @c) when (iscolor(@c)) {
        box-shadow:         @style @c;
        -webkit-box-shadow: @style @c;
        -moz-box-shadow:    @style @c;
    }
    .box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
        .box-shadow(@style, rgba(0, 0, 0, @alpha));
    }
    .box { 
        color: saturate(@base, 5%);
        border-color: lighten(@base, 30%);
        div { .box-shadow(0 0 5px, 30%) }
    }
    复制代码

    在没有学过 less 的情况下,我们并不知道这些代码是做啥用的,怎么生成我们所熟悉的 css 代码,以上代码经过 less 编译后:

    复制代码
    .box {
        color: #fe33ac;
        border-color: #fdcdea;
    }
    .box div {
        box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
        -webkit-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
        -moz-box-shadow: 0 0 5px rgba(0, 0, 0, 0.3);
    }
    复制代码

    下面我们就一起来学习 less 吧。

    我们知道如果要使用 jquery 就必须在页面上引进 jquery 库,同样的在使用 less 编写 css 代码时,也要引进 less 库——less.js。点击这里下载 less 库。

    下载好后只要在页面中引入就可以了。

    <link rel="stylesheet/less" type="text/css" href="style.less" media="all" />
    <script type="text/javascript" src="less.js"></script>

    要注意外部引进样式的方法有所改变,rel 属性值为 stylesheet/less,样式的后缀变为 .less 同时 less 样式文件一定要在 less.js 前先引入。

    引入了 less 之后,正式开始学习 less。

    less 语法

    1、变量

    less 的变量充许你在样式中对常用的属性值进行定义,然后应用到样式中,这样只要改变变量的值就可以改变全局的效果。和 javascript 中的全局变量有点类似。

    甚至可以用变量名定义为变量。

    复制代码
    @color: red;
    @foot: 'color';
    
    .head{
        color: @color;
    }
    
    .foot{
        color: @@foot;
    }
    复制代码

    输出:

    复制代码
    .head {
      color: red;
    }
    .foot {
      color: red;
    }
    复制代码

    注意 less 中的变量为完全的“常量”,所以只能定义一次。

    2、混合

    混合就是定义一个 class,然后在其他 class 中调用这个 class。

    复制代码
    .common{
        color: red;
    }
    
    .nav{
        background: #ccc;
        .common;
    }
    复制代码

    输出:

    复制代码
    .common {
      color: red;
    }
    .nav {
      background: #ccc;
      color: red;
    }
    复制代码

    Css 中的 class, id 或者元素属性集都可以用同样的方式引入。

    3、带参数混合

    在 less 中,你可以把 class 当做是函数,而函数是可以带参数的。

    复制代码
    .border-radius (@radius) {
        border-radius: @radius;
        -moz-border-radius: @radius;
        -webkit-border-radius: @radius;
    }
    
    #header {
        .border-radius(4px);
    }
    .button {
        .border-radius(6px);  
    }
    复制代码

    最后输出:

    复制代码
    #header {
        border-radius: 4px;
        -moz-border-radius: 4px;
        -webkit-border-radius: 4px;
    }
    .button {
        border-radius: 6px;
        -moz-border-radius: 6px;
        -webkit-border-radius: 6px;
    }
    复制代码

    我们还可以给参数设置默认值:

    复制代码
    .border-radius (@radius: 5px) {
        border-radius: @radius;
        -moz-border-radius: @radius;
        -webkit-border-radius: @radius;
    }
    
    #header {
        .border-radius;  
    }
    复制代码

    最后输出:

    #header {
        border-radius: 5px;
        -moz-border-radius: 5px;
        -webkit-border-radius: 5px;
    }

    也可以定义不带参数属性集合,如果想要隐藏这个属性集合,不让它暴露到CSS中去,但是还想在其他的属性集合中引用,就会发现这个方法非常的好用:

    复制代码
    .wrap () {
        text-wrap: wrap;
        white-space: pre-wrap;
        white-space: -moz-pre-wrap;
        word-wrap: break-word;
    }
    
    pre {
        .wrap 
    }
    复制代码

    输出:

    复制代码
    pre {
        text-wrap: wrap;
        white-space: pre-wrap;
        white-space: -moz-pre-wrap;
        word-wrap: break-word;
    }
    复制代码

    混合还有个重要的变量@arguments。

    @arguments 包含了所有传递进来的参数,当你不想处理个别的参数时,这个将很有用。

    复制代码
    .border(@0,@style:solid,@color:red){
        border:@arguments;
    }
    
    .demo{
        .border(2px);
    }
    复制代码

    输出:

    .demo {
        border: 2px solid #ff0000;
    }

    混合还有许多高级的应用,如模式匹配等。在这里就不介绍了,只讲些基础的东西。

    4、嵌套规则

    less 可以让我们用嵌套的方式来写 css。下面是我们平时写的 css:

    复制代码
    #header h1 {
        font-size: 26px;
        font-weight: bold;
    }
    #header p {
        font-size: 12px;
    }
    #header p a {
        text-decoration: none;
    }
    #header p a:hover {
        border- 1px;
    }
    复制代码

    用 less 我们就可以这样写:

    复制代码
    #header {
        h1 {
            font-size: 26px;
            font-weight: bold;
        }
        p {
            font-size: 12px;
            a {
                text-decoration: none;
                &:hover { border- 1px }
            }
        }
    }
    复制代码

    注意 & 符号的使用—如果你想写串联选择器,而不是写后代选择器,就可以用到 & 了。这点对伪类尤其有用如 :hover。

    5、运算

    任何数字、颜色或者变量都可以参与运算。

    .demo{
        color: #888 / 4;
    }

    输出:

    .demo {
        color: #222222;
    }

    less 完全可以进行复杂四则运算,同样的复合运算也没有问题。

    6、Color 函数

    less 提供了一系列的颜色运算函数。颜色会先被转化成 HSL 色彩空间,然后在通道级别操作。

    复制代码
    lighten(@color, 10%);     // return a color which is 10% *lighter* than @color
    darken(@color, 10%);      // return a color which is 10% *darker* than @color
    
    saturate(@color, 10%);    // return a color 10% *more* saturated than @color
    desaturate(@color, 10%);  // return a color 10% *less* saturated than @color
    
    fadein(@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% transparency
    
    spin(@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 @color
    
    mix(@color1, @color2);    // return a mix of @color1 and @color2
    复制代码

    使用起来相当简单:

    @base: #f04615;
    
    .class {
        color: saturate(@base, 5%);
        background-color: lighten(spin(@base, 8), 25%);
    }

    还可以提取颜色信息:

    hue(@color);        // returns the `hue` channel of @color
    saturation(@color); // returns the `saturation` channel of @color
    lightness(@color);  // returns the 'lightness' channel of @color

    例如:

    @color: #f36;
    
    #header {
        background-color: hsl(hue(@color),45%,90%);
    }

    输出:

    #header {
        background-color: #f1dae0;
    }

    7、Math 函数

    less 提供了一组方便的数学函数,你可以使用它们处理一些数字类型的值。

    round(1.67); // returns 2
    ceil(2.4);   // returns 3
    floor(2.6);  // returns 2

    如果你想将一个值转化为百分比,你可以使用 percentage 函数:

    percentage(0.5); // returns 50%

    8、命名空间

    有时候,你可能为了更好组织 css 或者单纯是为了更好的封装,将一些变量或者混合模块打包起来,你可以像下面这样在 #form 中定义一些属性集之后可以重复使用:

    复制代码
    #form {
        .submit () {
            display: block;
            border: 1px solid black;
            background: gray;
            &:hover { background: green }
        }
        .register { ... }
        .login { ... }
    }
    复制代码

    你只需要在 #myform 中像这样引入 .submit:

    #myform {
        color: orange;
        #form > .submit;
    }

    9、作用域

    和其他编程语言类似,less 变量也有作用域。首先会从本地查找变量或者混合模块,如果没找到的话会去父级作用域中查找,直到找到为止。

    复制代码
    @var: red;
    
    #page {
        @var: white;
        #header {
            color: @var; // white
        }
    }
    
    #footer {
        color: @var; // red  
    }
    复制代码

    10、注释

    css 形式的注释在 less 中是依然保留的,同时 less 也支持双斜线的注释,但是编译成 css 的时候自动过滤掉。

  • 相关阅读:
    react Table key值使用方式
    C# EF查询不同分组的第一条数据
    C# MVC PDFJS URL传参方式+文件流方式在线展示文档
    docker nginx配置写错,启动不了容器的解决方案
    网络编程之BIO和NIO
    网络编程之BIO和NIO
    IT职场心得感想
    我们希望能与各位快乐拼博的站长们一路前行
    UART, SPI详解
    创业精神
  • 原文地址:https://www.cnblogs.com/axl234/p/3868306.html
Copyright © 2011-2022 走看看