一、       前言

CSS不是一种编程语言,只是单纯的一行行的描述,没有逻辑没有变量,因此写CSS对于习惯于运用逻辑思维编码的程序员来说是一件很头疼的事。于是勤奋的程序员就开始运转他们敏捷的大脑,为CSS加入编程的元素,出现了一系列的CSS预处理语言,这时Sass就应运而生了。

Sass是一种基于CSS的预处理语言,在CSS的基础上将代码抽象和简单化。简单的理解,Sass分为两种语法,一种是SCSS,另一种是SASS。因为新的语法SCSS和平时使用CSS的习惯基本一致,无须为了使用SCSS而改变以前的书写代码习惯,使得众多前端人员喜欢使用并广为传播发扬光大(如无特别说明,本文所指的都是SCSS)。

二、       Sass的特点

Sass是基于Ruby环境的,所以真正的在项目中运用Sass,需要在电脑中构建好Sass的环境,包括安装Ruby环境、安装Sass、调试Sass以及编译Sass。

仅Sass的语法外表看,和CSS可以说是基本一致。但若想真正的运用Sass,懂得运用CSS远远不够,还需要熟悉Sass的基本特征变量嵌套mixin选择器继承、运算、颜色函数、命名空间、条件语句。Sass为写CSS提供更多的自由,像编程语言一样,可以给你的样式定义变量、进行运算、构建嵌套、增加条件判断、建立循环、赋予CSS以逻辑功能。

Sass还会提供map,这样在谷歌浏览器或者火狐浏览器中可以找到需要修改的SCSS文件位置,这样也就不用担心引用的是CSS文件找不到相关的Sass位置的问题了。项目中不用看CSS就可以轻松进行Sass的使用、修改和维护。

三、       综合服务平台1.0样式

综合服务平台比较复杂,并且作为一个产品,变动也是很经常的事情。像综合服务平台1.0那样直接用一个个的样式文件来说,面对着复杂多变的页面,处理这样那样的样式问题就显得有点力不从心了。

1加载负担,维护不便,不利于模块化开发

页面中会存在多个样式文件,增加了加载的负担。一旦增加样式,也是直接在样式文件里面追加样式,而追加人为了避免样式冲突可能直接用id来追加,这样id的变更必然会引起相关样式的变更,而如果不用id就要核对引用的几个样式文件查找重复。或者说不用多个样式文件,也是主样式只用一个样式文件,但是这样的话几个页面都会用到的样式部分又需要不停的复制粘贴,无论是构建样式还是维护样式很不方便,模块化开发更是可望而不可即。

2)有规律可循的样式不能用逻辑实现

复杂多样的页面结构是有规律可循的。综合服务平台1.0中使用样式的时候只能把这些有规律的位置、宽度等数值一个个的算出来,想要修改也是要一个个的算出来再去修改。这对于用惯了循环、函数、变量计算的程序员来说着实是一件痛苦的事,明明可以用循环、变量自动生成的事情却偏偏要用计算器一个个敲。

于是我们发现,综合服务平台1.0的不用预处理语言来管理样式文件的方式无论是构建样式还是维护样式很不方便,这也激发了综合服务平台要用预处理语言的想法,最终在综合服务平台2.0中选择了相对比较流行的Sass来管理样式文件。

四、       Sass在综合服务平台2.0的应用

Sass的编程特性,可以定义变量、可以进行选择器继承、可以计算、可以书写函数、可以调用、可以引用、可以合并,可以跳出循环······诸如此类,极大的减少CSS代码的重复性与代码的冗余方便维护 可读性更强,可维护性更强······

这些都是Sass的优势绝不仅仅是靠说出来的,在综合服务平台2.0中的代码中完全可以体现出来。下面就挑选项目中的几个例子来展现下它的优势:

1.   模块化的实现

综合服务平台2.0通过Sass实现CSS的模块化开发,把每个页面引用的CSS文件个数尽可能的降到最低,通过引用和调用的结合尽可能实现请求响应次数和文件大小的平衡,尽可能的加快网页的加载速度。

具体的实现方法如下: 将基础文件分类命名,存放在不同的以下划线开头的Sass文件中,在主文件中通过@import导入需要的基础文件,使用@extend和@include等来实现文件中所需模块的引入,通过Sass的编译将所有需要的样式编译到以主文件命名的样式文件中。每个基础文件既是一个模块也是一个模块组,不引用不编译,不调用不作用

比如项目中有一个_icon.scss的基础文件,里面写了很多个图标的mixin的样式,pageSelfInquiry.scss这个scss文件要引用的_icon.scss中的pane-btn-all这个@mixin。首先,在pageSelfInquiry.scss的头部加上@import ”icon“;然后在对应的选择器.pane-btn-all中写入@include pane-btn-all引用这个icon的样式,这样编译出来的pageSelfInquiry.css只会有_icon.scss中的@mixin  pane-btn-all这部分样式,其它的样式没有被编译进来。修改的时候也只是需要修改_icon.scss文件就可以了,这样所有引用到这个的样式都会跟着变化,不需要一个个找着修改,大大的节省了维护的成本。

2. 变量的设置

综合服务平台2.0设置色调模块运用Sass将颜色设置为变量,并在整个项目中重复使用他们,轻松实现多个色调的构建,为项目的维护和构建都节省了不少的人力和时间。用于混合器传参,类似于函数的传参,使混合更加的灵活,代码更加简洁

在项目中,设置一个变量$themcolor作为主题颜色,需要用到主体颜色的地方直接color: $themcolor,,改变色调时只需改变$themcolor对应的值就可以了。

变量还可以用于混合器的传参,比如设置圆角大小的混合器传参(这边简化代码进行说明)。在构建mixin时给它加入参数$radius,这边设置默认为3px的,

@mixin border-radius($radius:3px){

border-radius:$radius;

}

调用这个mixin时@includeborder-radius;这样直接生成的是3px的圆角,@includeborder-radius(5px);这样就生成的是5px的圆角。不需要复制粘贴,就像程序中函数的调用一样简单快捷。

3.16分栏布局的实现

综合服务平台2.0首页中业务系统部分的16分栏布局是通过Sass的@for循环结合Sass的运算特性生成所需要的网格布局

口说无凭,代码为证,图1-1是提取的项目代码,左边是SCSS,右边是编译生成的CSS文件,通过@for循环轻松实现16分栏布局中各分栏宽度大小的设定,无需一个个计算,方便快捷又高效。

左边的@for循环有点类似于程序中的forin语句,在执行这个循环的时候只需要根据算法规则写出相应的语法,就可以像程序中的循环一样,完成对有规律的样式的编译,生成响应的CSS。这种处理方式在修改的时候也很方便,想改为12分栏的布局的话把16改为12,60改为80即可,以此类推······

图1-1

4.each循环实现图片拼合

综合服务平台2.0中运用@each的list数据循环实现Sass的按钮图标样式,使代码的可读性大大加强,与此同时,维护成本和开发成本也大大的降低。

口说无凭,代码为证:如图1-2:这里面的SCSS部分代码在项目中是以@mixin的形式存在的,在这里为了方便查看给外层加上样式名。

需求变更增加图标时,只需替换图片,然后在icon-data后面追加响应图标的类名不同之处,图标位置根据相应的规则进行加减,这种虽然对运算方面没有看出有多大的便捷之处,但是对于可维护性和可读性方面的益处却是显而易见的。

图1-2

 

五、       注意事项

鉴于国内很多团队花大力气推广Sass却以流产告终,在此不得不再唠叨两句:

1) Sass是需要学习成本的,不要让一个对Sass不了解或者对项目Sass库不了解的人轻易去动Sass文件尤其是Sass库文件,这是牵一发而动全身的,影响的可能不止一两个文件,也不止一两个项目。

2) 对项目做一个合理的规划,不要所有的sass一锅煮。指定一个拍板规划的人,避免团队合作中出现文件乱套的现象。

六、       总结

Sass是一把双刃剑,好用也不好用,Sass的诸多特点为编写CSS提供了很多的便利,大大的提高了开发和维护的效率,让前端开发不再各种复制粘贴,不再那么机械化,给前端开发提供了很多乐趣和灵活性,同时也为前端开发增加了难度,对团队的合作和管理提出了更高的要求。运用得当,事半功倍;运用不当,事倍功半,甚至功亏一篑。因此,在Sass的使用中一定要制定一定的规范和管理制度,规避Sass产生的不利因素,让Sass更好的为项目服务。

基于综合服务平台浅谈Sass应用的更多相关文章

  1. 浅谈Sass与Less区别、优缺点

    Sass是一种动态样式语言,Sass语法的缩排语法,比Css比多出很多功能,如变量,嵌套,运算,继承,颜色处理,函数等,易于阅读.Cass的安装需要安装Ruby环境,是服务器端处理的,Less是需要引 ...

  2. 浅谈sass与less区别优缺点

    Sass是一种动态样式语言,Sass语法的缩排语法,比Css比多出很多功能,如变量,嵌套,运算,继承,颜色处理,函数等,易于阅读.Cass的安装需要安装Ruby环境,是服务器端处理的,Less是需要引 ...

  3. 基于微服务的DevOps落地指南 交付效率提升40%

    基于微服务的DevOps落地指南 交付效率提升40% 2015-2016年,珍爱线下门店已新增覆盖城市9个,与此同时,CRM系统大小故障却发生了数十起... ... 珍爱网是以“网络征选+人工红娘”模 ...

  4. 基于puppet分布式集群管理公有云多租户的架构浅谈

    基于puppet分布式集群管理公有云多租户的架构浅谈 一.架构介绍   在此架构中,每个租户的业务集群部署一台puppet-master作为自己所在业务集群的puppet的主服务器,在每个业务集群所拥 ...

  5. 微服务浅谈&服务治理的演变过程

    这两天对互联网的架构演变进行了简单了解,并对微服务的出现很感兴趣,所以对相关知识进行了简单的整理与总结. 本篇文章先简单介绍了互联网架构的演变,进而介绍了服务化,最后介绍了微服务及最新的服务网格(Se ...

  6. 浅谈服务治理、微服务与Service Mesh(三) Service Mesh与Serverless

    作为本系列文章的第三篇(前两篇<浅谈服务治理.微服务与Service Mesh(一)Dubbo的前世今生>,<浅谈服务治理.微服务与Service Mesh(二) Spring Cl ...

  7. 浅谈surging服务引擎中的rabbitmq组件和容器化部署

    1.前言 上个星期完成了surging 的0.9.0.1 更新工作,此版本通过nuget下载引擎组件,下载后,无需通过代码build集成,引擎会通过Sidecar模式自动扫描装配异构组件来构建服务引擎 ...

  8. 【转】浅谈分布式服务协调技术 Zookeeper

    非常好介绍Zookeeper的文章, Google的三篇论文影响了很多很多人,也影响了很多很多系统.这三篇论文一直是分布式领域传阅的经典.根据MapReduce,于是我们有了Hadoop:根据GFS, ...

  9. 浅谈微服务架构与服务治理的Eureka和Dubbo

    前言 本来计划周五+周末三天自驾游,谁知人算不如天算,周六恰逢台风来袭,湖州附近的景点全部关停,不得已只能周五玩完之后,于周六踩着台风的边缘逃回上海.周末过得如此艰难,这次就聊点务虚的话题,一是浅谈微 ...

随机推荐

  1. 黑马程序员——OC语言 类和对象

    Java培训.Android培训.iOS培训..Net培训.期待与您交流! (以下内容是对黑马苹果入学视频的个人知识点总结) (一)类 1)类的声明 代码编写 ①定义一个Car类,拥有2个属性:轮子数 ...

  2. 关于ASP.NET或VS2005 搭建三层架构的理解

    最近想学习ASP.NET建网站,关于ASP.NET或VS2005 搭建三层架构的理解,网上摘录了一些资料,对于第(2)点的讲解让我理解印象深刻,如下: (1)为何使用N层架构? 因为每一层都可以在仅仅 ...

  3. PostgreSQL的9.4已经发布(译)

    http://www.postgresql.org/about/news/1557/ 2014年12月18日,PostgreSQL全球开发小组发布PostgreSQL9.4,PostgresQL是世界 ...

  4. Android图片加载与缓存开源框架:Android Glide

    <Android图片加载与缓存开源框架:Android Glide> Android Glide是一个开源的图片加载和缓存处理的第三方框架.和Android的Picasso库类似,个人感觉 ...

  5. Android Studio下SQLite数据库的配置与使用(完)

    一,AS开发app用,所用的数据库有限制,必须使用较小的SQLite(MySql和Sql Server想想就不显示) 但是该数据库并不需要我们单独下载,安装的SDK中已经有了,在C:\AndroidS ...

  6. Unity3D之实现背景的无限重复生成

    在制作flappyBird这个小游戏中(摄像机为Orthographic),为了无限重复生成背景,可以先做好三个背景(我做的有点小),在Gamecontroller上挂一个脚本,如下:      pu ...

  7. JQuery源码解析(十)

    默认回调对象设计 不传入任何参数,调用add的时候将函数add到内部的list中,调用fire的时候顺序触发list中的回调函数: function fn1(val) { console.log('f ...

  8. React Native使用AsyncStorage本地持久化

    AsyncStorage AsyncStorage是一个简单的,未加密的,异步的,持久化,关键值存储系统,是全局的.类似于iOS中的NSUserDefault. 存值: import { AppReg ...

  9. Unity3D 调用模态对话框/Unity3D MessageBox

    Unity模态对话框/Unity MessageBox 很多时候,我们需要将Unity的exe产品发布到某一个平台.比如某某斗地主发布到某Q游戏.这时候如果需要调试肿么办.办法无外乎那几个.1:源码调 ...

  10. UWP/Win10新特性系列—App Service

    Win10中,新增了一个很实用的新特性叫做App Service,App Service允许App不在前台运行的情况下提供出一个或多个对外服务供其他App使用,这看起来就好像Web开发中的Web Ap ...