Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第2回(F4专辑)
前言:
色即设——设计,从网页设计的角度出发。因为自己的的特殊性(本身是软件工程师,但是对网页设计却有浓厚的兴趣),所以此系列文章不仅仅从编程角度出发,还将从设计的角度出发来细数AjaxControlToolkit系列控件,告诉你这些控件最终的结构表现形式、样式,还有如何修改他们的样式使之适合于你的网页整体规划。
窥,小视也——《说文》,此小视非必小视呀。此小视的意思是:水平有限,不能望其全貌,仅能管中窥豹。所以很多地方还请高人指点则个。
相关链接:
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第1回(柿子专辑)
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第2回(F4专辑)
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第3回(UE专辑)
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第4回(忍者专辑)
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第5回(错不了专辑)
Asp.net Ajax Control Toolkit设计编程备忘录(色眼窥观版)——第6回(习惯专辑)
正文:
今天我们来讲三个F4控件,它们是:ToggleButton、RoundedCorners和DropShadow。为什么叫F4控件呢。因为它们几乎纯粹是视觉系的控件,没有什么事件,就是外观能给用户更好的体验。不过,也正是这些视觉系的东西,让我们的网站更可爱、漂亮。F4控件特别需要我们能去定制它们的外观,让它们适应我们网站的风格。下面就来色眼一窥!控件编号依然延续上篇文章的,所以以4开始
4:ToggleButton
还是一个“柿子”,用来装饰checkbox,因为可以定义自己的选中和未选中图片,所以能够较好的解决checkbox歧义性问题。
属性简单一看就明白:
1. TargetControlID - The ID of the CheckBox to modify【要装饰的目标checkbox】
2. ImageHeight\ImageWidth - The height and width of the image【装饰用的图片高和宽】
3. CheckedImageUrl - the URL of the image to show when the toggle button is in the checked state.【选中时的图片地址】
4. UncheckedImageUrl - the URL of the image to show when the toggle button is in the unchecked state.【未选中时的图片地址】
5. DisabledCheckedImageUrl - the URL of the image to show when the toggle button is disabled and in the checked state.【默认选中的checkbox在不可用时的图片地址】
6. DisabledUncheckedImageUrl - the URL of the image to show when the toggle button is disabled and in the unchecked state.【默认未选中的checkbox在不可用时的图片地址】
7. CheckedImageAlternateText - the alt text to show when the toggle button is in the checked state.【选中图片的提示文言】
8. UncheckedImageAlternateText - the alt text to show when the toggle button is in the unchecked state.【未选中图片的提示文言】
9. ImageHeight/ImageWidth - The height and width, respectively, of the image that will be displayed.【图片不能显示时占位符的高宽】
属性没有什么好说的,都很简单,而且很容易定制成自己的外观,但前提是你的图片也是不大于22*22的。如果你想用大一点的图片就会出现问题——图片将后吗的文字“盖”上了,如下图红色框内。最近的web设计大空隙和大文字渐成主流,所以这个问题还是满普遍的。
如何解决这个问题呢。首先我们从togglebutton最终的结构变现来分析。看看dom结构:
从DOM结构我们可以看出togglebutton最终的结构表现:在checkbox平级的前面放一个div(position是relative的),然后div里面有个a(position是absolute的),背景图片就是CheckedImageUrl或者UncheckedImageUrl,这样这个图片就把后面的checkbox的input(这时候它的Z-INDEX已经变成0,所以它在下面)挡住了。这样就只显示图片而没有框了。然后再通过脚本来关联图片的点击和checkbox的状态达到效果。知道了最终的结构表现我们就知道了,因为图片太大了,所以把后面的文字也挡住了。解决的办法就是设置后面文字(其实是放在label里面的)的margin-left就可以了。参考样式如下:
2 #divcheckbox1 label{
3 margin-left:16px;
4 }
5 #divcheckbox1 #CheckBox1{
6 margin-top:10px; /*解决文字太靠上的问题。*/
7 }
8</style>
9
5:RoundedCorners
一个很帅的软柿子,在圆角漫天飞,css3(据说css3可以直接对容器标签设置圆角属性)没到来之前这个定然是受欢迎的。这个就是将你的panel容器拥有圆角的RondedCornes。因为没有什么行为只有表现所以纯粹就是一个F4(长的帅,但是没有什么用的东西,窃窃的问一下:这里应该没有F4的粉丝吧)。
先来看属性:
1. TargetControlID - The ID of the button or link for this extender to operate on【目标控件,推荐是像panel这样打到前台是div的控件,其实像linkbutton等控件也是可以的。】
2. Radius - The radius of the corners (and height of the added area). Default is 5.【拐角幅度。越到圆角越明显。注:看了下文你就会知道,其实这个就是div的数量】
3. Corners - The corners of the target panel that will be rounded (can be None, TopLeft, TopRight, BottomRight, BottomLeft, Top, Right, Bottom, Left, or All)【哪个方向显示圆角】
4. Color-补充一个,就是背影颜色啦。
5. BorderColor:再补充一个,边框颜色。
圆角的实现方法很多,像滑动门实现,js脚本实现等,这个到底什么怎么实现的呢,看看dom结构就会立刻明白(不知道要怎么说,真高明的方法?真愚蠢的方法?)。
就是在里面再放一坨坨div,然后将内容div放在中间。外面的div根据向外的幅度,margin-left和margin-right递增,出现梯度,从而表现出圆角。好在当你用滚动条放大网页大小的时候,这个东西不会随之放大,所以圆角一直不会露馅。但是也有弊端——容器边框不能放大缩小了(但里面的内容还是可以的),所以这个问题并不大。显示效果如下:
6:DropShadow
又是一个F4,纯粹视觉享受的东西,实现原理很特别。其中圆角的实现同RondedCornes,但是阴影的实现有点特别,它是用脚本在后期添加上的。它先创建一个和前面的panel一样的shadowpanel,然后将阴影panel向右和下错位后放在前面的panel下面,从而出现阴影效果。先来看看属性(里面竟然没有设置阴影颜色的属性,害的我为了实现这个效果做了不少努力):
1. TargetControlID - The ID of the button or link for this extender to operate on【目标控件】
2. Width - The width, in pixels of the drop shadow. Default value is 5.【影响宽度,注:其实就是下面的shadowpanel错位的像素啦】
3. Opacity - The opacity of the drop shadow, from 0 (fully transparent) to 1.0 (fully opaque). The default value is .5.【影子透明度】
4. TrackPosition - Whether the drop shadow should track the position of the panel it is attached to. Use this if the panel is absolutely positioned or will otherwise move.【如果你的panle设置了绝对位置,就要用到这个。】
5. Rounded - Set to true to set rounded corners on the target and the shadow. Default is false.【圆角】
关于TrackPosition,如果你的panle设置的绝对位置就要用到这个。不过,我设置了好像还是没有用,高手指点下。谢谢。下图是panle设置了绝对位置的错误显示,不过这个页表现了DropShadow实现原理:
让人郁闷的是,没有提供影子颜色的设置,只能是黑色的影子,最多有点透明。不过,用脚本还是实现的。一开始幼稚的认为把设置影子颜色的js放到页面最后就好,结果——失败!
正确的做法应该是用Sys.Application.add_init,参考代码如下:
Sys.Application.add_init(
function(){
var panel=document.getElementById("Panel1_DropShadow");
var c=panel.childNodes.length;
for(i=0;i<c;i++){
panel.childNodes[i].style.background="red";
}
}
);
</script>
其中Panel1_DropShadow就是产生的那个shadowpanel,这个是在页面渲染完成以后才动态生成的,所以页面上是找不到的。这也是为什么直接把js放到页面上不起作用的原因。名字就是你的TargetControlID名称然后加上“_DropShadow”。最终效果如下: