sass文件的编译用的是gulp的,当执行gulp后,会监控src/scss下scss文件的变化(并不是src/scss所有的文件,只有在src/scss一级目录下的scss文件),如果发生变化,就会实时编译成css到dev/css目录下。

    接着我们会用gulp-autoprefixer插件自动补全Css前缀。

    最后我们会进行px to rem的转换,转换的规则就是所有的 px值 除以 75 计算出rem值。

    通过下面这个示例代码,一目了然。

    处理前:

    处理后:

    scss文件转换后

    至于为什么转化规则是除以 75 呢?

    这是因为我们这里的移动端设计稿都是 750px 的,我们用PS测量一个按钮为150px的时候,我们就直接写这个按钮的width为150px,这感觉就像写固定布局一样!gulp会为我们自动处理px to rem。

    但是如果你的设计稿是640px呢?这个该怎么处理?这时候就需要你修改下gulpfile.js中的配置文件:

    对了,你还可能遇到一个坑,那就是如果你设置按钮的border为1px时

    1. .btn {
    2. border: 1px solid #ccc;
    3. }

    这是处理后的css文件:

    1. .btn {
    2. border: 0.013333rem solid #ccc;
    3. }

    在浏览器中预览时你会看见它的边框,但是当你到了手机上的时候,这条线是没有的!!!

    想当初百思不得其解,突然灵光一现,发现了其中蹊跷,那就是手机中算 0.013333rem值的时候可能都算不到1px大小,所以直接就不显示了……

    所以我们不想让gulp对border的1px进行处理的时候该怎么办呢?

    这时候,我们就需要加上特殊的标示告诉gulp此处请不要转换,看下面的示例代码:

    这是scss文件:

    这是处理后的css文件:

    1. .btn {
    2. border: 1px solid #ccc;
    3. }

    scss目录结构

    目录结构

    src/scss目录下,包含了很多细分功能的scss文件。这是scss的目录结构

    1. ├── src/ # 源文件目录
    2. └── scss/ # scss目录
    3. └── helper/
    4. └── _color.scss # 色板
    5. └── _normalize.scss # 重置
    6. └── _rules.scss # 规则
    7. └── _util.scss # util
    8. └── sprite/
    9. └── _sprite.scss # 根据雪碧图生成的scss文件
    10. └── ui/
    11. └── _animation.scss # 动画
    12. └── _button.scss # 按钮组件
    13. └── _global.scss # 全局
    14. └── _icon.scss # 字体图标
    15. └── _loading.scss # 页面加载loading样式
    16. └── index.scss

    helper

    先介绍helper目录,这里包括了一些帮助项目开发的类

    1._color.scss

    这里存放着一些扁平的颜色变量,当你没有合适的颜色的时候,可以考虑选择尝试其中的颜色。

    2._normalize.scss

    这句话直接改变了所有元素的盒模型,当你设置一个元素为 box-sizing: border-box;时,此元素的内边距和边框不再会增加它的宽度,绝对是开发福利!

    3._rules.scss

    在这里设置常用的scss变量,占位符,mixin,请大家在项目开发中不断的完善!

    4._util.scss

    提供常用的工具类, 让我们在这里做个预览:

    1. /**
    2. * 隐藏元素
    3. */
    4. .hidden,
    5. [hidden] {
    6. display: none !important;
    7. }
    8. /**
    9. */
    10. .lnv-img {
    11. max-width: 100%;
    12. height: auto;
    13. }
    14. /**
    15. * 清除浮动
    16. */
    17. .clear {
    18. clear: both;
    19. }
    20. /**
    21. * 解決高度塌陷問題
    22. */
    23. .clearfix:after {
    24. content: ' ';
    25. display: block;
    26. height: 0;
    27. clear: both;
    28. visibility: hidden;
    29. }
    30. .clearfix {
    31. zoom: 1;
    32. }
    33. /**
    34. * 单行文本超过宽度显示为三个点
    35. */
    36. .dot {
    37. overflow: hidden;
    38. white-space: nowrap;
    39. text-overflow: ellipsis;
    40. }
    41. /**
    42. * 三角符号
    43. */
    44. .lnv-triangle {
    45. display: inline-block;
    46. width: 0;
    47. height: 0;
    48. margin-left: 2px;
    49. vertical-align: middle;
    50. border-top: 4px solid \9;
    51. border-right: 4px solid transparent;
    52. border-left: 4px solid transparent;
    53. /**
    54. * 不被选中
    55. */
    56. .noselect {
    57. -webkit-user-select: none;
    58. -moz-user-select: none;
    59. -ms-user-select: none;
    60. -o-user-select: none;
    61. user-select: none;
    62. }

    ui

    ui文件夹下存放与ui相关的scss文件。

    1. _animation.scss

    这里存放着与动画有关的样式。

    1. _button.scss

    这里存放着组件类的样式,如按钮、表单、表格等,这里只写了button类,其他的需要大家在项目开发中完善。之所以设置组件类,是为了方便项目后期的迭代。

    1. _global.scss

    这里存放自定义的全局变量。

    1. _icon.scss

    这里存放着字体图标有关的样式。

    1. _loading.scss

    这里存放着页面加载loading的样式

    sprite

    sprite文件下存放着由雪碧图生成的scss文件,具体的内容会在雪碧图部分讲解。

    base.scss

    这是base.scss文件:

    1. @charset "utf-8";
    2. /* 样式重置 */
    3. @import "helper/_normalize";
    4. /* 色板 */
    5. @import "helper/_color";
    6. /* 规则 */
    7. @import "helper/_rules";
    8. /* 工具类 */
    9. @import "helper/_util";
    10. /* 动画效果 */
    11. @import "ui/_animation";
    12. /* 组件库 */
    13. @import "ui/_buttons";
    14. /* loading */
    15. @import "ui/_loading";
    16. /* icon */
    17. @import "ui/_icon";
    18. /* public style */
    19. @import "ui/_global";