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 相关文章推荐
被jQuery折腾得半死,揭秘为何jQuery为何在IE/Firefox下均无法使用
Jan 22 Javascript
基于datagrid框架的查询
Apr 08 Javascript
用jQuery模拟select下拉框的简单示例代码
Jan 26 Javascript
javascript中局部变量和全局变量的区别详解
Feb 27 Javascript
Bootstrap3学习笔记(二)之排版
May 20 Javascript
一个超简单的jQuery回调函数例子(分享)
Aug 08 Javascript
jQuery事件处理的特征(事件命名机制)
Aug 23 Javascript
Vuejs第十二篇之动态组件全面解析
Sep 09 Javascript
Bootstrap图片轮播组件Carousel使用方法详解
Oct 20 Javascript
jQuery替换节点元素的操作方法
Mar 18 jQuery
vue项目打包后上传至GitHub并实现github-pages的预览
May 06 Javascript
vue-cil之axios的二次封装与proxy反向代理使用说明
Apr 07 Vue.js
拉动滚动条加载数据的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
PHP魔术方法之__call与__callStatic使用方法
2017/07/23 PHP
PHP设计模式之简单工厂和工厂模式实例分析
2019/03/25 PHP
a标签的css样式四个状态
2021/03/09 HTML / CSS
js资料toString 方法
2007/03/13 Javascript
javascript之ESC(第二类混淆)
2007/05/06 Javascript
JavaScript 保存数组到Cookie的代码
2010/04/14 Javascript
关于文本框的一些限制控制总结~~
2010/04/15 Javascript
asp.net+jquery滚动滚动条加载数据的下拉控件
2010/06/25 Javascript
jQuery下通过$.browser来判断浏览器.
2011/04/05 Javascript
基于jquery的使ListNav兼容中文首字拼音排序的实现代码
2011/07/10 Javascript
parentElement,srcElement的使用小结
2014/01/13 Javascript
自写的jQuery异步加载数据添加事件
2014/05/15 Javascript
控制台报错object is not a function的解决方法
2014/08/24 Javascript
浅析jQuery EasyUI中的tree使用指南
2014/12/18 Javascript
JavaScript实现的简单拖拽效果
2015/06/01 Javascript
javascript背景时钟实现方法
2015/06/18 Javascript
利用JavaScript判断浏览器类型及版本
2016/08/23 Javascript
JavaScript原生数组Array常用方法
2017/04/06 Javascript
vue2.0 自定义日期时间过滤器
2017/06/07 Javascript
微信小程序开发实现的IP地址查询功能示例
2019/03/28 Javascript
Python实现文件复制删除
2016/04/19 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
Python使用爬虫抓取美女图片并保存到本地的方法【测试可用】
2018/08/30 Python
python简单操作excle的方法
2018/09/12 Python
win7 x64系统中安装Scrapy的方法
2018/11/18 Python
python RC4加密操作示例【测试可用】
2019/09/26 Python
tensorflow使用range_input_producer多线程读取数据实例
2020/01/20 Python
python 两种方法删除空文件夹
2020/09/29 Python
Css3+Js制作漂亮时钟(附源码)
2013/04/24 HTML / CSS
CSS3色彩模式有哪些?CSS3 HSL色彩模式的定义
2016/04/26 HTML / CSS
定制iPhone和Macbook保护壳:Slick Case
2018/11/21 全球购物
办理生育手续介绍信
2014/01/14 职场文书
环保倡议书500字
2014/05/15 职场文书
会计求职自荐信范文
2015/03/04 职场文书
小学工作总结2015
2015/05/04 职场文书
使用kubeadm命令行工具创建kubernetes集群
2022/03/31 Servers