文章链接

面试官:说说对Css预编语言的理解?有哪些区别?

CSS 预编语言

CSS 作为一门标记性语言,语法相对简单,对使用者的要求较低,但同时也带来一些问题。

需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码。

CSS预处理器便是针对上述问题的解决方案。

预处理语言

扩充了 CSS 语言,增加了诸如变量、混合(mixin)、函数等功能,CSS 更易维护、方便

本质上,预处理是CSS的超集。

包含一套自定义的语法及一个解析器,根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。

Less

Less

HTML

  1. <div id="header">变量,混入</div>
  2. <div id="father">
  3. <div class="son">嵌套1</div>
  4. <div class="daughter">嵌套2</div>
  5. </div>
  6. <div id="outside">
  7. <div id="inside">作用域</div>
  8. </div>

Less

  1. // 变量,混入
  2. @width: 100px;
  3. @height: @width + 100px;
  4. #header {
  5. width: @width;
  6. height: @height;
  7. background-color: antiquewhite;
  8. .bordered();
  9. }
  10. .bordered {
  11. border-top: dotted 1px black;
  12. border-bottom: solid 2px black;
  13. }
  14. // 嵌套
  15. #father {
  16. width: 300px;
  17. .son {
  18. font-size: 30px;
  19. }
  20. .daughter {
  21. background-color: orange;
  22. }
  23. }
  24. // 作用域
  25. @var: red;
  26. #outside {
  27. #inside {
  28. color: @var; // blue
  29. }
  30. @var: blue;
  31. }

CSS less和scss,sass - 图1

Sass/Scss

sass

HTML(同上)

SCSS

  1. // 变量,混入
  2. $width: 100px;
  3. $height: $width + 100px;
  4. @mixin bordered($border: red) {
  5. border-top: dotted 1px black;
  6. border-bottom: solid 5px $border;
  7. }
  8. #header {
  9. width: $width;
  10. height: $height;
  11. background-color: antiquewhite;
  12. @include bordered;
  13. }
  14. // 嵌套
  15. #father {
  16. width: 300px;
  17. .son {
  18. font-size: 30px;
  19. @include bordered($border: blue);
  20. }
  21. .daughter {
  22. background-color: orange;
  23. }
  24. }
  25. // 作用域
  26. $var: red;
  27. #outside {
  28. $var: blue;
  29. #inside {
  30. color: $var; // blue
  31. }
  32. // $var: blue; // 不可行
  33. }

CSS less和scss,sass - 图2