61阅读

jenkins简单使用介绍-fusioncharts:fusioncharts-简介,fusioncharts-使用好处

发布时间:2018-03-10 所属栏目:Quartz

一 : fusioncharts:fusioncharts-简介,fusioncharts-使用好处

FusionCharts是InfoSoft Global公司的一个产品,InfoSoft Global 公司是专业的Flash图形方案提供商,他们还有几款其他的,基于Flash技术的产品,都非常的漂亮。 FusionCharts free 是一个跨平台,跨浏览器的flash图表组件解决方案,能够被 ASP.NET, ASP, PHP, JSP, ColdFusion, Ruby on Rails, 简单 HTML页面甚至PPT调用。你不需要知道任何关于flash编程的知识,你只需要知道你所用的编程语言就可以了。

fusioncharts_fusioncharts -简单介绍

[www.61k.com]FusionCharts是1个Flash的图表组件,它可以用来制作数据动画图表,其中动画效果用的是Adobe Flash 8 (原Macromedia Flash的)制作的flash , FusionCharts可用于任何网页的脚本语言类似于HTML , .NET,ASP , JSP, PHP , ColdFusion等,提供互动性和强大的图表。使用XML作为其数据接口, FusionCharts充分利用流体美丽的Flash创建紧凑,互动性和视觉逮捕图表。

动画和交互图

fusioncharts:fusioncharts-简介,fusioncharts-使用好处_fusioncharts
fusioncharts

使用FusionCharts ,您可以快速方便地提供交互式动画图表给最终用户。不同的图表类型支持不同形式的动画和交互性,从而提供了1个不同的经验,最终用户。

简单易用且功能强大的AJAX/ JavaScript的一体化

FusionCharts提供先进的办法,将图表与AJAX应用程序或JavaScript模块结合。您可以随时更新海图在客户端,调用JavaScript函数的热点链接,或要求作出动态XML数据到服务器不涉及任何页面刷新。

易于使用

使用FusionCharts ,您不必安装任何东西在您的服务器上。您需要做的只是复制粘贴SWF文件(核心文件FusionCharts )到您的服务器上,就像你会做任何图像文件-你已经准备好!因此,即使在这些服务器不允许安装ActiveX或任何其他形式的组成部分, FusionCharts都可以顺利运行。

FusionCharts使图表创建过程简易方便。因为它使用XML作为它的数据源,所有您需要做的是将您的数据转换为XML格式,再使用1种编程语言或使用可视化的GUI提供FusionCharts -而这一切所需要的建立互动和动画图表。

运行在各种平台

不论您使用的服务器端脚本语言还是客户端脚本语言, FusionCharts都可用于创建图表的。FusionCharts使用XML作为数据接口,可以运行在任何服务器和任何脚本语言。查看图表,用户只需要安装Adobe Flash Player ,而 Flash Player 几乎每个浏览器上都有嵌入。

降低您服务器的负载

fusioncharts:fusioncharts-简介,fusioncharts-使用好处_fusioncharts
fusioncharts

在传统的基于图像的绘制系统,图表,图像生成的服务器端。因此,每个图表,您需要提供给用户,您可以

建立复杂的图像在服务器上,然后流给客户端。当需要时高,这有可能是项昂贵的资源在服务器上,作为形象创作需要很大的人数在服务器上。

FusionCharts为您带来极大的安慰-所有图表呈现在客户端的广泛安装使用的Adobe Flash平台。服务器只是负责流的预先建立的SWF文件和你的XML数据文件。从那里, Flash Player的需要的责任使图表。此外,图表SWF文件可以存储,让您可以只更新数据,而不是每次都发送图表SWF文件。

大量的图表类型

FusionCharts v3的为您提供了大量的图表类型。从基本的条形图,柱状图,线图,饼图等,以先进的组合和滚动图表,您可以建立所有图表以同样的易用性。Web & Enterprise应用程序支持超过90种图表类型和550种地图,JS支持各种实时图表、地图、可编辑图表和仪表。

向下钻取

用LinkedCharts在几分钟内即可创建无限级的向下钻取图表,每一级都可以显示不同的图表类型和数据,要实现这些无需编写任何额外代码。

fusioncharts_fusioncharts -使用好处

动画图表为您的Web应用程序增加特殊效果,从而为您的顾客和老板留下更深的印象。 图表由FusionCharts创建的图表的外观流畅,交互方式有趣。 有些图表可提供独一无二的用户体验这是任何其他构件所不能提供的,例如我们的真3D图表允许您在客户端对图表进行动态旋转并观察以任何视角。 同样,我们的饼图和圆环图允许您在客户端对饼图进行切片和旋转。

拷贝-粘贴式的安装方式可让您在任何类型的服务器上轻松安装 FusionCharts。

跨平台性质和跨浏览器兼容性允许您将FusionCharts用于任何编程语言。

此外,由于FusionCharts是在XML上运行的,您可以将其与任何数据库和数据源连接,包括微软的SQL,

Oracle, MySQL, PostgreSQL, CSV, 遗留数据系统等。

现有的超过 4五种类型的图表可帮助您将数据塑造成任何形状。

大量的配置选项允许您对每个图表的功能以及外观要素进行控制。 这可以

通过采用各图标所提供的XMLAPI来实现。

对与AJAX/JavaScript和之间的交互性的增强可帮助您在客户端本身创建更新的图表。 您还可以截取客户端图表所创建的事件。

fusioncharts:fusioncharts-简介,fusioncharts-使用好处_fusioncharts
fusioncharts

在所有数据点和整个图表,钻取功能得到了广泛的支持。 您可以钻取至同1个窗口、新窗口、弹出窗口、框架的页面,或甚至将事件截取在JavaScript中。

随着图表在客户端生成,减轻您的服务器的负担。 通过传统的基于图形的图表构件,您总会因需要在服务器端渲染图形而发生分摊费用。 FusionCharts可帮助您彻底免去这些费用,因而可让您创建高度可规模化的可视化系统。

支持先进的图表选项,如双轴, 趋势线/区, 遗漏数据,先进的数字格式,彩色主题、可定制的工具等。

图表可导出为图形,从而允许您将其嵌入报告中。

大量的代码范例、文档和蓝图应用程序,可帮助您轻松入手。

您无需了解任何Flash的知识就可以使用FusionCharts。

您可获得将FusionCharts作为企业License的一部分进行编辑和重新编辑的所有资源和授权。

license的低价定价策略允许您在不限数量的服务器,通过多种编程方式使用相同的license语言。

1年内的免费升级,包括主要升级。

fusioncharts_fusioncharts -支持图表

柱状图和直方图 - 2D 和 3D

直线图和面积图 - 2D 和 3D

饼图和圆环图 - 2D 和 3D

散点图和气泡图 -只有 2D

堆栈图表- 2D和3D

双轴图表- 2D和3D

分层柱状图 - 2D和3D

分层条形图 - 2D和3D

分层面积图 - 2D

多序列分层柱状图 - 2D

组合图表 - 允许您将直线图、面积图或柱状图在单个图表中组合在一起。 包括2D和3D。

滚动图 - 交互式图表,允许您在客户端对数据点进行滚动。

真3D图表- 1种独一无二的基于web的图表,允许您在客户端以可视化的方式对摄像头的角度和视角

进行更改。 您可以旋转图标,在2D和3D之间来回切换,显示/隐藏标签或完成大量

其他图表上的交互任务。

二 : quartz的简单介绍及应用

今天有一个任务需要定时执行,考虑了几个方法:

(1)python或者shell写一些脚本,然后crontab方法

(2)Spring+JDK Timer

想想上个项目使用的是第二种情况的,实际使用中存在了诸多的问题,比如

  • 步骤复杂、分散
  • 使用写死服务器Host的方式执行task,存在单点风险,负载均衡手动完成。[www.61k.com]
  • 应用重启,任务无法自动恢复

在应用过程中十分痛苦,最近重新搜了一下,发现一个更加好用的工具:Quartz ! 这个工具在美团中的有大量使用,详见他们的官方博客:。

光看博客对它有个了解,但是我们还是从官方文档-2.2版本的html文档()来学习这个强大的工具。

首先,对quartz有个大致了解,

Quartz是Java领域最著名的开源任务调度工具。Quartz提供了极为广泛的特性如持久化任务,集群和分布式任务等,其特点如下:

  • 完全由Java写成,方便集成(Spring)
  • 伸缩性
  • 负载均衡
  • 高可用性

下面我们以实际的例子来学习 在Spring中使用Quartz有两种方式实现:

- 第一种是任务类继承QuartzJobBean;

- 第二种则是在配置文件里定义任务类和要执行的方法,类和方法可以是普通类;

我们分别来看一下这两种方式:

(1)任务类继承QuartzJobBean

首相定义一个job,就是我们要具体跑的任务

packagexiaolong.com.quartz.play;importorg.quartz.Job;importorg.quartz.JobExecutionContext;importorg.quartz.JobExecutionException;importjava.util.Date;/** * @author zhangxiaolong */publicclassSimpleQuartzJobimplementsJob{// static Log logger = LogFactory.getLog(ScanDirectoryJob.class);//日志记录器publicSimpleQuartzJob(){}@Overridepublicvoidexecute(JobExecutionContext context)throwsJobExecutionException{System.out.println("In SimpleQuartzJob - executing its JOB at "+newDate()+" by "+context.getTrigger().getDescription());}}

然后定义定义我们的触发器trigger

packagexiaolong.com.quartz.play;importorg.quartz.JobDetail;importorg.quartz.Scheduler;importorg.quartz.SchedulerException;importorg.quartz.Trigger;importorg.quartz.impl.StdSchedulerFactory;importstaticorg.quartz.JobBuilder.newJob;importstaticorg.quartz.SimpleScheduleBuilder.simpleSchedule;importstaticorg.quartz.TriggerBuilder.newTrigger;/** * @author zhangxiaolong */publicclassSimpleTriggerRunner{publicstaticvoidmain(String[]args){SimpleTriggerRunner simpleTriggerRunner=newSimpleTriggerRunner();try{Scheduler scheduler=simpleTriggerRunner.createScheduler();simpleTriggerRunner.scheduleJob(scheduler);scheduler.start();}catch(SchedulerExceptione){e.printStackTrace();}}publicSchedulercreateScheduler()throwsSchedulerException{// 创建调度器returnStdSchedulerFactory.getDefaultScheduler();}//Create and Schedule a ScanDirectoryJob with the SchedulerprivatevoidscheduleJob(Scheduler scheduler)throwsSchedulerException{// Create a JobDetail for the JobJobDetail jobDetail=newJob(SimpleQuartzJob.class).withIdentity("myJob","group1").build();// Date runTime = evenMinuteDate(new Date());Trigger trigger=newTrigger().withIdentity("myTrigger","group1").startNow().withSchedule(simpleSchedule().withIntervalInSeconds(5).withRepeatCount(10)).build();// Trigger trigger = newTrigger().withIdentity("myTrigger","group1").startAt(RunTime).build();scheduler.scheduleJob(jobDetail,trigger);}}

最后,我们简单用main方法来调用定时任务;

当然触发器还有一种类似于crontab的方式,即

packagexiaolong.com.quartz.play;importorg.quartz.*;importorg.quartz.impl.StdSchedulerFactory;importstaticorg.quartz.CronScheduleBuilder.cronSchedule;importstaticorg.quartz.JobBuilder.newJob;importstaticorg.quartz.TriggerBuilder.newTrigger;/** * @author zhangxiaolong */publicclassCronTriggerRunner{publicstaticvoidmain(String[]args){CronTriggerRunner cronTriggerRunner=newCronTriggerRunner();try{cronTriggerRunner.createScheduler();cronTriggerRunner.scheduleJob2(cronTriggerRunner.getScheduler());cronTriggerRunner.start();}catch(SchedulerExceptione){e.printStackTrace();}}privatevoidstart(){if(null!=scheduler){try{if(scheduler.isStarted()){System.out.println("has started!");}scheduler.start();}catch(SchedulerExceptione){e.printStackTrace();}}}privateScheduler scheduler;publicvoidcreateScheduler()throwsSchedulerException{// 创建调度器scheduler=StdSchedulerFactory.getDefaultScheduler();}privatevoidscheduleJob(Scheduler scheduler)throwsSchedulerException{JobDetail jobDetail=newJob(SimpleQuartzJob.class).withIdentity("myJob2","group1").build();CronTrigger trigger=newTrigger().withIdentity("myTrigger2","group1").withSchedule(cronSchedule("0/5 * * * * ?")).build();scheduler.scheduleJob(jobDetail,trigger);}privatevoidscheduleJob2(Scheduler scheduler)throwsSchedulerException{JobDetail jobDetail=newJob(SimpleQuartzJob.class).withIdentity("myJob2","group1").build();Trigger trigger=newTrigger().withIdentity("myTrigger3","group1").withSchedule(cronSchedule("0/1 * * * * ?")).build();scheduler.scheduleJob(jobDetail,trigger);}privatevoidstop(){if(null!=scheduler){try{if(!scheduler.isShutdown()){scheduler.shutdown(true);}}catch(SchedulerExceptione){e.printStackTrace();}}}publicSchedulergetScheduler(){returnscheduler;}publicvoidsetScheduler(Scheduler scheduler){this.scheduler=scheduler;}}

(2)在配置文件里定义任务类和要执行的方法,类和方法可以是普通类 在spring的框架中编写一个xml文件, “` xml <?xml version=1.0encoding=UTF-8?>

<bean class="org.springframework.scheduling.quartz.SchedulerFactoryBean"> <property name="triggers"> <list> <ref bean="autoMatchJobTrigger"/> </list> </property> <property name="autoStartup" value="true"/></bean><bean id="autoMatchJobTrigger" class="org.springframework.scheduling.quartz.CronTriggerBean"> <property name="jobDetail" ref="autoMatchJob"/> <!-- 每隔1小时触发一次 --> <property name="cronExpression" value="0 30 20 ? * *"/></bean><bean id="autoMatchJob" class="org.springframework.scheduling.quartz.MethodInvokingJobDetailFactoryBean"> <property name="targetObject" ref="autoMatchTask"/> <property name="targetMethod" value="autoMatching"/> <!-- 是否允许任务并发执行。当值为false时,表示必须等到前一个线程处理完毕后才再启一个新的线程 --> <property name="concurrent" value="false"/></bean><bean id="autoMatchTask" class="com.baijia.accounting.quartz.AutoMatchingTask"> <property name="start" value="${autoMatchingHolderTask.start:true}"/></bean>

配置的内容呢,就是按照quartz的流程去配置一下job、trigger、调度器等等,

具体的任务呢,就可以是

publicclassAutoMatchingTask{privatestaticfinalLogger logger=LoggerFactory.getLogger(AutoMatchingTask.class);privatestaticExecutorService es=Executors.newSingleThreadExecutor();privatebooleanstart;publicvoidsetStart(booleanstart){this.start=start;}publicvoidautoMatching(){dosomething…}

(完)

原创文章,转载请注明:转载自时间记忆

本文链接地址:quartz的简单介绍及应用

三 : 为大家简单地介绍维e的副作用,帮助大家正确使用产品

人体需要的元素都是非常多的,像是维生素E都是这样一种对人体来说很重要的元素了,现在很多朋友都是由于身体上缺少这些元素而出现了很多的其他病症,因此做好身体的元素补充都是必要的。但是我们知道这些维生素能够带来效果的同时也都是会有其他的影响,那么维e的副作用是什么呢?

维e的副作用的话都还是有的,长期服用的话都会有其他的影响,这里就为大家简单地介绍一些比较严重的各种疾病,首先就是对于大家的静脉会有影响,也同时会出现肺栓塞,而要是两者同时出现的的话都是由于是大家服用过多所导致的血小板凝聚。

此外,维e的副作用的话也都是包括了血压升高,毕竟这种产品在帮助治疗的同时都是对人体有负面影响,不过大家只要是停止用药之后就能够恢复正常了,大家也都是能够比较放心的。同时,这种产品的话也都是会有一些其他的不(www.61k.com)良症状的表现,像是头痛头晕、视力模糊等都是经常会有的。

维e的副作用的话也都是包括了激素代谢这样的现象,或者是各种免疫功能失调等,因此这里都是建议大家要不是因为身体非常缺乏维生素E的话最好都是不要长期服用药物,在生活中只要是多吃一些拥有这种元素的食物就可以了,像是菠菜、大豆等这样的营养食品都是不错的。

大家只有把握好维e的副作用才能够帮助带来更多的保健效果了。

四 : LESS CSS 框架简介与使用

简介

CSS(层叠样式表)是一门历史悠久的标记性语言,同 HTML 一道,被广泛应用于万维网(World Wide Web)中。(www.61k.com)HTML 主要负责文档结构的定义,CSS 负责文档表现形式或样式的定义。

作为一门标记性语言,CSS 的语法相对简单,对使用者的要求较低,但同时也带来一些问题:CSS 需要书写大量看似没有逻辑的代码,不方便维护及扩展,不利于复用,尤其对于非前端开发工程师来讲,往往会因为缺少 CSS 编写经验而很难写出组织良好且易于维护的 CSS 代码,造成这些困难的很大原因源于 CSS 是一门非程序式语言,没有变量、函数、SCOPE(作用域)等概念。LESS 为 Web 开发者带来了福音,它在 CSS 的语法基础之上,引入了变量,Mixin(混入),运算以及函数等功能,大大简化了 CSS 的编写,并且降低了 CSS 的维护成本,就像它的名称所说的那样,LESS 可以让我们用更少的代码做更多的事情。

回页首

LESS 原理及使用方式

本质上,LESS 包含一套自定义的语法及一个解析器,用户根据这些语法定义自己的样式规则,这些规则最终会通过解析器,编译生成对应的 CSS 文件。LESS 并没有裁剪 CSS 原有的特性,更不是用来取代 CSS 的,而是在现有 CSS 语法的基础上,为 CSS 加入程序式语言的特性。下面是一个简单的例子:

清单 1. LESS 文件

@color: #4D926F; #header { color: @color; } h2 { color: @color; }

经过编译生成的 CSS 文件如下:

清单 2. CSS 文件

#header { color: #4D926F; } h2 { color: #4D926F; }

从上面的例子可以看出,学习 LESS 非常容易,只要你了解 CSS 基础就可以很容易上手。

LESS 可以直接在客户端使用,也可以在服务器端使用。在实际项目开发中,我们更推荐使用第三种方式,将 LESS 文件编译生成静态 CSS 文件,并在 HTML 文档中应用。

客户端

我们可以直接在客户端使用 .less(LESS 源文件),只需要从 http://lesscss.org下载 less.js 文件,然后在我们需要引入 LESS 源文件的 HTML 中加入如下代码:

<link rel="stylesheet/less" type="text/css" href="styles.less">

LESS 源文件的引入方式与标准 CSS 文件引入方式一样:

<link rel="stylesheet/less" type="text/css" href="styles.less">

需要注意的是:在引入 .less 文件时,rel 属性要设置为“stylesheet/less”。还有更重要的一点需要注意的是:LESS 源文件一定要在 less.js 引入之前引入,这样才能保证 LESS 源文件正确编译解析。

服务器端

LESS 在服务器端的使用主要是借助于 LESS 的编译器,将 LESS 源文件编译生成最终的 CSS 文件,目前常用的方式是利用 node 的包管理器 (npm) 安装 LESS,安装成功后就可以在 node 环境中对 LESS 源文件进行编译。

在项目开发初期,我们无论采用客户端还是服务器端的用法,我们都需要想办法将我们要用到的 CSS 或 LESS 文件引入到我们的 HTML 页面或是桥接文件中,LESS 提供了一个我们很熟悉的功能— Importing。我们可以通过这个关键字引入我们需要的 .less 或 .css 文件。 如:

@import “variables.less”;

.less 文件也可以省略后缀名,像这样:

@import “variables”;

引入 CSS 同 LESS 文件一样,只是 .css 后缀名不能省略。

使用编译生成的静态 CSS 文件

我们可以通过 LESS 的编译器,将 LESS 文件编译成为 CSS 文件,在 HTML 文章中引入使用。这里要强调的一点,LESS 是完全兼容 CSS 语法的,也就是说,我们可以将标准的 CSS 文件直接改成 .less 格式,LESS 编译器可以完全识别。

回页首

语法

变量

LESS 允许开发者自定义变量,变量可以在全局样式中使用,变量使得样式修改起来更加简单。

我们可以从下面的代码了解变量的使用及作用:

清单 3 LESS 文件

@border-color : #b5bcc7; .mythemes tableBorder{ border : 1px solid @border-color; }

经过编译生成的 CSS 文件如下:

清单 4. CSS 文件

.mythemes tableBorder { border: 1px solid #b5bcc7; }

从上面的代码中我们可以看出,变量是 VALUE(值)级别的复用,可以将相同的值定义成变量统一管理起来。

该特性适用于定义主题,我们可以将背景颜色、字体颜色、边框属性等常规样式进行统一定义,这样不同的主题只需要定义不同的变量文件就可以了。当然该特性也同样适用于 CSS RESET(重置样式表),在 Web 开发中,我们往往需要屏蔽浏览器默认的样式行为而需要重新定义样式表来覆盖浏览器的默认行为,这里可以使用 LESS 的变量特性,这样就可以在不同的项目间重用样式表,我们仅需要在不同的项目样式表中,根据需求重新给变量赋值即可。

LESS 中的变量和其他编程语言一样,可以实现值的复用,同样它也有生命周期,也就是 Scope(变量范围,开发人员惯称之为作用域),简单的讲就是局部变量还是全局变量的概念,查找变量的顺序是先在局部定义中找,如果找不到,则查找上级定义,直至全局。下面我们通过一个简单的例子来解释 Scope。

清单 5. LESS 文件

@width : 20px; #homeDiv { @width : 30px; #centerDiv{ width : @width;// 此处应该取最近定义的变量 width 的值 30px } } #leftDiv { width : @width; // 此处应该取最上面定义的变量 width 的值 20px }

经过编译生成的 CSS 文件如下:

清单 6. CSS 文件

#homeDiv #centerDiv { width: 30px; } #leftDiv { width: 20px; }

Mixins(混入)

扩展:less css框架 / css框架怎么使用 / less框架

Mixins(混入)功能对用开发者来说并不陌生,很多动态语言都支持 Mixins(混入)特性,它是多重继承的一种实现,在 LESS 中,混入是指在一个 CLASS 中引入另外一个已经定义的 CLASS,就像在当前 CLASS 中增加一个属性一样。

我们先简单看一下 Mixins 在 LESS 中的使用:

清单 7. LESS 文件

// 定义一个样式选择器  .roundedCorners(@radius:5px) { -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 在另外的样式选择器中使用  #header { .roundedCorners; } #footer { .roundedCorners(10px); }

经过编译生成的 CSS 文件如下:

清单 8. CSS 文件

#header { -moz-border-radius:5px; -webkit-border-radius:5px; border-radius:5px; } #footer { -moz-border-radius:10px; -webkit-border-radius:10px; border-radius:10px; }

从上面的代码我们可以看出:Mixins 其实是一种嵌套,它允许将一个类嵌入到另外一个类中使用,被嵌入的类也可以称作变量,简单的讲,Mixins 其实是规则级别的复用。

Mixins 还有一种形式叫做 Parametric Mixins(混入参数),LESS 也支持这一特性:

清单 9. LESS 文件

// 定义一个样式选择器  .borderRadius(@radius){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } // 使用已定义的样式选择器  #header { .borderRadius(10px); // 把 10px 作为参数传递给样式选择器  } .btn { .borderRadius(3px);// // 把 3px 作为参数传递给样式选择器  }

经过编译生成的 CSS 文件如下:

清单 10. CSS 文件

#header { -moz-border-radius: 10px; -webkit-border-radius: 10px; border-radius: 10px; } .btn { -moz-border-radius: 3px; -webkit-border-radius: 3px; border-radius: 3px; }

我们还可以给 Mixins 的参数定义一人默认值,如

清单 11. LESS 文件

.borderRadius(@radius:5px){ -moz-border-radius: @radius; -webkit-border-radius: @radius; border-radius: @radius; } .btn { .borderRadius; }

经过编译生成的 CSS 文件如下:

清单 12. CSS 文件

.btn { -moz-border-radius: 5px; -webkit-border-radius: 5px; border-radius: 5px; }

像 JavaScript 中 arguments一样,Mixins 也有这样一个变量:@arguments。@arguments 在 Mixins 中具是一个很特别的参数,当 Mixins 引用这个参数时,该参数表示所有的变量,很多情况下,这个参数可以省去你很多代码。

清单 13. LESS 文件

.boxShadow(@x:0,@y:0,@blur:1px,@color:#000){ -moz-box-shadow: @arguments; -webkit-box-shadow: @arguments; box-shadow: @arguments; } #header { .boxShadow(2px,2px,3px,#f36); }

经过编译生成的 CSS 文件如下:

清单 14. CSS 文件

#header { -moz-box-shadow: 2px 2px 3px #FF36; -webkit-box-shadow: 2px 2px 3px #FF36; box-shadow: 2px 2px 3px #FF36; }

Mixins 是 LESS 中很重要的特性之一,我们这里也写了很多例子,看到这些例子你是否会有这样的疑问:当我们拥有了大量选择器的时候,特别是团队协同开发时,如何保证选择器之间重名问题?如果你是 java 程序员或 C++ 程序员,我猜你肯定会想到命名空间 Namespaces,LESS 也采用了命名空间的方法来避免重名问题,于是乎 LESS 在 mixins 的基础上扩展了一下,看下面这样一段代码:

清单 15. LESS 文件

#mynamespace { .home {...} .user {...} }

这样我们就定义了一个名为 mynamespace 的命名空间,如果我们要复用 user 这个选择器的时候,我们只需要在需要混入这个选择器的地方这样使用就可以了。#mynamespace > .user。

嵌套的规则

在我们书写标准 CSS 的时候,遇到多层的元素嵌套这种情况时,我们要么采用从外到内的选择器嵌套定义,要么采用给特定元素加 CLASS 或 ID 的方式。在 LESS 中我们可以这样写:

清单 16. HTML 片段

<div id="home"> <div id="top">top</div> <div id="center"> <div id="left">left</div> <div id="right">right</div> </div> </div>

清单 17. LESS 文件

#home{ color : blue; width : 600px; height : 500px; border:outset; #top{ border:outset; width : 90%; } #center{ border:outset; height : 300px; width : 90%; #left{ border:outset; float : left; width : 40%; } #right{ border:outset; float : left; width : 40%; } } }

经过编译生成的 CSS 文件如下:

清单 18. CSS 文件

#home { color: blue; width: 600px; height: 500px; border: outset; } #home #top { border: outset; width: 90%; } #home #center { border: outset; height: 300px; width: 90%; } #home #center #left { border: outset; float: left; width: 40%; } #home #center #right { border: outset; float: left; width: 40%; }

从上面的代码中我们可以看出,LESS 的嵌套规则的写法是 HTML 中的 DOM 结构相对应的,这样使我们的样式表书写更加简洁和更好的可读性。同时,嵌套规则使得对伪元素的操作更为方便。

扩展:less css框架 / css框架怎么使用 / less框架

清单 19. LESS 文件

a { color: red; text-decoration: none; &:hover {// 有 & 时解析的是同一个元素或此元素的伪类,没有 & 解析是后代元素  color: black; text-decoration: underline; } }

经过编译生成的 CSS 文件如下:

清单 20. CSS 文件

a { color: red; text-decoration: none; } a:hover { color: black; text-decoration: underline; }

运算及函数

在我们的 CSS 中充斥着大量的数值型的 value,比如 color、padding、margin 等,这些数值之间在某些情况下是有着一定关系的,那么我们怎样利用 LESS 来组织我们这些数值之间的关系呢?我们来看这段代码:

清单 21 . LESS 文件

@init: #111111; @transition: @init*2; .switchColor { color: @transition; }

经过编译生成的 CSS 文件如下:

清单 22. CSS 文件

.switchColor { color: #222222; }

上面的例子中使用 LESS 的 operation 是 特性,其实简单的讲,就是对数值型的 value(数字、颜色、变量等)进行加减乘除四则运算。同时 LESS 还有一个专门针对 color 的操作提供一组函数。下面是 LESS 提供的针对颜色操作的函数列表:

lighten(@color, 10%); // return a color which is 10% *lighter* than @color darken(@color, 10%); // return a color which is 10% *darker* than @color saturate(@color, 10%); // return a color 10% *more* saturated than @color desaturate(@color, 10%);// return a color 10% *less* saturated than @color fadein(@color, 10%); // return a color 10% *less* transparent than @color fadeout(@color, 10%); // return a color 10% *more* transparent than @color spin(@color, 10); // return a color with a 10 degree larger in hue than @color spin(@color, -10); // return a color with a 10 degree smaller hue than @color

PS: 上述代码引自 LESS CSS 官方网站,详情请见 http://lesscss.org/#-color-functions

使用这些函数和 JavaScript 中使用函数一样。

清单 23 LESS 文件

init: #f04615; #body { background-color: fadein(@init, 10%); }

经过编译生成的 CSS 文件如下:

清单 24. CSS 文件

#body { background-color: #f04615; }

从上面的例子我们可以发现,这组函数像极了 JavaScript 中的函数,它可以被调用和传递参数。这些函数的主要作用是提供颜色变换的功能,先把颜色转换成 HSL 色,然后在此基础上进行操作,LESS 还提供了获取颜色值的方法,在这里就不举例说明了。

LESS 提供的运算及函数特性适用于实现页面组件特性,比如组件切换时的渐入渐出。

Comments(注释)

适当的注释是保证代码可读性的必要手段,LESS 对注释也提供了支持,主要有两种方式:单行注释和多行注释,这与 JavaScript 中的注释方法一样,我们这里不做详细的说明,只强调一点:LESS 中单行注释 (// 单行注释 ) 是不能显示在编译后的 CSS 中,所以如果你的注释是针对样式说明的请使用多行注释。

LESS VS SASS

同类框架还有 SASS : http://sass-lang.com/, 与 LESS 相比,两者都属于 CSS 预处理器,功能上大同小异,都是使用类似程序式语言的方式书写 CSS, 都具有变量、混入、嵌套、继承等特性,最终目的都是方便 CSS 的书写及维护。

LESS 和 SASS 互相促进互相影响,相比之下 LESS 更接近 CSS 语法,更多两者之间的比较,请参考这篇帖子:https://gist.github.com/674726。

扩展:less css框架 / css框架怎么使用 / less框架

本文标题:jenkins简单使用介绍-fusioncharts:fusioncharts-简介,fusioncharts-使用好处
本文地址: http://www.61k.com/1133733.html

61阅读| 精彩专题| 最新文章| 热门文章| 苏ICP备13036349号-1