时间:2015-03-24 来源:

Android最佳性能实践(四)——布局优化技巧 【编程语言】

转载请注明出处:http://blog.csdn.net/guolin_blog/article/details/43376527

第一时间获得博客更新提醒web前端制作,以及更多技术信息分享,web前端制作欢迎关注我的微信公众号div前端切图,即可关注.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:hint="Edit something here" /> <include layout="@layout/ok_cancel_layout"/> </LinearLayout>在profile.xml当中有一个EditText控件用于编辑内容web切图报价,然后下面使用了<include>标签来将ok_cancel_layout布局进行引入,手机html制作现在重新运行一下程序符合w3c标准,界面效果如下图所示:

相信大家已经可以看出来了吧,符合w3c标准这个内部的LinearLayout就是一个多余的布局嵌套网页外包接活,实际上并不需要这样一层,jpg或psd转html让两个按钮直接包含在外部的LinearLayout当中就可以了.而这个多余的布局嵌套其实就是由于布局引入所导致的web前端制作,因为我们在ok_cancel_layout.xml中也定义了一个LinearLayout.那么应该怎样优化掉这个问题呢?当然就是使用<merge>标签来完成了,web前端制作修改ok_cancel_layout.xml中的代码承接网页制作,如下所示:

接着修改ProfileActivity中的代码,承接网页制作在Activity中添加More Button的点击事件web切图报价,并在点击事件中进行如下逻辑处理:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical" > <Button android:id="@+id/ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:text="OK" /> <Button android:id="@+id/cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:text="Cancel" /> </LinearLayout>可以看到,网站div+css这个界面也是非常简单符合w3c标准,LinearLayout中包含了两个按钮网页外包接活,一个用于实现确定功能,网页外包接活一个用于实现取消功能.现在我们可以来预览一下这个界面web前端制作,如下图所示:

这里举个大家都非常熟悉的例子,div+css制作我们在添加联系人的时候其实可以编辑的字段真的非常多承接网页制作,姓名、电话、email、传真、住址、昵称等等等等,承接网页制作但其实基本上大家最常用的就是填一个姓名web切图报价,填一个电话而已.那么将这么多繁杂的字段都一起显示在界面上其实并不是一种很好的做法,手机html制作因为大多数人都是用不到这些字段的.比较聪明的做法就是把最常用的姓名和电话显示在界面上符合w3c标准,然后给用户提供一个添加更多字段的选项,html切图制作当用户真的有需要去添加其它信息的时候网页外包接活,我们才将另外的元素显示到界面上.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include android:layout_width="match_parent" android:layout_height="wrap_content" layout="@layout/titlebar" /> ...... </LinearLayout>现在重新运行一下程序应该就可以一切正常了,网页外包接活如下图所示:

另外需要提醒大家一点web前端制作,ViewStub所加载的布局是不可以使用<merge>标签的,web前端制作因此这有可能导致加载出来的布局存在着多余的嵌套结构承接网页制作,具体如何去取舍就要根据各自的实际情况来决定了,div前端切图对于那些隐藏的布局文件结构相当复杂的情况web切图报价,使用ViewStub还是一种相当不错的选择的,手机html制作即使增加了一层无用的布局结构符合w3c标准,仍然还是利大于弊.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <include layout="@layout/titlebar" /> ...... </LinearLayout>非常简单吧,符合w3c标准一行include语句就可以搞定了.<include>标签当中可以指定一个layout属性网页外包接活,我们在这个layout属性中填写需要引入的布局名就可以了.而且使用这种引入的方式,jpg或psd转html以后如果titlebar的界面有所变更web前端制作,我们只需要修改titlebar.xml这一个文件就可以了,web前端制作而不是所有界面一个个地去修改.

好的承接网页制作,然后我们有一个profile.xml的界面需要编辑一些内容,承接网页制作那么这里就可以将ok_cancel_layout这个布局引入到profile.xml界面当中web切图报价,如下所示:

没有问题,网站div+cssprofile_extra.xml中定义的布局已经加载出来了符合w3c标准,而且显示的位置也是在More按钮和OK按钮之间,符合w3c标准正是ViewStub控件定义的位置网页外包接活,说明我们确实已经将ViewStub成功使用起来了.

private EditText editExtra1; private EditText editExtra2; private EditText editExtra3; public void onMoreClick() { ViewStub viewStub = (ViewStub) findViewById(R.id.view_stub); if (viewStub != null) { View inflatedView = viewStub.inflate(); editExtra1 = (EditText) inflatedView.findViewById(R.id.edit_extra1); editExtra2 = (EditText) inflatedView.findViewById(R.id.edit_extra2); editExtra3 = (EditText) inflatedView.findViewById(R.id.edit_extra3); } } 当点击More Button之后我们首先会调用findViewById()方法将ViewStub的实例获取到,网页外包接活拿到ViewStub的实例之后就很简单了web前端制作,调用inflate()方法或者setVisibility(View.VISIBLE)都可以将隐藏的布局给加载出来,div+css制作而加载的这个布局就是刚才在XML当中配置的profile_extra布局.

在上面我们讲解<include>标签的用法时主要介绍了它优点承接网页制作,但是它也存在着一个不好的地方,承接网页制作就是可能会导致产生多余的布局嵌套.这里还是通过举例的方式跟大家说明一下web切图报价,比如说我们需要编写一个确定取消按钮的公共布局,手机html制作这样任何一个界面需要确定和取消功能时就不用再单独编写了符合w3c标准,代码如下所示:

说到实现这样一个功能网页外包接活,我相信大多数人的第一反应就是将不常用的元素使用INVISIBLE或者GONE进行隐藏,网页外包接活然后当用户需要使用这些元素的时候再把它们置成VISIBLE显示出来.使用这种方式肯定可以实现功能的web前端制作,但是性能方面就表现得一般了,web前端制作因为即使是将元素进行隐藏承接网页制作,它们其实还是在布局当中的,div前端切图每个元素还拥有着自己的宽、高、背景等等属性web切图报价,可以看到符合w3c标准,现在EditText和两个按钮都直接包含在了LinearLayout下面,符合w3c标准我们的profile.xml当中也就不存在多余的布局嵌套了.

在前面几篇文章当中网页外包接活,我们学习了如何通过合理管理内存,jpg或psd转html以及高性能编码技巧的方式来提升应用程序的性能.然而实际上界面布局也会对应用程序的性能产生比较大的影响web前端制作,如果布局写得糟糕的话,web前端制作那么程序加载UI的速度就会非常慢承接网页制作,从而造成不好的用户体验.那么本篇文章我们就来学习一下,承接网页制作如何通过优化布局来提供应用程序的性能.还没有看过前面前面一篇文章的朋友建议可以先去阅读 Android最佳性能实践(三)——高性能编码优化 .

那么我们如何才能让这些不常用的元素仅在需要时才去加载呢?Android为此提供了一种非常轻量级的控件web切图报价,ViewStub.ViewStub虽说也是View的一种,网站div+css但是它没有大小符合w3c标准,没有绘制功能,符合w3c标准也不参与布局网页外包接活,资源消耗非常低,网页外包接活将它放置在布局当中基本可以认为是完全不会影响性能的.

这里举个例子吧web前端制作,我们应该都知道,div+css制作目前几乎所有的软件都会有一个头布局承接网页制作,头布局中可以包含界面的标题、返回按钮、以及其它一些操作功能等.那这样的一个头布局,承接网页制作有些软件是使用ActionBar来实现的web切图报价,但是由于ActionBar的灵活性不太好,手机html制作因而也有很多软件会选择自己去编写实现.那如果自己去实现的话符合w3c标准,由于这个头布局是在所有界面都要使用的,html切图制作显然我们不可能在每个界面当中都去写一遍这个头布局的代码网页外包接活,因此这种情况下使用<include>标签就非常合适了.这里为了给大家演示一下,网页外包接活我就编写一个非常简单的头布局web前端制作,在res/layout文件夹中新建titlebar.xml作为头布局,web前端制作代码如下所示:

等等!现在如果你运行一下程序会发现出大问题了承接网页制作,虽然titlebar是成功引入了,div前端切图但是我们activity_main.xml中本来的界面全部都不见了!出现这个问题是原因是因为titlebar的最外层布局是一个宽高都是match_parent的RelativeLayout,它会将整个布局都填充满,手机html制作因而我们原本的布局也就看不见了.那既然问题的原因清楚了符合w3c标准,相信你立刻就想到应该怎么修改了,符合w3c标准将RelativeLayout的layout_height属性修改成wrap_content不就可以了嘛.没错网页外包接活,这样修改当然是没问题的,jpg或psd转html不过这种修改方式会让所有引用titlebar的界面都受到影响web前端制作,而如何你只希望让activity_main.xml这一个界面受影响的话,web前端制作那么可以使用覆写<include>属性的方式.

仅在需要时才加载布局有的时候我们会遇到这样的场景承接网页制作,就是某个布局当中的元素非常多,承接网页制作但并不是所有元素都一起显示出来的web切图报价,而是普通情况下只显示部分常用的元素,网站div+css而那些不常用的元素只有在用户进行特定操作的情况下才会显示出来.

在<include>标签当中符合w3c标准,我们是可以覆写所有layout属性的,符合w3c标准即include中指定的layout属性将会覆盖掉titlebar中指定的layout属性.因此网页外包接活,就可以这样写:

现在我们重新运行一下程序web前端制作,界面如下图所示:

下面我们就来学习一下如何使用ViewStub来完成仅在需要时才去加载布局的功能,div+css制作目前profile.xml中只有一个EditText用于编辑信息承接网页制作,就可以将它们定义在另外一个布局文件当中.新建profile_extra.xml文件web切图报价,代码如下所示:

重用布局文件Android系统中已经提供了非常多好用的控件,手机html制作这让我们在编写布局的时候可以很轻松.但是有些时候我们可能需要反复利用某个已经写好的布局符合w3c标准,如果你总是使用复制粘贴的方式来进行布局重用,html切图制作这显然是一种很笨的做法.而Android当然也已经充分考虑到了布局重用的重要性网页外包接活,于是提供了<include>和<merge>这两个非常有用的标签,网页外包接活下面我们就来逐个学习一下.

目前profile_extra.xml是一个独立的布局web前端制作,和profile.xml这个布局文件是完全没有关系的.接下来我们修改profile.xml文件中的代码,web前端制作如下所示:

好的承接网页制作,那么最佳性能实践系列的文章就到此结束,div前端切图感谢大家有耐心看到最后.

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/edit_extra1" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:hint="Extra field 1" /> <EditText android:id="@+id/edit_extra2" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:hint="Extra field 2" /> <EditText android:id="@+id/edit_extra3" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:hint="Extra field 3" /> </LinearLayout>可以看到web切图报价,也就是用于编辑那些不常用信息的控件符合w3c标准,现在我们可以来预览一下这个布局,符合w3c标准如下图所示:

看上去效果非常不错对吗?可是在你毫无察觉的情况下网页外包接活,目前profile.xml这个界面当中其实已经存在着多余的布局嵌套了!感觉还没写几行代码呢,jpg或psd转html怎么这就已经有多余的布局嵌套了?不信的话我们可以通过View Hierarchy工具来查看一下web前端制作,如下图所示:

调用inflate()方法之后会将加载出来的布局进行返回,web前端制作之后我们就可以对这个布局进行任意的操作了承接网页制作,再次隐藏显示,承接网页制作或者获取子元素的实例等.注意这里我对ViewStub的实例进行了一个非空判断web切图报价,这是因为ViewStub在XML中定义的id只在一开始有效,网站div+css一旦ViewStub中指定的布局加载之后符合w3c标准,这个id也就失败了,符合w3c标准那么此时findViewById()得到的值也会是空.

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <Button android:id="@+id/back" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentLeft="true" android:layout_centerVertical="true" android:text="Back" /> <TextView android:id="@+id/title" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerInParent="true" android:text="Title" android:textSize="20sp" /> <Button android:id="@+id/done" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignParentRight="true" android:layout_centerVertical="true" android:text="Done" /> </RelativeLayout>可以看到网页外包接活,titlebar.xml中的布局非常简单,网页外包接活外层是一个RelativeLayout,左边的Button用于实现返回功能承接网页制作,右边的Button用于实现完成功能,承接网页制作中间的TextView则可以用于显示当前界面的标题.我们可以来预览一下titlebar的样子web切图报价,如下图所示:

<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" > <EditText android:id="@+id/edit" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginBottom="10dp" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:hint="@string/edit_something_here" /> <Button android:id="@+id/more" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right" android:layout_marginRight="20dp" android:layout_marginBottom="10dp" android:text="More" /> <ViewStub android:id="@+id/view_stub" android:layout="@layout/profile_extra" android:layout_width="match_parent" android:layout_height="wrap_content" /> <include layout="@layout/ok_cancel_layout" /> </LinearLayout>可以看到,手机html制作这里我们新增了一个More Button,这个按钮就是用于去加载那些不常用的元素的,html切图制作然后在Button的下面定义了一个ViewStub.在ViewStub控件中网页外包接活,我们先是通过id属性给它指定了一个唯一标识,网页外包接活又通过layout属性将profile_extra布局传入进来web前端制作,接着给ViewStub指定了一个宽高.注意,web前端制作虽然ViewStub是不占用任何空间的承接网页制作,但是每个布局都必须要指定layout_width和layout_height属性,div前端切图否则运行就会报错.

可以看到web切图报价,界面上只有一个More按钮,手机html制作ViewStub是完全不占用任何空间的.然后点击一下More按钮符合w3c标准,新的界面如下所示:

<merge><merge>标签是作为<include>标签的一种辅助扩展来使用的,符合w3c标准它的主要作用是为了防止在引用布局文件时产生多余的布局嵌套.大家都知道网页外包接活,Android去解析和展示一个布局是需要消耗时间的,jpg或psd转html布局嵌套的越多web前端制作,那么解析起来就越耗时,web前端制作性能也就越差承接网页制作,因此我们在编写布局文件时应该让嵌套的层数越少越好.

<?xml version="1.0" encoding="utf-8"?> <merge xmlns:android="http://schemas.android.com/apk/res/android"> <Button android:id="@+id/ok" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:text="OK" /> <Button android:id="@+id/cancel" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_marginLeft="20dp" android:layout_marginRight="20dp" android:layout_marginTop="10dp" android:text="Cancel" /> </merge>可以看到,承接网页制作这里我们将ok_cancel_layout最外层的LinearLayout布局删除掉web切图报价,换用了<merge>标签,网站div+css这就表示当有任何一个地方去include这个布局时符合w3c标准,会将<merge>标签内包含的内容直接填充到include的位置,符合w3c标准不会再添加任何额外的布局结构.好的网页外包接活,<merge>的用法就是这么简单,网页外包接活现在重新运行一下程序web前端制作,你会看到界面没有任何改变,div+css制作然后我们再通过View Hierarchy工具来查看一下当前的View结构承接网页制作,如下图所示:

经过四篇文章的学习,承接网页制作我们已经掌握了不少可以提高Android应用程序性能的技巧web切图报价,我也是从中选取了一些感觉比较实用的部分符合w3c标准,然后又加入了自己的理解呈现给大家.如果大家想要继续学习更多关于性能优化的技巧,html切图制作可以到这个网址上阅读更多内容 http://developer.android.com/training/best-performance.html .

<include><include>标签可以允许在一个布局当中引入另外一个布局网页外包接活,那么比如说我们程序的所有界面都有一个公共的部分,网页外包接活这个时候最好的做法就是将这个公共的部分提取到一个独立的布局文件当中web前端制作,然后在每个界面的布局文件当中来引用这个公共的布局.

除了layout_height之外,web前端制作我们还可以覆写titlebar中的任何一个layout属性承接网页制作,如layout_gravity、layout_margin等,div前端切图而非layout属性则无法在<include>标签当中进行覆写.另外需要注意的是web切图报价,如果我们想要在<include>标签当中覆写layout属性,手机html制作必须要将layout_width和layout_height这两个属性也进行覆写符合w3c标准,否则覆写效果将不会生效.

可以看到,符合w3c标准最外层首先是一个FrameLayout,这个无可厚非,jpg或psd转html不知道为什么最外层是FrameLayout的朋友可以去参考 Android LayoutInflater原理分析web前端制作,这个就是我们在profile.xml中定义的最外层布局.接下来的部分就有问题了承接网页制作,在最外层的LinearLayout当中包含了两个元素,承接网页制作一个是EditText,然后在这个内部的LinearLayout当中才包含了确定和取消这两个按钮.

好的符合w3c标准,那titlebar作为一个独立的布局现在我们已经编写完了,符合w3c标准接下来的工作就非常简单了网页外包接活,无论任何界面需要加入titlebar这个功能,网页外包接活只需要在布局文件中引入titlebar.xml就可以了.那么比如说我们的程序当中有一个activity_main.xml文件web前端制作,现在想要引入titlebar只需要这样写:

点击次数:14129
作者:
web前端行业资讯
Web new NewsList
英特尔宣布与法拉利跨界合作欲将AI技术用于赛车运动 ,,2018年01月11日甲骨文服务器出漏洞:攻击者用漏洞挖矿获取加密货币 ,,2018年01月11日用深度学习设计图像视频压缩算法:更简洁、更强大 ,,2018年01月11日Ubuntu内核和NVIDIA更新:修复Meltdown和Spectre两处漏洞 ,,2018年01月11日AntDesign3.1.1发布,阿里企业级UI设计语言 ,,2018年01月11日微信「跳一跳」带火小游戏,开发者如何快速上手? ,,2018年01月11日谷歌公布最新安卓系统份额:你用上奥利奥了么? ,,2018年01月11日腾讯开发出“3D音效”算法:普通耳机实现3D实时语音效果 ,,2018年01月11日谷歌工程师点赞中国程序员实现Node.js启动超4倍提速 ,,2018年01月11日三星电子总裁兼CE部门负责人金炫奭:万物互联时代到来 ,,2018年01月11日NVIDIA和大众合作建立智能驾驶助手 ,,2018年01月11日GIMPS项目报告发现已知最大素数 ,,2018年01月11日微软与生物技术公司开展AI驱动的血液检测同时诊断数十种疾病 ,,2018年01月11日微软跨平台移动开发工具套件HockeyApp宣布免费 ,,2018年01月11日《硅谷》里神乎其神的压缩技术,AI正在一点点做出来 ,,2018年01月11日LinuxMint19代号敲定为“Tara”预计2018年5月至6月期间发布 ,,2018年01月11日Facebook发布wav2letter工具包,用于端到端自动语音识别 ,,2018年01月11日开源数据库ArangoDB正进行约1156万美元股权融资 ,,2018年01月11日IntelCPU漏洞闹大:腾讯云紧急升级 ,,2018年01月11日2018年1月全球数据库排名:Redis夺回第八 ,,2018年01月11日Lyft将联手无人驾驶公司于CES上展示无人驾驶汽车 ,,2018年01月11日京东X无人超市首家社会门店开业:刷脸进、微信自动结算 ,,2018年01月11日担心被AI取代是杞人忧天?高晓松跨年演讲说的有几分对 ,,2018年01月11日免费授权技术许可Intel宣布在未来CPU中集成雷电3 ,,2018年01月11日算法决定你在社交媒体上看到的信息 ,,2018年01月11日谷歌安全博客披露“英特尔内核漏洞”更多细节 ,,2018年01月04日Postgres10开发者新特性 ,,2017年12月28日阿里巴巴、狗尾草、苏大联合论文:基于对抗学习的众包标注用于中文命名实体识别 ,,2017年12月28日柯洁的2017:20岁,与AI斗与人类斗,其乐无穷 ,,2017年12月28日如果机器人拥有痛觉,这个世界会有哪些不一样? ,,2017年12月28日php中获取指定IP的物理地址的代码(正则表达式)2014年01月29日2015年工作中遇到的问题:21-30(这10个问题很有价值) 【数据库】2015年01月26日asp.net读取配置文件方法2014年01月29日USACO--3.1Factorials 【系统运维】2015年04月17日properties读取【编程语言】2015年02月09日POJ3261 【数据库】2015年08月27日LintCode-不同的子序列 【移动开发】2015年05月25日atitit.软件开发概念--过滤和投影数据操作【Web前端】2014年11月11日uTorrent的原生Android客户端即将发布 ,,2016年06月23日jquery入门—访问DOM对象方法2014年01月29日【C语言】不使用大小于号,求出两数最大值【综合】2015年07月02日Mozilla公布2012年战略:用开放反击封闭 ,,2016年06月23日数据库完整性 【数据库】2014年12月09日javascriptDemo模态窗口2014年01月29日android怎样用AIDLService传递复杂数据 【综合】2015年01月09日javascript下一个还原html代码的正则2014年01月29日【Android】SQLite数据库之增删改查基础操作 【编程语言】2014年11月17日UIBarButtonItem 【综合】2014年11月04日php下目前为目最全的CURL中文说明2014年01月29日LeetCode394079CombinationSumIIIWordSearch--backtracking** 【综合】2015年04月13日20.如何从app业务逻辑提炼api接口2015年03月24日我有一个梦想【移动开发】2015年02月02日数据结构堆排序原理及其实现 【Web前端】2015年01月27日swift-tableView的使用 【编程语言】2015年08月17日图象滚动公告版2014年01月28日HDU-1201-18岁生日(JavaAC利用Calendar类) 【移动开发】2015年04月02日JS限制上传图片大小不使用控件在本地实现2014年01月29日CodeforcesRound#168(Div.2)---A.LightsOut【编程语言】2014年11月04日【MVC架构】——如何利用Json在View和Controller之间传递数据【移动开发】2015年08月25日基于MFC对话框的PCL、VTK、OPENCV岩体识别系统构建(1)【综合】2015年04月13日
我们保证
We guarantee
> psd效果文件手工切图,保证图片效果最好体积最小利于传输
> 100%手写的HTML(DIV+CSS)编码,绝对符合W3C标准
> 代码精简、css沉余量小、搜索引擎扫描迅速,网页打开快捷
> 应用Css Sprite能够减少HTTP请求数,提高网页性能
> 跨浏览器兼容(IE6、7、8、9,Firefox火狐,Chrome谷歌)