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 相关文章推荐
异步加载script的代码
Jan 12 Javascript
JS控制一个DIV层在指定时间内消失的方法
Feb 17 Javascript
DOM操作一些常用的属性汇总
Mar 13 Javascript
js中for in语句的用法讲解
Apr 24 Javascript
浅析jQuery事件之on()方法绑定多个选择器,多个事件
Apr 27 Javascript
Javascript类型系统之undefined和null浅析
Jul 13 Javascript
Node.js的环境安装配置(使用nvm方式)
Oct 11 Javascript
详解Angular的数据显示优化处理
Dec 26 Javascript
JS 中LocalStorage和SessionStorage的使用
Aug 17 Javascript
JavaScript中严格判断NaN的方法
Feb 16 Javascript
解决vue单页路由跳转后scrollTop的问题
Sep 03 Javascript
一篇文章弄清楚Ajax请求的五个步骤
Mar 17 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
基于MySQL体系结构的分析
2013/05/02 PHP
dedecms函数分享之获取某一栏目所有子栏目
2014/05/19 PHP
linux下编译安装memcached服务
2014/08/03 PHP
PHP字符串比较函数strcmp()和strcasecmp()使用总结
2014/11/19 PHP
JavaScript与HTML结合的基本使用方法整理
2015/10/12 PHP
php函数mkdir实现递归创建层级目录
2016/10/27 PHP
php中namespace及use用法分析
2016/12/06 PHP
PHP实现通过文本文件统计页面访问量功能示例
2019/02/13 PHP
JS中捕获console.log()输出的方法
2015/04/16 Javascript
JavaScript实现的多种鼠标拖放效果
2015/11/03 Javascript
SpringMVC框架下JQuery传递并解析Json格式的数据是如何实现的
2015/12/10 Javascript
解决Angular.Js与Django标签冲突的方案
2016/12/20 Javascript
JS创建Tag标签的方法详解
2017/06/09 Javascript
禁止弹窗中蒙层底部页面跟随滚动的几种方法
2017/12/07 Javascript
Vue组件通信的四种方式汇总
2018/02/08 Javascript
AngularJS ui-router刷新子页面路由的方法
2018/07/23 Javascript
js防抖和节流的深入讲解
2018/12/06 Javascript
axios携带cookie配置详解(axios+koa)
2018/12/28 Javascript
express.js中间件说明详解
2019/03/19 Javascript
JS代码屏蔽F12,右键,粘贴,复制,剪切,选中,操作实例
2019/09/17 Javascript
vue input标签通用指令校验的实现
2019/11/05 Javascript
javascript实现前端分页效果
2020/06/24 Javascript
Python日期操作学习笔记
2008/10/07 Python
Django 权限认证(根据不同的用户,设置不同的显示和访问权限)
2019/07/24 Python
如何为Python终端提供持久性历史记录
2019/09/03 Python
python 进程间数据共享multiProcess.Manger实现解析
2019/09/23 Python
Python编写万花尺图案实例
2021/01/03 Python
详解如何使用Pytest进行自动化测试
2021/01/14 Python
印度尼西亚在线时尚购物网站:ZALORA印尼
2016/08/02 全球购物
中国跨镜手机配件批发在线商店:TVC-Mall
2019/08/20 全球购物
少先队入队活动方案
2014/02/08 职场文书
硕士研究生求职自荐信范文
2014/03/11 职场文书
先进党组织事迹材料
2014/12/26 职场文书
2015年乡镇平安建设工作总结
2015/05/13 职场文书
学历证明范文
2015/06/16 职场文书
Python echarts实现数据可视化实例详解
2022/03/03 Python