经验首页 前端设计 程序设计 Java相关 移动开发 数据库/运维 软件/图像 大数据/云计算 其他经验
当前位置:技术经验 » HTMLCSS » CSS » 查看文章
less入门及知识点整理
来源:cnblogs  作者:依旧那片天  时间:2018/10/8 8:46:53  对本文有异议

LESS ? 一种动态样式语言

文档链接:http://www.bootcss.com/p/lesscss/

 

百科

Less 是一门 CSS 预处理语言,它扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,让 CSS 更易维护、方便制作主题、扩充。

Less 可以运行在 Node 或浏览器端。

 

疑问

Less是什么呢?

Less是CSS的一门预处理语言。

其他一些CSS预处理语言诸如Sass、Stylus等。

 

什么是预处理语言呢?

以前写CSS是没有变量的,使用Less的话就有了变量,所以可以干一些奇妙的事情!还有其他一些方便的功能会在下面讲到。

 

Less和CSS在开发中是什么关系呢?

在开发中,我们先使用Less的语法编写代码,再通过其他一些手段将.less文件转成.css文件。

工具如Koala等。

 

知识链

1 变量
2 混合
    2.1 带参数混合
    2.2 给参数设置默认值
    2.3 不带参数混合
    2.4 @arguments变量
    2.5 模式匹配
    2.6 匹配多个参数
    2.7 导引
        2.7.1 导引序列使用逗号
        2.7.2 导引参数
        2.7.3 使用函数
        2.7.4 and关键字
        2.7.5 not关键字
3 嵌套
4 运算
5 Color函数
6 Math函数
7 命名空间
8 作用域
9 注释
10 引入
11 字符串插值
12 避免编译
13 JavaScript表达式
 
1 变量
  1. // .less文件(后面的代码将省略说明)
  2. // 变量用@符号声明
  3. @nice-blue: #5b83ad;
  4. @light-blue: @nice-blue + #111;
  5. #header {
  6. color: @light-blue
  7. }
  8. // 将变量名定义为变量
  9. @fnord: 'I am fnord.';
  10. @var: 'fnord';
  11. content: @@var;
  12. // less中的变量为完全的常量,所以只能定义一次
  13.  
  14. // .css文件(后面的代码将省略css输出)
  15. // 在css中输出为
  16. #header {
  17. color: #6c94be;
  18. }
  19.  
  20. content: 'I am fnord.';

  

2 混合
  1. // 定义一些通用的属性集为一个class,
  2. // 然后在另一个class中去调用这些属性
  3. .bordered {
  4. border-top: dotted 1px black;
  5. border-bottom: solid 2px black;
  6. }
  7.  
  8. #menu a {
  9. color: #111;
  10. .bordered;
  11. }
  12.  
  13. .post a {
  14. color: red;
  15. .bordered;
  16. }

  

2.1 带参数混合
  1. .border-radious(@radious) {
  2. border-radius: @radious;
  3. -moz-border-radius: @radious;
  4. -webkit-border-radius: @radious;
  5. }
  6.  
  7. #header {
  8. .border-radious(4px);
  9. }
  10.  
  11. .button {
  12. .border-radious(6px);
  13. }

  

2.2 给参数设置默认值
  1. .border-radious(@radious) {
  2. border-radius: @radious;
  3. -moz-border-radius: @radious;
  4. -webkit-border-radius: @radious;
  5. }
  6.  
  7. #header {
  8. .border-radious(4px);
  9. }
  10.  
  11. .button {
  12. .border-radious(6px);
  13. }

  

2.3 不带参数混合
  1. // 如果想隐藏属性集合,不让它暴露到CSS中去,
  2. // 但是还想在其他的属性集合中引用
  3. .wrap() {
  4. text-wrap: wrap;
  5. white-space: pre-wrap;
  6. white-space: -moz-pre-wrap;
  7. word-wrap: break-word;
  8. }
  9.  
  10. pre {
  11. .wrap
  12. }

  

2.4 @arguments变量
  1. // @arguments包含了所有传递进来的参数
  2. // 如果不想单独处理每一个参数的话
  3. .box-shadow(@x:0, @y:0, @blur:1px, @color:#000) {
  4. box-shadow: @arguments;
  5. -moz-box-shadow: @arguments;
  6. -webkit-box-shadow: @arguments;
  7. }

  

2.5 模式匹配
  1. // 根据传入的参数来改变混合的默认呈现
  2. // 让.mixin根据不同的@switch值而表现各异
  3. .mixin(dark, @color) { // 这里前面没有带@所以可以作为标识
  4. color: darken(@color, 10%);
  5. }
  6. .mixin(light, @color) { // 只接受light为首参
  7. color: lighten(@color, 10%);
  8. }
  9. .mixin(@_, @color) { // 接受任意值
  10. display: block;
  11. }
  12. // 使用
  13. @switch: light;
  14. .class {
  15. .mixin(@switch, #888);
  16. }
  17. // 只有被匹配的混合才会被使用
  18. // 变量可以匹配任意的传入值,
  19. // 而变量以外的固定值就仅仅匹配与其相等的传入值
  20.  
  21. // 在css中输出为
  22. .class {
  23. color: #a2a2a2;
  24. display: block;
  25. }

  

2.6 匹配多个参数
  1. .mixin(@a) {
  2. color: @a;
  3. }
  4.  
  5. .mixin(@a, @b) {
  6. color: fade(@a, @b);
  7. }

  

2.7 导引
  1. // 当我们想根据表达式进行匹配,而非根据值和参数匹配
  2. // 为了尽可能地保留CSS的可声明性,less通过导引混合而非if/else语句来实现条件判断
  3. .mixin (@a) when (lightness(@a) >= 50%) {
  4. background-color: black;
  5. }
  6.  
  7. .mixin (@a) when (lightness(@a) < 50%) {
  8. background-color: white;
  9. }
  10.  
  11. .mixin (@a) {
  12. color: @a;
  13. }
  14.  
  15. // 使用
  16. .class1 {
  17. .mixin(#ddd)
  18. }
  19.  
  20. .class2 {
  21. .mixin(#555)
  22. }
  23.  
  24. // 导引中可用的全部比较运算有:>, >=, =, =<, <

  

2.7.1 导引序列使用逗号
  1. // 导引序列使用逗号分割,当且仅当所有条件都符合时,才会被视为匹配成功。
  2. .mixin (@a) when (@a > 10), (@a < -10) {}

  

2.7.2 导引参数
  1. // 导引可以无参数,也可以对参数进行比较运算
  2. @media: mobile;
  3.  
  4. .mixin (@a) when (@media = mobile) {}
  5. .mixin (@a) when (@media = desktop) {}
  6.  
  7. .max (@a, @b) when (@a > @b) { width: @a }
  8. .max (@a, @b) when (@a < @b) { width: @b }

  

2.7.3 使用函数
  1. // 基于值的类型进行匹配,可以使用is函数
  2. .mixin (@a, @b: 0) when (isnumber(@b)) {}
  3. .mixin (@a, @b: black) when (iscolor(@b)) {}
  4.  
  5. // 常见的检测函数
  6. // iscolor
  7. // isnumber
  8. // isstring
  9. // iskeyword
  10. // isurl
  11.  
  12. // 判断一个值是纯数字还是单位量
  13. // ispixel
  14. // ispercentage
  15. // isem

  

2.7.4 and关键字
  1. // 使用and关键字实现与条件
  2. .mixin (@a) when (isnumber(@a)) and (@a > 0) {}

  

2.7.5 not关键字
  1. // 使用not关键字实现或条件
  2. .mixin (@b) when not (@b > 0) {}

  

3 嵌套

  1. #header {
  2.  
  3. color: black;
  4.  
  5. .navigation {
  6. font-size: 12px;
  7. }
  8.  
  9. .logo {
  10. width: 300px;
  11. &:hover {
  12. text-decoration: none;
  13. }
  14. }
  15.  
  16. }

  

4 运算

  1. // 任何数字、颜色或者变量都可以参与运算
  2.  
  3. // less能够分辨出颜色和单位
  4. @var: 1px + 5;
  5.  
  6. // 使用括号
  7. width: (@var + 5) * 2;
  8.  
  9. // 在复合属性中运算
  10. border: (@width * 2) solid black;

  

5 Color函数

  1. lighten(@color, 10%); // 轻
  2. darken(@color, 10%); // 深
  3. saturate(@color, 10%); // 饱和
  4. desaturate(@color, 10%); // 稀释
  5. fadein(@color, 10%); // 渐显
  6. fadeout(@color, 10%); // 渐隐
  7. fade(@color, 50%); // 透明
  8. spin(@color, 10); // 大10度
  9. spin(@color, -10); // 小10度
  10. mix(@color1, @color2); // 组合
  11.  
  12. // 使用
  13. @base: #f04615;
  14.  
  15. .class {
  16. color: saturate(@base, 5%);
  17. background-color: lighten(spin(@base, 8), 25%);
  18. }
  19.  
  20. // 提取颜色信息
  21. hue(@color); // 色度
  22. saturation(@color); // 饱和度
  23. lightness(@color); // 亮度
  24.  
  25. // 在一种颜色的通道上创建另一种颜色
  26. // @new 将会保持@old的色调, 但是具有不同的饱和度和亮度
  27. // hsl函数同时使用上述3种函数
  28. @new: hsl(hue(@old), 45%, 90%);

  

6 Math函数

  1. ceil(2.4); // 向上
  2. round(1.67); // 四舍五入
  3. floor(2.6); // 向下
  4. percentage(0.5); // 转成百分比

  

7 命名空间

  1. // 为了更好组织CSS或者单纯是为了更好的封装,
  2. // 将一些变量或者混合模块打包起来,
  3. // 定义一些属性集之后可以重复使用
  4. #bundle {
  5. .button() {
  6. display: block;
  7. border: 1px solid black;
  8. background-color: grey;
  9. &:hover {
  10. background-color: white;
  11. }
  12. }
  13. .tab {}
  14. .citation {}
  15. }
  16.  
  17. // 在#header a中引入.button
  18. #header a {
  19. color: orange;
  20. #bundle > .button;
  21. }

  

8 作用域

  1. // 首先会从本地查找变量或者混合模块,
  2. // 如果没找到的话会去父级作用域中查找,直到找到为止
  3. @var: red;
  4.  
  5. #page {
  6. @var: white;
  7. #header {
  8. color: @var; // white
  9. }
  10. }
  11.  
  12. #footer {
  13. color: @var; // red
  14. }

  

9 注释

  1. /* Hello, I'm a CSS-style comment */
  2. .class { color: black }
  3.  
  4. // less同样也支持双斜线的注释, 但是编译成 CSS 的时候自动过滤掉:
  5. // Hi, I'm a silent comment, I won't show up in your CSS
  6. .class { color: white }

  

10 引入

  1. // 在main文件中引入.less文件,.less后缀可带可不带
  2. @import "lib.less";
  3. @import "lib";
  4.  
  5. // 导入一个CSS文件而且不想less对它进行处理,只需要使用.css后缀就可以
  6. @import "lib.css";

  

11 字符串插值

  1. // 变量可以使用@{name}这样的结构嵌入到字符串中
  2. @base-url: "http://assets.fnord.com";
  3. background-image: url("@{base-url}/images/bg.png");

  

12 避免编译

  1. // 如果需要输出一些不正确的CSS语法
  2. // 或者使用一些less不认识的专有语法
  3. // 要输出这样的值可以在字符串前加上一个~
  4. .class {
  5. filter: ~"ms:alwaysHasItsOwnSyntax.For.Stuff()";
  6. }

  

13 JavaScript表达式

  1. // 通过反引号的方式使用
  2. @var: `"hello".toUpperCase() + '!'`;
  3.  
  4. // 可以同时使用字符串插值和避免编译
  5. @str: "hello";
  6. @var: ~`"@{str}".toUpperCase() + '!'`;
  7.  
  8. // 可以访问JavaScript环境
  9. @height: `document.body.clientHeight`;
  10.  
  11. // 将一个JavaScript字符串解析成16进制的颜色值
  12. @color: color(`window.colors.baseColor`);
  13. @darkcolor: darken(@color, 10%);

  

使用

<link rel="stylesheet/less" type="text/css" href="styles.less">

<script src="less.js" type="text/javascript"></script>

 

 

 

 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号