固有属性前缀是不是前缀

&>&&>&&>&&>&正文
天谕装备前缀属性介绍 天谕装备前缀全面解析
10:45:57 来源:官网贴吧 作者:未知 编辑:游走小强 
装备前缀分类
防具非确定前缀
  强壮——两条前缀属性,主属性(生命上限),副属性在(物理防御,法术防御,躲闪,无双减免力,暴击防御)中随机一条。
  城堡——两条前缀属性,主属性(物理护甲),副属性在(物理防御,法术防御,躲闪,无双减免力,暴击防御)中随机一条。
  结界——两条前缀属性,主属性(法术护甲),副属性在(物理防御,法术防御,躲闪,无双减免力,暴击防御)中随机一条。
  长生——两条前缀属性,主属性(生命回复),副属性在(物理防御,法术防御,躲闪,无双减免力,暴击防御)中随机一条。
  以上4种前缀,在所有防具部位上都会出现。
  另外,长生是最垃圾的防具前缀,没有之一。
防具确定前缀
  坚韧——三条前缀属性,固定为(体质,精神,物理护甲),部位限定:帽子。
  坚强——三条前缀属性,固定为(体质,精神,法术护甲),部位限定:衣服。
  坚定——三条前缀属性,固定为(体质,精神,生命上限),部位限定:裤子。
  厚重——三条前缀属性,固定为(生命上限,体质,物理护甲),部位限定:帽子,衣服,裤子,护手,鞋子。
  稳重——三条前缀属性,固定为(生命上限,精神,法术护甲),部位限定:帽子,衣服,裤子,护手,鞋子。
  闪耀——三条前缀属性,固定为(体质,精神,躲闪),部位限定:护手。
  迅捷——三条前缀属性,固定为(体质,精神,移动速度),部位限定:鞋子。
  护佑——两条前缀属性,固定为(体质+物理伤害减免率),部位限定:耳环。
  神佑——两条前缀属性,固定为(体质+法术伤害减免率),部位限定:耳环。
  圣佑——两条前缀属性,固定为(体质+无双减免率),部位限定:耳环。 
  下面是饰品和武器前缀属性一览表,饰品包括:项链,戒指。 武器包括:主手,副手。
武器和饰品非确定前缀:
  破坏——两条前缀属性,主属性(暴击),副属性在(最大攻击,最小攻击,伤害)中随机一条。
  致命——两条前缀属性,主属性(暴击加成率),副属性在(最大攻击,最小攻击,伤害)中随机一条。
  摧残——两条前缀属性,主属性(破防),副属性在(最大攻击,最小攻击,伤害)中随机一条。
  勇气——两条前缀属性,主属性(无双力),副属性在(最大攻击,最小攻击,伤害)中随机一条。
  精确——两条前缀属性,主属性(命中),副属性在(最大攻击,最小攻击,伤害)中随机一条。
武器和饰品确定前缀:
  兼备——两条前缀属性,固定为(最小攻击+最大攻击)
  以上6种前缀,在所有饰品和武器部位上都会出现。
饰品专属确定前缀:
  终结:两条前缀属性,固定为(精神+无双),部位限定:项链。
  爆裂:两条前缀属性,固定为(体质+暴击率),部位限定:项链。
  狂暴(项链):两条前缀属性,固定为(体质+伤害加深率),部位限定:项链。
  狂暴(戒指):两条前缀属性,固定为(精神+伤害加深率),部位限定:戒指。
  (注:项链和戒指都有一个叫狂暴的前缀,但是项链是体质,戒指是精神,共用一个名字。)
  精准:两条前缀属性,固定为(精神+命中率),部位限定:戒指。
  切肤:两条前缀属性,固定为(精神+暴击加成率),部位限定:戒指。
武器专属三属性确定前缀:
  残忍——三条前缀属性,固定为(智力/力量/敏捷+暴击+最大攻击),职业限定:灵珑,圣堂,炎天,流光。
  惩戒——三条前缀属性,固定为(智力/力量/敏捷+暴击加成率+伤害),职业限定:灵珑,圣堂,炎天,流光。
  湮灭——三条前缀属性,固定为(智力/力量+最大攻击+破防),职业限定:玉虚,光刃。
  制裁——三条前缀属性,固定为(智力/力量+伤害+无双力),职业限定:玉虚,光刃。
  洞悉——三条前缀属性,固定为(智力/敏捷+暴击+破防),职业限定:玉虚,炎天。
  治愈——三条前缀属性,固定为(精神+暴击+附加治疗),职业限定:灵珑,流光。
  厚重——三条前缀属性,固定为(生命上限+体质+物理护甲),职业限定:圣堂。
  守护——三条前缀属性,固定为(体质+物理护甲+格挡),职业限定:光刃。
  总而言之,每个职业的主手,能出的三属性确定前缀是不同的,每个职业都有三种三属性确定前缀,我列出来好了。
  灵珑:残忍,惩戒,治愈
  流光:残忍,惩戒,治愈
  炎天:残忍,惩戒,洞悉
  圣堂:残忍,惩戒,厚重
  玉虚:湮灭,制裁,洞悉
  光刃:湮灭,制裁,守护
只在副手出现的确定前缀有三条,分别是:
  残酷(法术)——三条前缀属性,固定为(智力/敏捷+暴击+最大法术攻击),职业限定:灵珑,流光
  残酷(物理)——三条前缀属性,固定为(力量/敏捷+暴击+最小物理攻击),职业限定:圣堂,炎天(特别备注:虽然都叫残酷,但是一个是最大攻击一个是最小攻击,注意区分!)
  毁灭——三条前缀属性,固定为(智力/力量+破防+最小攻击),职业限定:玉虚,光刃
  每个职业的副手,和主手一样,也分别拥有三条不同的三属性确定前缀
  灵珑:残酷(法术),惩戒,治愈
  流光:残酷(法术),惩戒,治愈
  炎天:残酷(物理),惩戒,洞悉
  圣堂:残酷(物理),惩戒,厚重
  玉虚:毁灭,制裁,洞悉
  光刃:毁灭,制裁,守护
更多相关资讯请关注:
友情提示:支持键盘左右键“← →”翻页
文章内容导航
第2页:天谕装备前缀属性介绍-装备前缀分类
用手机访问
扫一扫,手机浏览
相关新闻:
游戏制作:网易盘古工作室
游戏发行:网易游戏
游戏平台:PC
上市时间:
游戏特色:
沙场之上,小葡萄和月遥终于再次相见;贯穿了月遥身体的剑;化身修罗的小葡萄;最终,一切又回到了玉木峰上;最后的一声呼唤,到底是谁呢?
NB出品,光刃训练场满分集锦,快来看NB大大训练场如何打出满分吧。对于想要学习如何打训练场的你,也一定会有帮助!
获救的小葡萄被打开了新世界的大门,原来自己不是玉虚,而是亲女儿流光!月遥领命带同门师兄妹们赶往沙场,誓要斩尽北狼为师兄报仇!
继上次灵珑单刷青麟挑战之后,各大门派也都坐不住了。这不,已经有流光单刷青麟挑战成功了,让我们来一起欣赏一下吧。
月遥和小葡萄的故事在继续,月遥对小葡萄居然起了杀心,是什么样的经历让月遥有了这样的变化,让我们观看《旧时雪》第二集,去寻找答案吧!
灵珑单刷青麟挑战通关+1号4号隐藏BOSS,不要小瞧萌萌哒奶妈哟,我们也是可以单刷副本的!想要学习如何打青麟的小伙伴也可以来看看哦!
天谕史诗电影级副本龙渊即将在推出,目前现在已经进入了BOSS测试阶段。本期给大家带来龙渊高阶老一玉虚第一视角。
天谕玩家自制原创PV《吉日谕令》,六大门派群像尽在其中。圣堂,光刃,炎天,玉虚,灵珑,流光,哪一个门派是你的最爱?
今天为大家带来一篇天谕燃向混剪MV《Skyreach》,包含了官方目前出的所有CG,良心之作,值得一看!
《天谕》在4月份即将迎来完全体公测,越来越多的内容即将呈现在玩家眼前。今天开发组又为大家带来了新的职业大电影——玉虚篇。
天谕自从开放了亲密度技能之后,给结契做便当成为了日常。如果在制作便当的时候计算了料理人的手艺的话,会发生什么呢?
六大职业中,你最喜欢哪个职业呢?有爱的玩家亲手绘制了六大职业的Q版同人图,有木有自己喜欢的,赶快保存啦!
流光作为天谕里面另一个可以奶的职业,经常在一些副本里客串治疗的角色。当流光遇到灵珑的时候,大奶VS二奶开始了。
在游戏里你也应该遇到过各种奇葩的时装搭配和染色,其实各种搭配都有自己不同的特色,下面就来看看逗比们的选择吧。
天谕近期推出了复活节彩蛋活动,大家滚蛋滚的开心吗?今天小编为大家带来全职业彩蛋版本,你能从一些细节看出来是什么门派吗?
奶妈和T的搭配永远是各大游戏的主流,在天谕中,灵珑和流光,圣堂和光刃,哪一对儿才是你的菜?
今天小编为大家带来由九命绘制的天谕六大职业超萌Q版头像,喜爱天谕的你一定不能错过。还等什么,马上收藏喽!
为农历新年开始的标志,立春也是汉族民间重要的传统节日之一,中国自官方到民间都非常重视,当天天子亲率三公九卿、诸侯大夫去东郊迎春,祈求丰收。
天谕首部资料片“神翼之战”资料片上线当天,除了会给玩家们带来新场景、新剧情、新玩法等等一系列内容更新。
天气日渐转冷,小编为大家分享下游戏中那些潮流服饰和装扮,让你“风度”、“温度”两手抓,轻轻松松回头率爆表。前缀列表_百度文库
两大类热门资源免费畅读
续费一年阅读会员,立省24元!
阅读已结束,下载文档到电脑
想免费下载更多文档?
定制HR最喜欢的简历
你可能喜欢谈谈iOS中的命名规范 - 简书
谈谈iOS中的命名规范
欢迎到我的
本文谈谈 iOS 开发中的命名规范,主要涉及常量命名、枚举命名、类及其方法命名,以及分类及其方法命名。如果你找的是官网的编码规范,请移步: 。当然本文会讲一些官网没有的东西。
用枚举表示状态、选项、状态码
类及其方法命名
分类及其方法命名
iOS 开发中,肯定避免不了要命名一些常量,那么,我们应该怎样来命名常量呢?
在讨论上述问题前,先来了解定义常量的两种方式。
第一种,使用 #define 预处理定义常量。例如:
#define ANIMATION_DURATION
定义一个 ANIMATION_DURATION 常量来表示 UI 动画的一个常量时间,这样,代码中所有使用 ANIMATION_DURATION 的地方都会被替换成 0.3,但是这样定义的常量无类型信息,且如果你在调试时想要查看 ANIMATION_DURATION 的值却无从下手,因为在预处理阶段ANIMATION_DURATION 就已经被替换了,不便于调试。因此,弃用这种方式定义常量。
第二种,使用类型常量。将上面的预处理定义常量修改成类型常量:
static const NSTimeInterval kAnimationDuration = 0.3;
这样就为常量带入了类型信息,那么定义类型常量又有什么规范呢?
对于局限于某编译单元(实现文件)的常量,通常以字符k开头,例如上文中的 kAnimationDuration,且需要以 static const 修饰,例如:
static const NSTimeInterval kAnimationDuration = 0.3;
对于定义于类头文件的常量,外部可见,则通常以定义该常量所在类的类名开头,例如 EOCViewClassAnimationDuration, 仿照苹果风格,在头文件中进行 extern 声明,在实现文件中定义其值:
EOCViewClass.h
extern const NSTimeInterval EOCViewClassAnimationD
EOCViewClass.m
const NSTimeInterval EOCViewClassAnimationDuration = 0.3;
对于字符串常量,则会像这样:
EOCViewClass.h
extern NSString *const EOCViewClassStringC
EOCViewClass.m
NSString *const EOCViewClassStringConstant = @"EOCStringConstant";
常量定义是从右往左解读,上面的示例中就是定义了一个常量指针,其指向一个 NSString 对象, 这样该常量就不会被随意修改。至于这种暴露出来的类常量最前面是否加上字母k, 可以根据自己习惯在团队中进行约定,因为从 iOS 的接口中我看到这两种情况都有, 如
NSString *const UIApplicationLaunchOptionsRemoteNotificationK
NSString *const UIApplicationLaunchOptionsLocalNotificationK
NSString *const kCAAnimationC
NSString *const kCAAnimationCubicP
用枚举表示状态、选项、状态码
项目中,可用枚举来表示一系列的状态、选项和状态码。例如 iOS SDK 中表示 UICollectionView 滑动方向的枚举定义如下:
typedef NS_ENUM(NSInteger, UICollectionViewScrollDirection) {
UICollectionViewScrollDirectionVertical,
UICollectionViewScrollDirectionHorizontal
或者定义 UITableView Style 的枚举:
typedef NS_ENUM(NSInteger, UITableViewStyle) {
UITableViewStylePlain,
// regular table view
UITableViewStyleGrouped
// preferences style table view
从这里可以看出,定义的枚举类型名称应以 2~3 个大写字母开头,而这通常与项目设置的类文件前缀相同,跟随其后的命名应采用驼峰命名法则,命名应准确表述枚举表示的意义,枚举中各个值都应以定义的枚举类型开头,其后跟随各个枚举值对应的状态、选项或者状态码。
对于需要以按位或操作来组合的枚举都应使用 NS_OPTIONS 宏来定义,例如 SDK 中:
typedef NS_OPTIONS(NSUInteger, UIViewAutoresizing) {
UIViewAutoresizingNone
UIViewAutoresizingFlexibleLeftMargin
UIViewAutoresizingFlexibleWidth
UIViewAutoresizingFlexibleRightMargin
UIViewAutoresizingFlexibleTopMargin
UIViewAutoresizingFlexibleHeight
UIViewAutoresizingFlexibleBottomMargin = 1 && 5
这样定义的选项能够以 按位或操作符 来进行组合,枚举中每个值均可启用或者禁用某一选项,在使用时,可以使用 按位与操作符 来检测是否启用了某一选项,如下:
UIViewAutoresizing resizing = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleH
if (resizing & UIViewAutoresizingFlexibleWidth) {
// UIViewAutoresizingFlexibleWidth is set
另外,我们可能使用 switch 语句时,会在最后加上 default 分支,但是若用枚举定义状态机,则最好不要使用 default 分支,因为如果稍后再加了一种状态,那么编译器就会发出警告,提示新加入的状态并未在 switch 分支中处理。假如写上了 default 分支,那么它就会处理这个新状态,从而导致编译器不发出警告,用 NS_ENUM 定义其他枚举类型时也要注意此问题。例如在定义代表 UI 元素样式的枚举时,通常要确保 switch 语句能正确处理所有样式。
应该用枚举来表示状态机的状态、传递给方法的选项以及状态码等值,给这些值起个易懂的名字。
如果把传递给某个方法的选项表示为枚举类型,而多个选项又可同时使用,那么就将各选项值定义为 2 的幂,以便通过按位或操作将其组合起来。
用 NS_ENUM 与 NS_OPTIONS 宏来定义枚举类型,并指明其底层数据类型。这样就可以确保枚举是用开发者所选的底层数据类型实现出来的,而不是采用编译器所选的类型。
在处理枚举类型的 switch 语句中不要实现 default 分支。这样加入新的枚举值之后,编译器就会发出警告提示,switch 还有未处理的枚举值。
类及其方法命名
Objective-C 没有其他语言那种内置的命名空间(namespace)机制。因此,我们在起名时要设法避免潜在的命名冲突,否则很容易就重名了。避免此问题的唯一方法就是变相实现命名空间: 为所有名称都加上适当前缀。所选前缀可以是与公司、应用程序或者二者皆有关联的名字。使用 Cocoa 和 Cocoa Touch 创建应用程序时一定要注意,Apple 宣传其保留使用所有"两个字母前缀"(tow-letter prefixed)的权利。所以你自己选用的前缀应该是三个字母的。你可以在苹果官网
看到上述说明:
In order to keep class names unique, the convention is to use prefixes on all classes. You’ll have noticed that Cocoa and Cocoa Touch class names typically start either with NS or UI. Two-letter prefixes like these are reserved by Apple for use in framework classes.
Your own classes should use three letter prefixes. These might relate to a combination of your company name and your app name, or even a specific component within your app.
You should also name your classes using a noun that makes it clear what the class represents, like these examples from Cocoa and Cocoa Touch:
| NSWindow | CAAnimation | NSWindowController | NSManagedObjectContext
另外,在文档
Use prefixes when naming classes, protocols, functions, constants, and typedef structures. Do not use prefixes methods exist in a name space created by the class that defines them. Also, don’t use prefixes for naming the fields of a structure.
这里需要说明两点:
上述所说的functions指的是纯 C 函数。对于纯 C 函数和全局变量,不论其处于头文件或者其实现文件中,在编译好的目标文件中,这些名称要算作"顶级符号"(top-level symbol)的。因此我们总应该为这种 C 函数的名字加上前缀。通常情况下,这类 C 函数我们可以以定义其类的名字作为前缀。这样,在调试时,若此符号出现在栈回溯信息中,则很容易就能判明问题源自哪块代码。例如:
ACLSoundPlayer.h
#import &Foundation/Foundation.h&
@interface ACLSoundPlayer : NSObject
ACLSoundPlayer.m
#import "ACLSoundPlayer.h"
#import &AudioToolbox/AudioToolbox.h&
void ACLSoundPlayerCompletion(SystemSoundID ssID, void *clientData) {
@implementation ACLSoundPlayer
上述引用说到不应该为 Objective-C methods 添加前缀,我觉得应该添加一个例外,当我们定义分类中的方法时,则总应该为其添加前缀,这会在下一条详细说明。
最后一种情况,若为第三库编写自己的代码,并准备将其发布为程序库供他人开发应用程序所用时,你应该给你所用的那份第三方库代码都加上你自己的前缀。为便于说明,假如你要发布的程序库叫 EOCLibrary,你所使用的第三方库叫 XYZLibrary,则你应该把你使用的 XYZLibrary 中所有名字都冠以 EOC, 成为 EOCXYZLibrary, 原因如下:
你的程序所包含的那个第三方库也许还会为应用程序本身所引入。
你可能会想,让应用程序本身不要直接引入 XYZLibrary,改用 EOCLibrary 中使用的那个,但是,应用程序也许还会引入另一个名为 ABCLibrary 的第三方库,而该库中又包含了 XYZLibrary。此时,如果你和 ABCLibrary 的作者都不给各自所用的 XYZLibrary 加前缀,那么应用程序依然会出现重复符号错误。
你的库里所引用的第三方库是 X 版本的,而应用程序却需要引用第三库的 Y 版本的功能。
对于类中的方法命名,应遵循以下规则:
如果方法的返回值是新建的,那么方法名的首个词应是返回值的类型,例如: +stringWithString:。除非前面还有修饰语,例如 localizedString。属性的存取方法不遵循这种命名方式。
BOOL属性应加 is 前缀。如果某方法返回非属性的 Boolean 值,那么应该根据你功能,选用 has 或 is 当前缀。
分类及其方法命名
分类机制通常用于向无源码的既有类中新增功能。分类中的方法是直接加在类里面的,它们就好比这个类固有的方法,将分类方法加入类中这一操作是在运行期系统加载分类时完成的。运行期系统会把分类中所实现的每个方法都加入类的方法列表中。如果类中本来就有此方法,而分类中又实现了一次,那么分类中的方法会覆盖原来那一份实现代码。实际上可能会发生很多次覆盖,比如某个分类中的方法覆盖了"主实现"中的相关方法,而另外一个分类中的方法又覆盖了这个分类中的方法,多次覆盖的结果以最后一个分类为准。当有多份实现时,无法确定运行时使用的是那份实现。由这样引发的 bug 很难追查。
那么,如何来最大限度的避免这种覆盖呢?
在 iOS 开发中,没有命名空间的概念。通常,我们通过为项目中所有类命名加上特有的前缀来实现命名空间的功能,来避免可能发生的与使用第三方库中的方法命名相同。同样的,这里我们也是为分类,以及分类中的所有方法都加上特定前缀。这个前缀应该与应用程序库中其他地方所用的前缀相同,通常会使用公司名或应用程序名来做决定。例如来编写一个判断对象是否为空的分类方法:
NSObject+ACLNetworkingMethods.h
@interface NSObject (ACLNetworkingMethods)
- (BOOL)acl_isEmptyO
这里为分类名以及分类中的方法加上了 ACL 的前缀。注意在方法中,需前缀小写。
另外,使用分类时,不要刻意覆写分类中的方法,尤其是当你把代码发布为程序库供其他开发者使用时,因为你无法决定其他开发者需要的是方法哪份实现。
向第三方类中添加分类时,总应该给分类名称加上你专有的前缀,前缀须大写。
向第三方类中添加分类时,总应该给分类中的方法名加上你专有的前缀,前缀须小写,且以下划线连接前缀与方法名。
欢迎留言交流。
宅男一枚, 在前进的道路上.今天闲来无聊,重新来说说CSS3前缀的问题。在春节前和说起Sass中有关于的mixins。姐姐说:
为什么还要用mixin呢?为什么不使用?使用Autoprefixer,只需要输入一行代码,编译器帮你做了一切,还纠结个毛mixin。
姐姐的一句话让我汗颜,我还在思考着如何让Sass来写Gradient,或者类似这样需要带前缀的CSS3属性。也这样让我在思考,那么有了 Autoprefixer这样的后处理,Sass中有关于CSS3的mixins是不是已失去了他存在的意义。带着这样的为什么?我们一起来开启今天有关 于CSS3前缀的探讨。
CSS3的属性为什么要带前缀
使用过CSS3属性的同学都知道,CSS3属性都需要带各浏览器的前缀,甚至到现在,依然还有很多属性需要带前缀。这是为什么呢?
我的理解是,浏览器厂商以前就一直在实施CSS3,但它还未成为真正的标准。为此,当一些CSS3样式语法还存在波动时,它们提供针对浏览器的前缀。现在主要流行的浏览器内核主要有:
Trident内核:主要代表为IE浏览器
Gecko内核:主要代表为Firefox
Presto内核:主要代表为Opera
Webkit内核:产要代表为Chrome和Safari
而这些不同内核的浏览器,CSS3属性(部分需要添加前缀的属性)对应需要添加不同的前缀,也将其称之为浏览器的私有前缀,添加上私有前缀之后的CSS3属性可以说是对应浏览器的私有属性:
Trident内核:前缀为-ms
Gecko内核:前缀为-moz
Presto内核:前缀为-o
Webkit内核:前缀为-webkit
来看一个简单的示例,早期写一个圆角border-radius,需要这样写:
-moz-border-radius: 5
-webkit-border-radius: 5
-o-border-radius: 5
border-radius: 5
这样编写代码,无形之中给前端人员增加了不少工作量,于是开始有人在讨论这个问题&如何在编写CSS时不需要添加浏览器的私有前缀,又能让浏览器识别?&
-prefix-free
为了解决手工书写前缀的问题,最早的一个解决方案是由提供的一个脚本。你只需要在你的.html文件中插入一个prefixfree.js文件(可以是文档任何地方),建议把这个脚本文件放在样式表之后。
添加这个脚本之后,使用CSS3的属性时,只需书写标准样式即可。但是这种做法将所有压力交给了客户端来处理。如此一来页面解析压力就大了,性能会打一定的折扣,并且一旦脚本加载失败,那么就会出现浏览器无法正常渲染CSS3的样式风格。
prefixfree脚本仅在IE9+、Opera10+、Firefox3.5+、Safari4+得到支持。
编辑器插件
除了prefixfree脚本之外,很多同学依赖于文本编辑器的插件来处理。这里来看看Sublime Text编辑器里是如何实现Autoprefixer功能的。
要在编辑器中安装插件,首先需要你的环境中已经安装好了。你可以在命令终端执行:
来检测是否已安装,如果没有安装,请先安装。在这里假设你已具备Node.js环境。
现在开启你的Sublime Text编辑器,你可以同时按下command + Shift + p三个键,选择"Install Package"。然后搜索。
现在你在你的Sublime Text中使用Autoprefixer功能。假设你在样式文件中输入:
transform: rotate(45deg);
border-radius: 5
box-shadow: 1px 1px 0 rgba(0,0,0,.25);
transition: all .2s ease .1s;
这个时候你只需要同时按下Command + Shift + P三个键,选择&Autoprefix CSS&,并且回车,就能得到下面这样的代码:
-webkit-transform: rotate(45deg);
transform: rotate(45deg);
border-radius: 5
box-shadow: 1px 1px 0 rgba(0,0,0,.25);
transition: all .2s ease .1s;
如下图所示:
注:不同的配置,执行的效果不一样。详细可以点击查阅。
预处理器中的混合宏
随着CSS预处理器越来越普及,部分同学开始采用预处理器中的混合宏来处理CSS3前缀的事项。比如说,里面就是使用Sass的mixin为CSS3需要带前缀的属性定制了一些mixin。还有类似于Stylus中的等。预处理器中的混合宏确实可以解决很多问题,但也产生了新的问题,就是它所使用的语法是全新的,如果要使用就必须重新学习,另外这类工具的演进速度通常都会跟不上浏览器的发展速度,这样也会造成其产生的CSS有过时的问题,有时候为了解决一些问题,还需要自己去写。比如:
正如前面所说的,如果要跟上浏览器的演进,就需要不断的更新你的CSS3 mixins,不然就会造成你的代码不是最新的。其中Compass就存在这样的问题:
@import "compass";
@include border-radius(5px);
编译出来的CSS:
-moz-border-radius: 5
-webkit-border-radius: 5
border-radius: 5
而现实却不尽人意,因为到写这篇文章为止,我们写圆角属性只需要:
border-radius: 5
各主流浏览器就能正常的解析。造成这个原因的时,Compass中的CSS3的mixin没有跟上步子去更新定义好的mixins。
使用Autoprefixer
使用Sass、LESS、Stylus或者其他类似的工具都是属于CSS的前处理器(Preprocessor),而Autoprefixer则是 一种后处理器(Postprocessor)。它是直接针对CSS本身来进行处理,不需要任何额外的语法。因为它是在CSS代码产生之后才进行后续处理。
Autoprefixer是以这种架构所发展的CSS后处理器,他是将CSS代码解析后转成JavaScript的资料结构,进行处理后再产生新的CSS代码。
Autoprefixer会分析CSS代码,并且根据所提供的资料来决定要加上哪些浏览器前缀,而你要做的事情就是把他加入自己的自动化开发工具中(比如或者),然后就可以直接使用W3C的标准来写CSS,不需要加上任何浏览器的私有前缀。
接下来看看如何使用自动化工具实现Autoprefixer功能。
Grunt中配置Autoprefixer
假设你的环境中已具备了Grunt的运行环境,如果没有请先移步了解,这里不做过多阐述。
在Github中有一个的插件,按照其官方提示,我在命令行中执行了下面的语句:
npm install grunt-autoprefixer
命令终端提示:
似乎没有成功(其实我也不太懂Grunt,只是临阵磨枪)。于是我改投@一丝姐姐说的。在命令终端重新输入:
npm install grunt-postcss
这下似乎有戏了:
不过我还跟着官网所说的执行了另外一个命令:
npm install grunt-postcss autoprefixer-core csswring
运行命令后可以看到下图的提示信息:
接下来需要在你项目的根目录中配置Gruntfile.js文件:
'use strict';
module.exports = function(grunt) {
为了验证这样做是否正确,我在项目中的src/css/中创建了一个main.css文件,然后输入代码:
在命令终端执行:
终端将运行:
Running "postcss:multiple_files" (postcss) task
File dest/css/main.css created.
Done, without errors.
查看项目中自动创建了一个dest/css/main.css文件,而里面的代码:
正是我需要的样式代码。这样尝试一回,觉得比使用Sass中的mixin爽多了。
Gulp中配置Autoprefixer
除了Grunt可以配置Autoprefixer之外,还可以使用Gulp来配置。这里也假设你的项目中已具备了Gulp的运行环境,如果没有,可以查阅相关资料。
根据官网提示,我在命令终端输入了:
npm install gulp-autoprefixer
在终端中可以看到这样的提示信息:
在Grunt中需要在Gruntfile.js进行配置,而在Gulp中也有点类似,需要在gulpfile.js中进行配置:
看上去要比Gruntfile.js配置简单一些。为了验证操作是否正确,我在项目中创建了src/styles/style.css,并且在style.css文件中输入了:
接下来在命令终端执行:
gulp styles
看到如下提示信息:
[12:53:26] Using gulpfile ~/Sites/test/gulp-autoprefixer/gulpfile.js
[12:53:26] Starting 'styles'...
[12:53:26] Finished 'styles' after 7.26 ms
此时,在项目中会自动创建一个build/styles/style.css文件,打开这个文件查看代码:
正是我们需要的。
其实在也提供了有关于如何在Gulp中配置Autoprefixer的说明。感兴趣的同学可以。
有了Autoprefixer这样的工具对于处理CSS3属性前缀来说就不再是头痛的事情了。当然,如果你正在使用CSS预处理器编写代码,那么也可以很完美的结合Autoprefixer去处理。
经过几年的技术演进,CSS3属性前缀的问题已不再是一个问题。如今天你完全可以忽略我要不要加前缀,要加哪些前缀,而只需要专心去码你的代码。把这些烦人的事情交给Autoprefixer去处理。当然,越到后面,或许我们都不需要使用任何前缀。
阅读(...) 评论()

我要回帖

更多关于 css3属性前缀 的文章

 

随机推荐