JQuery插件Style定制化方法的分析与比较


Posted in Javascript onMay 03, 2012

1前言
最近因为项目的需要,使用了一个JQuery插件。把插件下下来后,很快我就发现,很多默认的插件Style不符合项目要求,必须要被修改。
在这个过程中,我发现自己先后使用了多种不同的方法实现插件Style的定制化。很高兴最后找到了我认为最好的方法,对CSS的认识也加深了不少,感触颇多。这篇文章就是对这些新的CSS的认识的一个梳理。
2JQuery 插件Style 定制化方法
2.1 初始化插件时输入定制化对象
做的比较好的插件会在初始化时允许输入定制化对象。
如果输入定制化对象,插件会使用定制化对象中的值,例如,

var adgallerySetting = { 
width: 600, // Width of the image, set to false and it will read the CSS width 
height: 400, // Height of the image, set to false and it will read the CSS height 
} 
var galleries = $('.ad-gallery').adGallery(adgallerySetting);

如果不输入定制化对象,插件会使用它自己的默认值,例如,
var galleries = $('.ad-gallery').adGallery();
2.2 修改插件的CSS
如果插件没有提供定制化对象或你想要修改的Style不在定制化对象定义里,一个比较直观的方法是修改插件的CSS文件。这不是一种值得提倡的方法,因为这会Corrupt插件的本身的源代码,且不利于以后插件版本的更新。
2.3 注册Callback函数
大部分插件还在定制化对象里定义Callback函数。如果Callback函数在插件完成style enhance后调用,你可以写这个Callback并注册,在Callback里修改DOM模型,从而完成插件style的定制化。这种方法比较繁琐,需要你花比较多的时间去理解插件内部的实现。例如,
var adgallerySetting = { 
// All callbacks has the AdGallery objects as 'this' reference 
callbacks: { 
// This gets fired right before old_image is about to go away, and new_image 
// is about to come in 
beforeImageVisible: function(new_image, old_image) { 
// Do something wild! 
var thing = "this is it"; 
//Change the plugin enhanced page 
$(".ad-gallery .ad-image-wrapper .ad-image").removeAttr("style"); 
$(".ad-gallery .ad-image-wrapper .ad-image").css("width", "100%"); 
var width = $(".ad-gallery .ad-image-wrapper .ad-image img").attr("width"); 
$(".ad-gallery .ad-image-wrapper .ad-image img").attr("width", "100%"); 
$(".ad-gallery .ad-image-wrapper .ad-image .img").attr("width", 100%); 
$(".ad-gallery .ad-image-wrapper .ad-image").attr("height", 100%); 
} 
} 
};

2.4 增加一个新的CSS文件,重载插件的部分style
CSS是cascading style sheet 的缩写,固名思义,它有一个Cascading 标准。当多个CSS 文件对同一个HTML element的style定义有冲突时,它会根据以下规则决定apply哪个CSS style.
1) ! Important 标识。
2) 来源。 Author (HTMl链入的CSS文件), Reader(Web surfer), User agent(Browser)
3) 相关性。
具体可以查看参考部分的链接网页。
这种方法,在我看来是除1.1 外最好的方法,下面是些代码示例。
#descriptions .ad-image-description { 
position: absolute; 
} 
#descriptions .ad-image-description .ad-description-title { 
display: block; 
} 
.ad-gallery .ad-image-wrapper .ad-image { 
width: 100% ! important; 
left: 0px ! important; 
}

3总结
根据这次的经验,我觉得定制插件Style的最好方法输入定制化对象(如果插件支持的话)或CSS重载。有些插件会以在HTML element中加入style="...."的方式定义style。在这种情况下,你就会发现,“! important”标识的出现是相当的令人舒心。J
4参考
http://www.w3.org/TR/CSS21/cascade.html
http://stackoverflow.com/questions/7022344/css-newbie-questions-on-authors-style-readers-style-agents-style
http://htmlhelp.com/reference/css/structure.html
http://css-tricks.com/override-inline-styles-with-css/
Javascript 相关文章推荐
javascript中打印当前的时间实现思路及代码
Dec 18 Javascript
javascript实现模拟时钟的方法
May 13 Javascript
浅析jsopn跨域请求原理及cors(跨域资源共享)的完美解决方法
Feb 06 Javascript
微信小程序自定义导航隐藏和显示功能
Jun 13 Javascript
Vue-cli-webpack搭建斗鱼直播步骤详解
Nov 17 Javascript
bootstrap中selectpicker下拉框使用方法实例
Mar 22 Javascript
Chart.js 轻量级HTML5图表绘制工具库(知识整理)
May 22 Javascript
微信小程序使用gitee进行版本管理
Sep 20 Javascript
Angular7中创建组件/自定义指令/管道的方法实例详解
Apr 02 Javascript
了解JavaScript中的选择器
May 24 Javascript
用Node写一条配置环境的指令
Nov 14 Javascript
vue 组件开发原理与实现方法详解
Nov 29 Javascript
拉动滚动条加载数据的jquery代码
May 03 #Javascript
基于jquery的固定表头和列头的代码
May 03 #Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 #Javascript
ASP.NET中AJAX 调用实例代码
May 03 #Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 #Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 #Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 #Javascript
You might like
漫荒推荐:画风超赞的国风漫画推荐 超长假期不无聊
2020/03/08 国漫
PHP MSSQL 分页实例
2016/04/13 PHP
Laravel实现表单提交
2017/05/07 PHP
javascript 读取图片文件的大小
2009/06/25 Javascript
基于jQuery实现文本框缩放以及上下移动功能
2014/11/24 Javascript
js数组去重的方法汇总
2015/07/29 Javascript
js中对函数设置默认参数值的3种方法
2015/10/23 Javascript
如何使用Bootstrap的modal组件自定义alert,confirm和modal对话框
2016/03/01 Javascript
Mac下使用charles遇到的问题以及解决办法
2017/01/10 Javascript
JS中跳出循环的示例代码
2017/09/14 Javascript
基于vue开发的在线付费课程应用过程
2018/01/25 Javascript
Vue之mixin全局的用法详解
2018/08/22 Javascript
一百行JS代码实现一个校验工具
2019/04/30 Javascript
微信小程序云开发之新手环境配置
2019/05/16 Javascript
javascript实现自由编辑图片代码详解
2019/06/21 Javascript
微信小程序自定义弹窗滚动与页面滚动冲突的解决方法
2019/07/16 Javascript
Python类的定义、继承及类对象使用方法简明教程
2015/05/08 Python
详解Python3中yield生成器的用法
2015/08/20 Python
Python用threading实现多线程详解
2017/02/03 Python
利用selenium 3.7和python3添加cookie模拟登陆的实现
2017/11/20 Python
TensorFlow中权重的随机初始化的方法
2018/02/11 Python
python实现socket+threading处理多连接的方法
2019/07/23 Python
TensorFlow2.1.0安装过程中setuptools、wrapt等相关错误指南
2020/04/08 Python
CSS3中的clip-path使用攻略
2015/08/03 HTML / CSS
如何判断计算机可能已经中马
2013/03/22 面试题
2014学雷锋活动总结
2014/03/09 职场文书
超市优秀员工事迹材料
2014/05/01 职场文书
银行委托书范本
2014/09/28 职场文书
财务出纳岗位职责
2015/03/31 职场文书
检讨书怎么写
2015/05/07 职场文书
关于法制教育的宣传语
2015/07/13 职场文书
python实战之用emoji表情生成文字
2021/05/08 Python
vue-router中hash模式与history模式的区别
2021/06/23 Vue.js
python库sklearn常用操作
2021/08/23 Python
Java基于Dijkstra算法实现校园导游程序
2022/03/17 Java/Android
最新动漫情报:2022年7月新番定档超过30部, OVERLORD骨王第四季也在其中噢
2022/05/04 日漫