Less基础语法学习

刺骨的言语ヽ痛彻心扉 2022-03-27 06:36 447阅读 0赞

Less(Leaner Style Sheet)是一门向后兼容的CSS扩展语言

1 变量

less可以定义变量,在编译时自动将变量名替换为用户定义的值。使用@定义和使用变量,变量声明可以在开头,也可以在使用变量后,不一定需要预先声明:

  1. // 变量
  2. @link-color: #428bca; //sea blue // 用法 .link {
  3. color: @link-color;
  4. }
  5. .link {
  6. color: @link-color;
  7. }
  8. // 变量
  9. @link-color: #428bca; //sea blue

除了在值中使用变量,在选择器名称、属性名、URL和@import语句,甚至是其他变量名中都能使用变量:

  1. @mySelector: banner;
  2. .@{ mySelector} {
  3. font-weight: bold;
  4. }
  5. @images: "../img";
  6. body {
  7. color: #444;
  8. background: url("@{images}/white-sand.png");
  9. }
  10. @themes: "../../src/themes";
  11. @import "@{ themes}/tidal-wave.less"; //导入less文件
  12. @property: color;
  13. .widget {
  14. @{ property}: #0ee; background-@{ property}: #999;
  15. }
  16. @fnord: "I am fnord.";
  17. @var: "fnord";
  18. content: @@var;
  19. //将会编译为
  20. content: "I am fnord.";

2 嵌套

less文件可以嵌套样式,使代码更符合html结构,更加简洁

  1. #header {
  2. color: black;
  3. }
  4. #header .navigation {
  5. font-size: 12px;
  6. }
  7. #header .logo {
  8. width: 300px;
  9. }

可以用以下形式编写:

  1. #header {
  2. color: black; .navigation {
  3. font-size: 12px;
  4. }
  5. .logo {
  6. width: 300px;
  7. }
  8. }

3 混合

less可以混合样式(类选择器或id选择器):

  1. .a, #b {
  2. color: red;
  3. }
  4. .mixin-class {
  5. .a();
  6. }
  7. .mixin-id {
  8. #b();
  9. }

编译为:

  1. .a, #b {
  2. color: red;
  3. }
  4. .mixin-class {
  5. color: red;
  6. }
  7. .mixin-id {
  8. color: red;
  9. }

如果你不想输出混合集,可以在定义时加上一个括号:

  1. .my-mixin {
  2. color: black;
  3. }
  4. .my-other-mixin() {
  5. background: white;
  6. }
  7. .class {
  8. .my-mixin;
  9. .my-other-mixin;
  10. }

编译为:

  1. .my-mixin {
  2. color: black;
  3. }
  4. .class {
  5. color: black;
  6. background: white;
  7. }

混合集不仅可以包含各种属性,还可以包含各种选择器:

  1. .my-hover-mixin() {
  2. &:hover { // &表示父选择器
  3. border: 1px solid red;
  4. }
  5. }
  6. button {
  7. .my-hover-mixin();
  8. }

编译为:

  1. button:hover {
  2. border: 1px solid red;
  3. }

可以在混合集中嵌套多层idclass选择器,在使用时进行指定,相当于命名空间:

  1. #my-library {
  2. .my-mixin() {
  3. color: black;
  4. }
  5. }
  6. // 可以这样调用 .class {
  7. #my-library > .my-mixin();
  8. }

下面四种写法效果一样:

  1. #outer > .inner;
  2. #outer > .inner();
  3. #outer.inner;
  4. #outer.inner();

4 函数

可以在混合集中设置参数,变为函数,在它进行混入操作时,会将变量传递给选择器代码块:

  1. .border-radius(@radius) {
  2. -webkit-border-radius: @radius;
  3. -moz-border-radius: @radius;
  4. border-radius: @radius;
  5. }
  6. #header {
  7. .border-radius(4px);
  8. }
  9. .button {
  10. .border-radius(6px);
  11. }

甚至可以设置参数的默认值:

  1. .border-radius(@radius: 5px) {
  2. -webkit-border-radius: @radius;
  3. -moz-border-radius: @radius;
  4. border-radius: @radius;
  5. }
  6. #header {
  7. .border-radius;
  8. }

如果带有多个参数,可用分隔:

  1. .mixin(@color) {
  2. color-1: @color;
  3. }
  4. .mixin(@color; @padding: 2) {
  5. color-2: @color;
  6. padding-2: @padding;
  7. }
  8. .some .selector div {
  9. .mixin(#008000);
  10. }

编译为:

  1. .some .selector div {
  2. color-1: #008000;
  3. color-2: #008000;
  4. padding-2: 2;
  5. }

参数可以为命名参数:

  1. .mixin(@color: black; @margin: 10px; @padding: 20px) {
  2. color: @color;
  3. margin: @margin;
  4. padding: @padding;
  5. }
  6. .class2 {
  7. .mixin(#efca44; @padding: 40px);
  8. }

编译为:

  1. .class2 {
  2. color: #efca44;
  3. margin: 10px;
  4. padding: 40px;
  5. }

你可以通过传递给混合集的参数,进行模式匹配,改变混合集的行为:

  1. .mixin(dark; @color) {
  2. color: darken(@color, 10%);
  3. }
  4. .mixin(light; @color) {
  5. color: lighten(@color, 10%);
  6. }
  7. .mixin(@_; @color) { //@_为任何值
  8. display: block;
  9. }
  10. @switch: light;
  11. .class {
  12. .mixin(@switch; #888);
  13. }

上述进行模式匹配,只有第二个和第三个模式匹配成功,编译为:

  1. .class {
  2. color: #a2a2a2;
  3. display: block;
  4. }

可以将混合用作函数使用,所有定义在一个mixin中的变量都是可见的,还可以用于调用它的作用域中(除非调用它的作用域定义了同名变量)

  1. .average(@x, @y) {
  2. @average: ((@x + @y) / 2);
  3. }
  4. div {
  5. .average(16px, 50px); // "call" the mixin
  6. padding: @average; // use its "return" value
  7. }

编译为:

  1. div {
  2. padding: 33px;
  3. }

5 扩展(继承)

扩展与混合相似,但混合编译后的css相当于新增一块相同的样式内容,而扩展是在选择器的后面增加了一个你要引用的选择器名,所以扩展相比要节省更多的资源。

扩展有两种语法,效果一样,可以放置在选择器最后面(一定要在最后),也可以放置在规则集中:

  1. .a:extend(.b) { }
  2. // 上面的代码块与下面这个做一样的事情 .a {
  3. &:extend(.b);
  4. }

示例:

  1. nav ul {
  2. &:extend(.inline);
  3. background: blue;
  4. }
  5. .inline {
  6. color: red;
  7. }

ul继承了类inline的属性,编译为:

  1. nav ul {
  2. background: blue;
  3. }
  4. .inline, nav ul {
  5. color: red;
  6. }

如果要继承多个类,用逗号分隔:

  1. .e:extend(.f, .g) { }

可以嵌套选择器中的扩展:

  1. .bucket {
  2. tr {
  3. color: blue;
  4. }
  5. }
  6. .some-class:extend(.bucket tr) { }

编译为:

  1. .bucket tr, .some-class {
  2. color: blue;
  3. }

扩展为精确匹配,它不管选择器是否以星号开头:

  1. *.class {
  2. color: blue;
  3. }
  4. .noStar:extend(.class) { } // 不会匹配*.class选择器

6 导入

less文件可以导入其他less或css文件,将其包含进来

  1. @import "foo"; // foo.less is imported
  2. @import "foo.less"; // foo.less is imported
  3. @import "foo.php"; // foo.php imported as a less file
  4. @import "foo.css"; // statement left in place, as-is

除此之外less还支持循环、合并、条件以及众多内置函数功能,详情可见官网

发表评论

表情:
评论列表 (有 0 条评论,447人围观)

还没有评论,来说两句吧...

相关阅读

    相关 less学习

    less简介   less是一种动态样式语言,属于css预处理器的范畴,它扩展了CSS语言,增加了变量、Minxin、函数等特性,使CSS更易维护和扩展   less