css预处理

作者:日期:2017-11-24 14:08:17 点击:95

 

css预处理

 
  1. css是标记语言,不是编程语言,所以不具备编程语言的特点(编程语言的特点:变量存储、判断和循环的逻辑操作、函数的封装继承和多态...),如果具备以上编程语言的特点,开发css的时候将会非常的方便
  2.  
  3. css预处理编译语言的宗旨就是把css变为编程语言来开发,提高开发效率,实现组件化的封装
  4.  
  5. less
  6. sass
  7. stylus
  8. 之所以叫做预编译语言是因为:我们使用上述语言编写完成的样式代码,浏览器不能识别,我们需要把代码编译成为正常能识别的css代码才可以,所以叫做预编译
 

less的使用

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

Less 可以运行在 Node、浏览器和 Rhino 平台上。网上有很多第三方工具帮助你编译 Less 源码。

 

安装less

 
  1. npm install -g less
 

Less 编译器

 
  1. lessc styles.less > styles.css
  2. 若要输出压缩过的 CSS,只需添加 -x 选项
  3. lessc styles.less > styles.min.css -x
 
  1. //less也是来写样式的跟css一样都是实现样式的写法,只不过语法不同,它涵盖了一些JS的思想
  2.  
  3. //变量
  4. //在JS中var color="#ff6700";
  5. //在less中变量前面加上@
  6. @color:#ff6700;
  7. .box1{
  8. color: @color;
  9. }
  10. //还可以 以变量的名定义定义为变量
  11. @word:"I love you";
  12. @c:#ff5700;
  13. @var:"word";//定义了一个变量var赋值为一个变量名word
  14. @col:"c";//定义了一个变量var赋值为一个变量名c
  15. #p1:after{
  16. //content: @word;
  17. content: @@var;//@(@var)->@word->"I love you"
  18. color: @@col;
  19. }
  20.  
  21. //混合类
  22. .class1{
  23. font-size: 20px;
  24. width: 200px;
  25. height: 50px;
  26. border: 1px solid red;
  27. }
  28. .box1{
  29. .class1;
  30. background-color: #0000FF;
  31. }
  32.  
  33. //带参数混合
  34. //在less中可以像JS函数一样定义一个带参数的属性集合
  35.  
  36. .radius(@rad){
  37. border-radius: @rad;
  38. -webkit-border-radius: @rad;
  39. -moz-border-radius: @rad;
  40. -ms-border-radius: @rad;
  41. -o-border-radius: @rad;
  42. }
  43. .box1{
  44. .radius(10px);//@rad=10px;
  45. border: 1px solid #0000FF;
  46. }
  47.  
  48. //给参数赋默认值
  49. .font(@size:18px){
  50. font-size:@size ;
  51. }
  52. .menu li{
  53. .font();
  54. }
  55.  
  56. //@arguments:包含了所有传进来的参数
  57. .bor(@x,@y,@z){
  58. border: @arguments;
  59. }
  60. .wh(@w:100px,@h:30px){
  61. width: @w;
  62. height: @h;
  63. }
  64. .menu li{
  65. .wh(200px);
  66. .bor(3px ,solid ,green);
  67. }
  68. .box-shadow(@x:0,@y:0,@blur:4px,@color:#ccc){
  69. box-shadow: @arguments;
  70. color: @color;
  71. border-radius: @blur;
  72. }
  73. span{
  74. display: block;
  75. .box-shadow(5px,5px);
  76. .wh(150px,45px);
  77. }
  78.  
  79. //匹配模式和引导表达式
  80. .min(drak,@color){
  81. color: darken(@color,20%);
  82. //将颜色加深20%
  83. }
  84. .min(light,@color){
  85. color: lighten(@color,20%);
  86. //将颜色变浅20%
  87. }
  88. .min(@_,@color){
  89. display: block;
  90. }
  91. @switch1:drak;
  92. @switch2:light;
  93.  
  94. span{
  95. //.min(@switch1,#ddd);
  96. //.min(drak,#ddd);@color:#ddd
  97. //.min(@switch2,#ddd);
  98. //@_,接受任意值,你传什么值他都会执行;
  99. .min(@word,#ccc);
  100. }
  101.  
  102. //注释
  103. /*
  104. 注释
  105. * color函数
  106. * 1. lighten(@color,10%):
  107. * 意思:return a color which is 10% lighter than @color
  108. * 2. darken(@color,10%);
  109. * 意思:return a color which is 10% draker than @color
  110. * 3. statuate(@color,10%);//增加饱和度
  111. * 意思:return a color which is 10% statuated than @color
  112. * 4. destatuste(@color,10%);//减少饱和度,褪色
  113. * 5. fadein(@color,10%)
  114. * 6. fadeout(@color,10%)
  115. * 7. fade(@color,50%)
  116. * 8. spin(@color,10)
  117. * 9. spin(@color,-10)
  118. * 10. mix(@color1,@color2);混合
  119. *
  120. *
  121. * 提取颜色信息
  122. * hue(@color):返回当前颜色的色调
  123. * staturation(@color):返回当前颜色的饱和度
  124. * lightness(@color):返回当前颜色的亮度(浅的度数)
  125. * */
  126. div{
  127. width: 100px;
  128. }
 
  1. .wh(@w:100px,@h:50px){
  2. width: @w;
  3. height: @h;
  4. }
  5. //when
  6. .mixin(@a) when(lightness(@a)>=50%){
  7. background-color: black;
  8. }
  9. .mixin(@a) when(lightness(@a)<50%){
  10. background-color: whitesmoke;
  11. }
  12. .box1{
  13. .wh();
  14. .mixin(#ddd);
  15. }
  16.  
  17. .mn(@w,@h) when(@w>@h){
  18. width: @w;
  19. height: @h;
  20. }
  21. .mn(@w,@h) when(@w<=@h){
  22. width: @h;
  23. height: @w;
  24. }
  25. .box1{
  26. //.mn(100px,200px);
  27. .mn(200px,50px)
  28. }
  29.  
  30. .m(@x) when(@x=red){
  31. color: @x;
  32. }
  33. .m(@x) when(@x=green){
  34. color: @x;
  35. }
  36. p{
  37. //.m(green)
  38. .m(whitesmoke);//没有满足条件的根本不会执行
  39. }
  40. /*
  41. 注意:
  42. *在less中比较运算:
  43. * > < >= <= =
  44. * */
  45. //基于值类型的判断进行匹配,可以使用JS函数判断
  46. /*
  47. * isnumber
  48. * iscolor
  49. * isstring
  50. * isurl
  51. * iskeyword
  52. * 判断单位
  53. * ispixel px
  54. * ispercentage pt
  55. * isem em
  56. * */
  57.  
  58. .n(@a) when(iscolor(@a)){
  59. color: @a;
  60. }
  61. .n1(@b) when(isstring(@b)){
  62. content: @b;
  63. }
  64. .n2(@c) when(ispixel(@c)){
  65. width: @c;
  66. }
  67. .box2 span{
  68. .n(red);
  69. }
  70. .box2:before{
  71. //.n1(red)
  72. .n1("哈哈哈哈哈")
  73. }
  74.  
  75. .box2{
  76. .n2(100px);
  77. }
 
  1. //嵌套规则
  2. //1.直接嵌套表示的是后代关系
  3. //2.如果想表达都是当前选择器加一个&来表示(一般都是伪元素伪类用的比较多)
  4. .wh(@w:100px,@h:100px){
  5. width: @w;
  6. height: @h;
  7. }
  8. div{
  9. .wh();
  10. p{
  11. .wh(100px,20px);
  12. }
  13. }
  14. .box{
  15. .wh();
  16. &:hover{
  17. background-color: wheat;
  18. }
  19. }
  20.  
  21. span{
  22. display: block;
  23. .wh(50px,20px);
  24. &#span1{
  25. .wh();
  26. background-color: #87CEEB;
  27. }
  28. }
  29.  
  30. //计算功能:任何颜色,变量都可以参与运算
  31. @base:5%;
  32. @filter:@base*2;//10%
  33. @other:@base*4+@filter;//30%
  34. .box{
  35. color: #FFFF00;
  36. background-color: @filter+#111;
  37. height: 100%/2+@other;
  38. }
  39.  
  40. @var:10px + 5;
  41. #box1{
  42. width: (@var + 20)*2;
  43. height: (@var - 5)*3;
  44. p{
  45. height: (@var + 5)/2;
  46. background-color: #101010+#000111;
  47. border: @var - 5 solid #0000ff;
  48. }
  49. }
  50.  
  51. //less也支持部分Math函数
  52. //round(1.67)->2
  53. //ceil(2.1)->3
  54. //floor(2.9)->2
  55. //peercentage(0.5)->50%转为百分数的函数
  56. #s{
  57. width: 100px;
  58. height: 100px;
  59. border-radius: percentage(0.5);
  60. }
  61.  
  62. //命名空间
  63. #box1{
  64. .p1{
  65. width: 100px;
  66. height: 30px;
  67. border: 1px solid red;
  68. &:hover{
  69. color: #FF0000;
  70. }
  71. }
  72. }
  73. .p2{
  74. color: #ccc;
  75. #box1>.p1;
  76. }
  77.  
  78. //可以使用一些简单的JS语句
  79. @w:`"helloWord".toUpperCase()+"1"`;
  80. .p2:after{
  81. content: @w;
  82. }

上一篇: JavaScript常用的操作语句

下一篇: 关于JS中面向对象的理解