原文:How to Create a Dark Ext JS Theme– Part 2

我已经展示了如何去开发一个精致的暗黑主题,看起来就像Spotify。在本文的第一部分,了解了Fashion、Sencha Inspector、主题和变量。在第二部分,将重点介绍更高级的概念,使用Ext JS UI和CSS重写制作独特的组件以及如何去合并自定义字体或图标。

你可以使用该教程来帮助你创建Sencha应用程序主题大赛的参赛作品。

第一名的获奖者将获得2500美金!

现在就报名吧。

自定义CSS规则和混入

在做Spotifext主题的时候,我做了几样东西让它看起来更棒,如编写了一些CSS规则来实现按钮悬停动画,使用了自定义字体,并创建了自己的按钮和标签面板变量以给它一个独特的外观。

刚才所说的变量,可以用来修改应用程序及其所有组件的的整体外观。不过,有时候只是希望有些组件显得特别而已。看看下面已完成的Spotifinder应用程序的图片,会发现标签面板不像默认的Ext JS标签。按钮可以是方形的或是圆角的,而颜色可以是绿色或灰色。这个是在底层使用Ext JS UI的Sass混入来实现的。一个混入就是一个CSS规则块,可以在整个应用程序中重复使用。

以下是示例的Sass混入:

@mixin my-border-radius($radius) {
-webkit-border-radius: $radius;
-moz-border-radius: $radius;
-ms-border-radius: $radius;
border-radius: $radius;
}

以上Sass混入可以用来创建圆角,由于编写时使用了实验过的浏览器前缀,因此该CSS3功能可跨浏览器支持。由于不是去编写每一个CSS规则,只是包含了my-border-radiu混入并给它传递一个参数,因而所有的CSS规则在编译后都会被修改:

.box { @include border-radius(10px); }

在编译后的CSS,看起来就像以下代码(除了minified):

.box {
-webkit-border-radius: 10px;
-moz-border-radius: 10px;
-ms-border-radius: 10px;
border-radius: 10px;
}

Sass混入是一个伟大的概念,而且可以在Ext JS中使用。我们一般称它为UI,而且他们基本上就是皮肤。Ext JS包含了开箱即用的UI,例如,在modern工具包,对于后退按钮、圆角按钮甚至更多其他东西,都有UI,而且这些提供的UI,可以使用自己的参数来重用。

在Sencha AIP的文档可以找到这些混入,例如,找到Ext.button.Button,会在按钮在不同状态中的Sass混入。未了实现这些混入,要使用@include,然后在Ext JS中混入名称并传递参数。

{.aligncenter}

要创建更漂亮的圆角按钮,可以看看这里。

我使用了以下混入代码来创建了一个新的“scale:small”按钮,对于参数,传递了UI名称“round”,这样,在视图中就可以使用“ui:’round’”来定义。参数中还传递了font-weight、padding和背景颜色。

@include extjs-button-small-ui(
$ui: 'round',
$font-weight: bold,
$padding: 5px,
$background-color: $highlight-color
);

你可以已经注意到按钮是带动画的,而类似Spotify的标签面板的外观与Ext JS混入提供的有点不同。查看一下sass/src文件夹,在该文件夹中,会看到我所编写的所以Ext JS混入与自定义的Sass规则。

{.aligncenter}

独特的按钮

正如在应用程序中所看到的,按钮会比API提供的配置项多了一些自定义的配置项。应用程序所包含的代码让动画更平滑。在每一次翻转,按钮会缓慢的加亮ups。实现这个使用了自定义的Sass/CSS代码。

来看一下代码:

.x-btn-round-large,
.x-btn-round-medium,
.x-btn-round-small {
&:hover {
background-color: $highlight-color2;
-webkit-transition: background-color 2s ease-out;
-moz-transition: background-color 2s ease-out;
-o-transition: background-color 2s ease-out;
transition: background-color 2s ease-out;
}
}

CSS的类名来自于混入。小按钮的ui名称被定义为“round”。当将该UI应用到视图的时候,在浏览器的DOM中会看到UI赋予组件的类名是“.x-btn-‹ui-name›-small”。

所有的Sencha组件会通过默认的.x前缀来获取CSS类名。在前缀之后,就是组件(btn)的名称,然后是UI的名称。对于按钮,它还要包含比例,如果没有,它可能在工具栏中。请参阅extjs-button-toolbar-small-ui混入。

所提供的自定义代码监听了按钮的悬停,当将鼠标移动到按钮上方时,它会转换背景色,从默认背景色(黑色)转换为新颜色(在背景色规则中看到的绿色)。

独特的标签

有时候,并不想使用自定义的CSS代码来添加更多功能,而是希望重写默认的外观和感觉,例如,当UI混入不提供所需的配置的时候。

下图是使用了该方式实现的独特外观的标签:

{.aligncenter}

所需代码可以在这里找到,查看文件中的CSS类.x-tab-bar-alternative。

你可能很想知道使用UI混入与混入有什么不同。UI混入很伟大,是因为它可以样式化整个应用程序,而且通过Ext JS所包含的代码支持任何浏览器。缺点是,样式表的代码会增长。这也是UI混入通常用于在整个应用程序中实现样式和规则复用的原因。

CSS规则和重写也很伟大,因为它是一种快速解决方案。缺点是,它很复杂,因为这需要进行跨浏览器测试,而且需要了解如何去生成DOM。当UI混入没有提供所需配置,又或者只需要在啊几个地方使用CSS规则的时候,才会使用CSS重写和规则。

合并字体

自定义主题最后要做的是合并自定义字体和图标(图标字体),请参考这个文件

这里包含了两种自定义字体,一个是谷歌字体(由谷歌字体提供),另一个是为网站创建的名为Spotifinder的图标字体。这个是一个自选的图标集,并生成出来的。

这两种字体都是@font-face字体,因而需要在样式表中针对不同的浏览器定义不同的字体扩展。对于图标字体,只能手动加入。请参阅这4种字体扩展。通常,在类似icomoon这样的图标网站创建自定义图标字体的时候,可以直接下载样式表并使用它。在示例中,需要的只是复制和粘贴而已,而在某些时候,就需要自己去编写它了。

谷歌字体就很简单了,因为Sencha提供了一个全局的UI混入。该混入会从谷歌通过导入代码的方式将代码推送到编译的CSS代码中的所有扩展中。请参阅这篇文档。要注意的是,从一个字体提供者(如谷歌字体)中使用自定义字体的,需要一个额外的请求来请求字体。替代的方法是从一个自己的@font-face字体网站(如http://www.fontsquirrel.com/)下载并提供完整导入代码,就像我所做的图标字体。

一旦字体导入正确,就可以使用它了。在这里,通过指向$font-family就可以使用谷歌字体了。

小结

就是这样!我已经讲述了有关创建一个很棒主题的一切,如Spotifext主题。看看下面的截图,并考虑一下如何将它应用到现实中的应用程序中。

千万不要忘记报名参加Sencha主题大赛。第一名获奖者将会赢得2500美金!

{.aligncenter}

作者:Lee Boonstra


Lee is a sales engineer at Sencha in Europe. She’s located in Amsterdam and has experience in both front-end and back-end development. Lee spends her spare time developing web and mobile apps. She also wrote a book for O’Reilly: Hands-on Sencha Touch 2.

【翻译】如何创建Ext JS暗黑主题之二的更多相关文章

  1. 【翻译】如何创建Ext JS暗黑主题之一

    原文:How to Create a Dark Ext JS Theme– Part 1 概述 我是不是都要演示我的Spotifinder Ext JS应用程序.它是一个很酷的应用程序,可连接到Las ...

  2. 【翻译】在Ext JS中创建特定主题的重写

    Ext JS提供了大量的功能来使类的创建和处理变得简单,还提供了一系列的功能来扩展和重新现有的Javascript类.这意味着可以为类添加行为和创建属于自己的类,或者重写某些函数的行为.在本文,将展示 ...

  3. Sencha Cmd创建Ext JS示例项目

    Sencha提供了免费的Cmd工具,可以用来创建Ext JS项目并提供了一些便利的功能. Sencha也在官方文档中提供了一个示例来演示如何创建一个Sample Login App. 本文就介绍一下这 ...

  4. 【翻译】在Ext JS和Sencha Touch中创建自己定义布局

    原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置 ...

  5. 【翻译】在Ext JS和Sencha Touch中创建自定义布局

    原文:Creating Custom Layouts in Ext JS and Sencha Touch 布局系统是Sencha框架中最强大和最独特的一部分.布局会处理应用程序中每个组件的大小和位置 ...

  6. 【翻译】Sencha Ext JS 5公布

    原文:Announcing Sencha Ext JS 5 简单介绍 我代表Sencha和整个Ext JS团队,非常自豪的宣布,在今天,Sencha Ext JS 5公布了.Ext JS 5已经迈出了 ...

  7. 【翻译】Sencha Ext JS 5发布

    原文:Announcing Sencha Ext JS 5 简介 我代表Sencha和整个Ext JS团队,很自豪的宣布,在今天,Sencha Ext JS 5发布了.Ext JS 5已经迈出了一大步 ...

  8. 【翻译】对于Ext JS 5,你准备好了吗?

    原文:Are You Ready for Ext JS 5? Ext JS 5:准备升级 对于Ext JS 5加入Sencha的大家庭,我们感到非常高兴!作为一个主要版本,在Ext JS 5引入了一堆 ...

  9. 【翻译】为Ext JS和Sencha Touch开发人员准备的应用程序监测(App Inspector)

    和其他的Sencha开发人员一样,我会花费大约半天的时间在我喜欢的IDE工具上编写JavaScript,而另一半时间则是在浏览器上测试和调试我的应用程序.在过去几年,每一个主要的浏览器都已大为改善.现 ...

随机推荐

  1. 使用Web Audio API绘制音波图

    摘要:Web Audio API是对<audio> 标签功能上的补充,我们可以用它完成混音.音效.平移等各种复杂的音频处理,本文简单的使用其完成音波图的绘制. PS:本例子使用ES6编程, ...

  2. PHP MySQL Where 子句

    WHERE 子句 WHERE 子句用于提取满足指定标准的的记录. 语法 SELECT column_name(s) FROM table_name WHERE column_name operator ...

  3. Docker配置 DNS

    Docker 没有为每个容器专门定制镜像,那么怎么自定义配置容器的主机名和 DNS 配置呢? 秘诀就是它利用虚拟文件来挂载到来容器的 3 个相关配置文件. 在容器中使用 mount 命令可以看到挂载信 ...

  4. Django URL (路由系统)

    URL配置(URLconf)就像Django 所支撑网站的目录.它的本质是URL模式以及要为该URL模式调用的视图函数之间的映射表:你就是以这种方式告诉Django,对于这个URL调用这段代码,对于那 ...

  5. 《Java多线程编程核心技术》推荐

    写这篇博客主要是给猿友们推荐一本书<Java多线程编程核心技术>. 之所以要推荐它,主要因为这本书写得十分通俗易懂,以实例贯穿整本书,使得原本抽象的概念,理解起来不再抽象. 只要你有一点点 ...

  6. Playground中格式注释语法

    类似于Ruby的ruby document,Xcode的Playground自身也提供一些嵌入文档中的格式注释的语法. 我们先定义一个简单的类: class A{ } 按住opt点击class A,你 ...

  7. Android布局概述

    布局 布局定义用户界面的视觉结构,如Activity或应用小部件的 UI.您可以通过两种方式声明布局: 在 XML 中声明 UI 元素.Android 提供了对应于 View 类及其子类的简明 XML ...

  8. Linux下文件和文件夹操作命令详解

    花了两个小时的时间,把文件和文件夹相关的常用命令:创建.删除.移动.复制.查找.重命名在linux上测试了一把,总结下来.文件夹的这些基本操作是要多注意的,一不小心就达不到你想要的效果. 文件夹操作: ...

  9. activiti实战系列 排他网关(ExclusiveGateWay)

    流程图 12.2:部署流程定义+启动流程实例 12.3:查询我的个人任务 12.4:完成我的个人任务 说明: 1)     一个排他网关对应一个以上的顺序流 2)     由排他网关流出的顺序流都有个 ...

  10. LeakCanary使用手册

    demo 一个非常简单的 LeakCanary demo: https://github.com/liaohuqiu/leakcanary-demo 开始使用 在 build.gradle 中加入引用 ...