学习
EMBED 标签属性
by Gary on 十二.27, 2009, under CSS, 学习
必须属性:
- CLASSID – 定义ActiveX控件标识,只适用于OBJECT。
- CODEBASE – 定义Flash Player ActiveX控件的位置,如果没有安装将自动从此位置下载,只适用于OBJECT。
- WIDTH – flash的宽度定义单位可以是PIX或者百分数。
- HEIGHT – flash的高度定义单位可以是PIX或者百分数。
- SRC – 定义flash影片的地址(URL),只适用于EMBED。
- PLUGINSPAGE – 定义Flash Player 插件的位置,如果用户没有安装可以下载,只适用于EMBED。
- MOVIE – 定义flash影片的地址(URL),只适用于OBJECT。
可选属性:
- ID – 为嵌入的flash对象定义一个唯一标识符,只适用于OBJECT。
- NAME – 用来标识flash对象,方便JavaScript、VBScript脚本语言调用
- SWLIVECONNECT – (true, false)指定在浏览器第一次加载flash player的时候是否启动Java。省略的默认值是false。如果你在同一个页面使用javascript和flash,java必须通过fscommand 工作。
- PLAY – (true, false) 定义是否在影片一加载就开始播放。默认是true。
- LOOP – (true, false) 定义影片播放完后是否循环。默认是true。
- MENU – (true, false)为true时显示完整菜单,包括完整的播放控制。为false时菜单只包括设置和关于两个选项。
- QUALITY – (low, high, autolow, autohigh, best ) low影片播放的质量,播放速度优先,不使用抗锯齿。Autolow自适应低质量,开始时是使用低质量播放速度优先,在播放过程中自动检测处理器是否能够支持高质量播放,如果可以则提高质量增加抗锯齿功能。Autohigh 自适应高质量,开始时是兼顾质量和播放速度,播放时开启抗锯齿,如果实际帧速率低于定义的帧速率,则抗锯齿关闭,提高播放速度。这个可以在flash中View > Antialias设置。Medium 中等质量,这将使用一些抗锯齿而不平滑位图。这个质量介于low和High 之间。High质量优先于速度,抗锯齿打开。如果影片没有动画,位图是平滑的,如果有动画效果,位图将不被平滑。Best提供最高的播放质量,不考虑速度,完全抗锯齿,平滑位图。
- SCALE – (showall, noborder, exactfit) 默认为showall在显示区域内不变形地等比例显示整个影片,可能在两边出现边框。No Border在显示区域内不变形地缩放影片,可能出现剪切。Exact Fit在显示区域内显示整个影片,不保持比例,会导致变形。
- SALIGN – (l, t, r, b, tl, tr, bl, br) L, R, T, B分别为左、右、上、下边缘对其,浏览器会剪切掉剩下的3个边缘。TL 和 TR为左上角、右上角对其,浏览器会剪切掉相应剩下的左下和右下角。BL 和 BR为左下角、右下角对其,浏览器会剪切掉相应剩下的左上和右上角。
- WMODE – (window, opaque, transparent)设置flash影片在窗口中的显示模式。Window影片在页面中的一个矩形窗口中显示。Opaque影片遮盖页面中处于其下的内容(不透明)。Transparent透明模式,页面中的底色将透过影片的透明区域显示,这将降低性能。注这个属性不是所有浏览器都支持。
- BGCOLOR- (#RRGGBB)定义影片的背景颜色。使用这个属性覆盖flash中定义的背景颜色。这个属性并不影响HTML页面的背景颜色。
- BASE – ( . 或 基准路径 或 URL)为flash影片中的相对地址指定基准路径。
- FLASHVARS (传入flash的名值对)Macromedia Flash Player 6 以上支持。将变量值传入flash的root级,格式为 变量名1=变量值1&变量名2=变量值2 。浏览器支持64KB的字符变量长度。
wallpaper for myself
by Gary on 九.02, 2009, under 学习, 设计


在网上浏览的时候偶然发现了这个效果的教程,弄了一下,就做为壁纸吧~上传到flickr了~点击图片下载大图。前一阵子在iconfans看到有人问这个效果怎么做,需要把这个教程翻译一下么?……不过估计我能看懂的别人也都能看懂……汗…………
具体教程猛击这里
一些IE浏览器不支持的很有用CSS属性
by Gary on 七.26, 2009, under CSS, 学习
让我们看看一些可能非常有用但是在IE浏览器中(主要是IE6和IE7)却不能使用的CSS属性。本文发表时尚未测试这些属性在IE8中的表现。我稍后会做一个测试页面,用来测试这些属性在所以IE浏览器中的表现。
其中注意clip属性IE其实是支持,但是写法不一样,这个属性在处理不同尺寸图片的时候是挺有用的。
1、Outline
在调试CSS问题的时候,我常常在指定元素上添加border来精确的查看该元素会发生什么并帮助确定问题的来源。这常常是有效的,因为它可以在布局上给我更加具体的可视性。但是如果是块级元素,这可能会发生某些错误——在任何块级元素上添加1px的边框很可能会影响到布局,它会让这个元素的宽度额外增加2px。
outline属性是完美的替代者,因为它可以在不影响文档流的情况下呈现该对象。但是IE6 和IE7不支持outline属性,所以,它不能在这两个浏览器中用于调试。
2、Inherit(值)
在CSS开发中有很多这样的例子:通过在特定元素上设置某些样式来告诉该元素来“继承”它父级元素的所有已添加的属性,这样你就可以避免相当多的键盘输入。
这可以通过设置inherit来很容易的实现。这可能很有用。比如,当重写background属性的时候,常常会有很多的文字在该属性中(色彩、图片的URL地址、位置等)。所以,与其重新写这些值,你可能仅仅想要考虑中的元素和其父级元素有相同的背景属性,一个inherit值就可以搞定一切——这显然大大的节省了键盘输入。
不幸的是,inherit值在IE6和IE7不被支持(除了用于direction(文字方向)和visibility属性)。
某人说,代码就像女人的裙子——越短越好,看来IE会阻碍我们这个愿望的实现。
3、Empty-Cells
该属性只用于table或者”display”属性被设置为”table-cell”的元素。如果你动态的为一个table添加内容,就可能会遇到某个单元格的内容为空的情况,然后你又不希望这个空的单元格的边框、背景色、背景图片等隐藏掉。
使用“empty-cells: hide”就能解决这个问题,它会将可能出现这种情况的单元格完全隐藏掉。
Internet Explorer不支持empty-cells属性。
4、Caption-Side
说到table的属性,这个属性用于声明显示在表格的侧栏的表格标题。它接受top、bottom、left 和right 四个值。Internet Exporer不支持这个属性,table的标题在IE6和IE7中将总是出现在表格的顶部。
5、Counter-Increment/Counter-Reset
有序列表(<ol>)非常方便,因为它可以省去你手工添加递增数字的麻烦,而且它允许你不用更改数字就能改变列表的序列。
CSS 拥有counter-increment和counter-reset属性,它允许你用来自动生成递增数字到几乎所有的HTML元素上,就像有序列表的效果一样。
这里有个示例:
1 2 |
h2 {counter-increment: headers;} h2:before {content: counter(headers) ".";} |
上面的样式将在所有的<h2>标签前面自动添加递增的数字,而且允许你在h2标签上实现和li标签同样的的效果。
但是IE6,IE7甚至Safari(直到3.x版本)还不支持这些属性。当然,IE6也不支持:before伪元素。
6、Min-Height
有时,一个网站的设计或布局结构需要一个有固定高度的内容区域,否则特定的视觉效果就会丢掉。这可能会因为一个渐变背景、一个独特的下拉列表、或者可能是因为PS出来的很酷的发光效果。但是有的时候,页面中的内容会比较多,而页面却不能像预期那样展开。
这个时候就需要用到min-height属性了,因为它可以告诉浏览器在一个特定的块级元素上渲染最小的高度,不管内容的实际高度是否达到了这个最小高度。然后呢,如果内容超出了最小高度,该元素就会适度的扩展开。
使用min-height唯一需要注意到的是它在IE6中不被支持。我们都知道IE6在(缓慢的)退出历史舞台,但是有的客户可能仍然要求他们的网站支持这个该死的浏览器。
不过令人高兴的是,IE6渲染height的值的方法正好和其它浏览器渲染“min-height”的方式一样,所以你只需要一个针对IE6的hack或独立的样式表来为该元素添加特定的height,这个问题就解决了。
IE6同样无视min-width、max-height和max-width,但是上述方法在这些属性上也是可行的。
7、:hover
从技术上来说,:hover只是一个伪类,但是它在IE6中不被支持(IE7和IE8支持)。:hover伪类允许你在元素上添加任何的鼠标经过样式。这非常有用,可以避免(至少在某种程度上)使用JavaScript。
但是如果你的网站,需要完全支持IE6,特别是在中国这种IE6一手遮天的情况下,那么你就必须考虑取消使用这个伪类,除非相关的标签有个”hred”属性,比如<a>标签。而且如果要实现这种效果,可能必须借助于javascript和额外的样式。
8、Display
Display通常被设置为这三个值中的一个:block、inline和none。“得益于”IE,Display的其它值很少被用到。这些值包括inline-block、table、inline-table和table-cell等,这些属性对于解决一些特殊的布局问题时,是很有用的。
所以,尽管IE确实支持Display的这三个基本属性,但是它基本上不支持其它属性。
其实,IE8对display的属性支持已经相当完整了。不过,对于inline-block属性,IE6/7只支持本身为inline的元素。
9、Clip
这是一个在特殊情况下能派上用场的很有趣的CSS属性。它可能和不可预知的、动态生成的内容结合起来。简单来说,这个属性允许你在一个特定的元素上指定隐藏区域——也可以理解为,在一个绝对定位的元素中,按照一定的设置来裁剪该元素的显示区域,超出该区域的内容会被隐藏掉。语法看起来像这样的:
1 2 3 4 5 6 7 |
div.clipped { padding: 20px; width: 400px; height: 400px; clip: rect(20px, 300px, 200px, 100px); position: absolute; } |
修剪只能用于一个绝对定位的元素,而且只用使用矩形区域。括号内的数字划出的区域(200px*180px大小)为可见区域,该区域以外的内容不可见或者被剪切掉。
技术上来讲,clip属性被IE支持,但是只支持无逗号的语法,比如
1 2 3 4 5 6 7 |
div.clipped { padding: 20px; width: 400px; height: 400px; clip: rect(20px 300px 200px 100px); position: absolute; } |
上面的样式(rect后面括号里的属性没有用逗号隔开)在大多数浏览器下都可运行,但是可能不会通过CSS验证,因为语句没有用逗号隔开。
10、:focus
这是另外一个伪类需要在这里被提及的,因为所有的非IE浏览器,都支持这个属性。:focus伪类允许你声明一个特别的样式,当一个页面元素成为键盘(鼠标)焦点的时候,将该样式动态的应用到该元素上。这在表单元素上非常有用,因为你可以在一个输入框被选中的时候给它添加一个边框。
下面的样式将在输入框成为键盘焦点的时候添加一个红色的边框:
1 2 3 |
input:focus { border: 1px solid #f00; } |
CSS中的滑动门技术 导航栏背景跟随鼠标滑动
by Gary on 三.15, 2009, under CSS, 学习
- 原文作者:Douglas Bowman
- 原文出自:A List Apart
- 转自这里
在CSS中,一个经常被人们讨论的先进之处即背景图像的可层叠性,并允许他们在彼此之上进行滑动,以创造一些特殊的效果。根据CSS2.0当前的规定,每 一个背景图像都需要各自的HTML元素。在许多情况下,典型的标记已经为一般的接口组件提供了多种元素以供我们使用。
标签导航栏就是其中的一个例子。过去,我们频繁的使用这些标签,并已成为了一种非常流行的站点导航方式。现今,在CSS已被广泛支持的前景下,我们可以为 我们站点制作出更高质量和更好外观的标签导航栏来。你也许知道CSS可以用来“驯服”无序的列表,或许你还曾经看到过这种样式的标签列表:

如果我们想用和以上类似的标记,将导航标签变成这种样式,该怎么办呢?

经过简单的设计,我们是可以做到的。
创新于何处?
我见过的许多基于CSS的导航标签大都具有一类的特征:矩形的色块,也许仅仅是一个轮廓,对于当前选中的标签则没有边框,标签在鼠标指针游至其上时改变颜色。这难道就是CSS所能给我们的全部吗?一连串的小盒子和单调的色彩吗?
在CSS被广泛采用之前,我们已经看到许多标签导航设计中的创新之处。独创的外形,熟练的色彩混合,以及对真实世界中许多物理接口的模仿。但是这些设计往 往过分依赖于经过复杂制作、带有文本的图像,或被包装成若干嵌套的表格。修改文本或改变标签的顺序则需要一个复杂的过程。文本的伸缩更是不可能的,或给页 面的布局极大的影响。
纯文本的导航栏比起文本即图像的导航栏更具有持续使用性和更快的载入速度。同样,我们甚至可以为每一个图像加上alt属性,对于弱视者,纯文本更可以自由 的改变大小。不足为奇的是,基于纯文本的导航栏,并加以CSS样式,又重新回到Web设计中来。但是,大多数基于CSS的导航栏设计,至今为止仍然是毫无 意义的。一种最近被采用的技术(例如CSS)可以让我们做的更好,同样不失先前提到的那些表格和图片标签的效果。
滑动门技术
美观的工艺,真正灵活的接口组件,并根据文本自适应大小,我们可用两个独立的背景图像来创造它。一个在左边,一个在右边。把这两幅图像想象成两扇可滑动的门,它们滑到一起并交迭,占据一个较窄的空间;或者相互滑开,占据一个较宽的空间,就像下图所显示的那样:

在这个模型中,一个图像掩盖住另一个图片的一部分。假设我们放置一些独特的内容在每个图像的周围,例如标签的圆角,我们并不希望上面一副图像完全的遮蔽住 下面一副。为了防止这种情况的发生,我们可以将上面一副图像(此例中的左边那幅)控制的尽可能的窄。但仍然要保证一定的宽度来显现标签一侧的独特性。如果 外部是圆角,我们就应该控制上面一副图像和它的弧线部分具有一样的宽度。

如果目标在大小上增长,并超过了以上所显示的宽度,归咎于文本大小及字体的改变,图像会被拉开,产生不美观的间隙。我们需要判断的是,预测这种可扩展的量 将有多大。如果在浏览器中改变字体的大小,目标又会如果增长呢?实际来说,我们至少应该估算到字体大小增长至300%的情况。背景图像也得适应这种增长。 对于以上的例子,我们将下面(即右边)的图像设为400*150像素,上面的设为9*150像素。
在头脑中,始终要有这样的认识:背景图像只是显示一个可供内容填充的有效空间(即内容区域和padding,称为doorway)。这两幅图像始终和各自外部的边角相锚定。背景图像的可见部分和在一起即形成了一个具有这种标签形状的空间(doorway):

如果标签被撑大,图像即滑开,doorway变宽,图像的也将被显露的更多:

此例中,我在photoshop中制作两个平滑,细的3D标签图像,如文章开头所显示的那样。对于其一,内部明亮,边框暗淡些,用来表现当前选中的标签。将这种技巧模型应用于左右两幅图像中,我们需要扩大标签图像覆盖的区域,将它裁剪成两部分:

同样的方式将应用到被称为“当前”的标签中。一旦我们完成了这四幅图像(1、2、3、4),我们就可以开始用标记和CSS来制作我们的标签了。
标签的创造
当你在研究用CSS来创造水平列表时,会发现至少有两种方法将列表项安排在同一行里。两种方法各有千秋,但都需要CSS来解决布局所带来的混乱。一种方法使用inline box,另一种则用floats。
方法一,可能是比较普遍的一种,是将列表项都inline显示。inline方法的魅力在于它的简易性。但是,对于我们即将谈到的滑动门技术来说,inline方法在特定的浏览器上存在一些解释上问题。
方法二,是我们将要关注的,即用floats将列表项安排在同一行里。令人沮丧的是,floats表面上矛盾的行为正巧回避了自然的逻辑。尽管如此,对于解决多重浮动元素的基本认识,以及可靠浮动的意义,仍是值得讨论的。
我们将用另一种浮动元素来解决浮动元素的排列问题。这样,父类元素将子类元素完全包括起来。于是,我们就可以为标签加上背景色彩和背景图像。非常重要的一 点必须记住,紧跟在标签后的文本元素用CSS中的clear功能来清除浮动对象。这样避免了浮动标签影响页面上其它元素的位置。
我们从以下的标记开始:
<div id="header">
<ul>
<li><a href="#">Home</a></li>
<li id="current"><a href="#">News</a></li>
<li><a href="#">Products</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contact</a></li>
</ul>
</div>
现实中,#header div可能同样包含logo和搜索框。对于我们的例子,我们要缩短每一个锚链中超链接的值。显然,这些值应该正确的包含文件或者目录的位置。
我们从定位#header容器开始设计列表。这样确保了这个容器确确实实的充当了容器的作用,以包容它内部浮动的列表项。既然元素是浮动的,我们同样需要 声明它的宽度为100%。加入临时的黄色背景以确保父类容器完全填满标签后面的整个区域。同样,设定默认的文本属性,确保样式的统一:
#header {
float:left;
width:100%;
background:yellow;
font-size:93%;
line-height:normal;
}
现在,我们同样需要为无序列表设定默认的margin/padding值为0,并去掉列表项前面的标记。每个列表项左浮动:
#header ul {
margin:0;
padding:0;
list-style:none;
}
#header li {
float:left;
margin:0;
padding:0;
}
设定锚链强制作为块对象呈递,我们便可无忧的控制所有的样式:
#header a {
display:block;
}
下一步,我们将右侧的背景图像加入到列表项中去(改变如粗体所示):
#header li {
float:left;
background:url("norm_right.gif")
no-repeat right top;
margin:0;
padding:0;
}
在加入左侧图像之前,我们可以在 效果1 种看看目前为止的效果。(在效果中,忽略body中的规则。仅设定基本margin,padding,colors,text的属性。)
现在我们可以将左侧图像放置在锚链的左边(容器内的元素)。我们同时加入padding,扩大标签并将文本从标签的边缘推开:
#header a {
display:block;
background:url("norm_left.gif")
no-repeat left top;
padding:5px 15px;
}
这样我们就得到了 效果2 。注意我们的标签是如何成型的。在这里,IE5/Mac的用户会立刻惊奇道,“天啊,我的标签垂直堆在一起并且延伸至整个屏幕!”不要着急,我们马上帮你 解决。眼下,尽量按照下面去做,或者方便的话,临时改换其他的浏览器,并且IE5/Mac版本的问题会马上得到解决。
现在,一般标签的背景图像已经完成了,我们要为“当前”标签更换图像。我们通过对目标列表项加入id=”current”和锚链来实现。既然不需要改变背景的其他外观,图像除外,我们就使用background-image的特性:
#header #current {
background-image:url("norm_right_on.gif");
}
#header #current a {
background-image:url("norm_left_on.gif");
}
我们要在标签下添加一条边框。但是,将边框属性应用于父类的#header容器上,将不能解决“当前”标签无需边框的问题。于是我们制作新的带有边框的图像以代替它。同样,我们可以为它加入渐变效果:

我们将图像放置到#header容器的背景中去(代替原有的黄色背景),将背景图像移至到最下方,并为图像上方留出的空白添加相应的背景颜色。同时,去掉由body继承下来的padding,为ul的上、左、右边加进10像素的padding:
#header {
float:left;
width:100%;
background:#DAE0D2 url("bg.gif")
repeat-x bottom;
font-size:93%;
line-height:normal;
}
#header ul {
margin:0;
padding:10px 10px 0;
list-style:none;
}
我们必须让“当前”标签覆盖边框,如下面提示的那样。你也许会认为我们将要把底部边框加入到与其颜色相对应的、#header背景图像中去,然后将“当前 ”标签的底部边框颜色改为白色。但是,对于挑剔的观察者,还是会发现一些细小的差别。于是,我们改变锚链的padding,为“当前”标签创造出直角来, 如下面放大的例子:

我们通过减少1像素普通锚链的底部padding值(5px-1px=4px)来实现,然后为“当前”锚链补上减去的padding。
#header a {
display:block;
background:url("norm_left.gif")
no-repeat left top;
padding:5px 15px 4px;
}
#header #current a {
background-image:url("norm_left_on.gif");
padding-bottom:5px;
}
经过改变,底部边框将在普通标签中出现,而在“当前”标签中则隐藏了起来。于是,我们得到了 效果3 。
收尾工作
敏锐的观察者也许会在上一例注意到白色的标签角落。这些不透明的角用来防止下面的图像透过上面的一副。理论上,我们可以尝试使用部分背景图像来适应标签的 背景。但是我们的标签会在高度上增长,尝试通过移动背景颜色,背景图像就会相对变矮。代替的办法是,改变图像,将标签的角落设为透明。如果弧线是反锯齿 的,我们在其边缘使用较平均的背景色彩。
现在,角落已经变成透明色,左边的图像将透过右边图像的角落。为了补偿,我们为表单项加入和左边图像宽度相吻合的padding(9px)。既然已经为表单项加入了padding,我们还需去掉同样的宽度以达到文本的居中(15px-9px=6px):
#header li {
float:left;
background:url("right.gif")
no-repeat right top;
margin:0;
padding:0 0 0 9px;
}
#header a {
display:block;
background:url("left.gif")
no-repeat left top;
padding:5px 15px 4px 6px;
}
仍未结束,因为加入了9个像素的padding使左边图像与标签的左边之间产生了一段空白。现在,左侧与右侧,可见“doorway”的边缘接在一起,我 们再不需要将左边图像保持在上方。于是,交换两幅背景图像的顺序,相反过来。同样交换“当前”标签中使用的两幅图像:
#header li {
float:left;
background:url("left.gif")
no-repeat left top;
margin:0;
padding:0 0 0 9px;
}
#header a, #header strong, #header span {
display:block;
background:url("right.gif")
no-repeat right top;
padding:5px 15px 4px 6px;
}
#header #current {
background-image:url("left_on.gif");
}
#header #current a {
background-image:url("right_on.gif");
padding-bottom:5px;
}
完成这些后,我们到达了 效果4 。要注意的是,透明的角落在标签的左侧产生了一段不能点击的无效区域。这个区域在文本以外,但仍然是可以察觉到的。在标签的两边都使用透明的图像是没有必 要的。如果我们不希望产生这种无效的区域,那么我们必须使用在标签后面使用颜色,然后用这种颜色来代替标签角落的透明图像。现在我们仅保持这种透明角落。
对于剩下的问题,我们将一次性完成全部的修改:加重标签文本,将普通标签中的文本改为棕色,“当前”标签文本改为深灰色,去掉链接的下划线,最后将悬停文本色彩改为同样的深灰色。经过一系列的改变,我们将看到目前为止的 效果5 。
一致性的解决
在效果2之后,我们公认的一个问题就是在IE5/Mac浏览方式下,每个标签延伸并占据了整个浏览器的宽度,以致标签垂直的堆在了一起。这不是我们所希望的。
在大多数的浏览器中,浮动一个元素会有收缩,收缩最小至它所包含内容的大小。如果一个浮动元素包含一幅图像或其本身即图像,便会收缩至图像的宽度。如果仅仅包含文本,那么将会收缩至最长的,不可被顶开的那文本的宽度。
一个问题出现在IE5/Mac中的图片中,当一个auto-width的块对象元素被插入到一个浮动的元素中时。其他的浏览器仍旧将浮动缩小至最 小,而无视容器内的块对象元素。但IE5/Mac并不按照这种情况,相反它将浮动和块对象元素扩展至尽可能的宽度。为解决这个问题,我们将锚链同时浮动起 来,但仅仅对于IE5/Mac,以免放弃其他的浏览器。首先,我们为锚链设定浮动规则。然后,我们使用 反斜杠注释法 来隐藏这种规则,让它仅仅对IE5/Mac生效,而无视其他的浏览器:
#header a {
float:left;
display:block;
background:url("right.gif")
no-repeat right top;
padding:5px 15px 4px 6px;
text-decoration:none;
font-weight:bold;
color:#765;
}
/* Commented Backslash Hack
hides rule from IE5-Mac \*/
#header a {float:none;}
/* End IE5-Mac hack */
现在IE5/Mac浏览器将按我们所期望的那样来显示标签,看 效果6 。对于非IE5/Mac的浏览器什么都不需要改变。注意到IE5.0/Mac的一系列解释上的bug在IE5.1中解决。因此,滑动门技术在5.0版本中 所遭遇的问题超出了hack的限度。既然升级到IE5.1/Mac已不成难题,OS 9 Macs/IE5.0的占有率应逐渐缩减至很低。
举一反三
我们刚刚演练了滑动门技术,用纯文本和无序列表来创造导航标签,加以少量的样式。它的装载速度快,具有可维持性,并且文本的大小可以在不破坏外观的情况下进行较大的伸缩。不必我们再重申在创造复杂样式的导航栏中,滑动门技术所表现出来的弹性了。
只有想不到,没有做不到。最终效果 向我们展示了一例,但我们设计不可能因此而被限定死。
在某些场合,标签不一定是对称的。我很快就制作了这种标签的 第二个版本,也有阴影3D的样式,有角的边缘,和具有特色的左边部分。依据第二个版本,我们甚至可以交换左右两幅图像的位置。以这种细致的布局和灵巧的图 像控制,我们可以去掉按钮的下边框以便标签图像更好的去适应背景, 第三个版本 所显示的那样。如果你的浏览器支持多个样式表的切换,你甚至可以靠它在多个版本的导航栏之间 自由切换。
仍有许多我们没有提到的其他的效果。快速的提一下,我改变鼠标悬停的文本色彩,但是真个图像可以替换掉以创造出更有趣的变换效果。即使标记中两个嵌 套的HTML元素,也可以用CSS来达到一些我们还未想到的效果。我们在此例中创造的仅仅是水平的标签栏,但滑动门亦可应用于许多其他的情形。阁下觉得如 何呢?
菜鸟CSSer之-重置浏览器默认样式
by Gary on 三.13, 2009, under CSS, 学习
作为一个半路出家的的csser,偶深深滴理解小鸟们滴郁闷之处。其中最让鸟头大的就是相同的CSS在不同的浏览器下表现出不同滴鸟样儿。不同的浏览器对CSS的兼容问题在学习及运用过程中占到了绝大部分。作为一个闭门造车的学鸟~偶是一路google+baidu过来的,虽然到现在还是鸟~但还是要慢慢总结。
为了尽可能从开始就减少问题的产生,鸟们需要在开始写CSS的时候就把各个不同的浏览器样式重置到一个样子~以减少后面打补丁的数量和降低问题产生的可能性。要知道,有时候分析问题产生的根源比解决问题所花费的时间要多的多得多。关于如何快速定位页面中复杂的css bug 的问题,请参阅怿飞的这篇文章
—————————————pia~pia~滴分割线——————————————-
文章来源
不同浏览器对于相同元素的默认样式并不一致,这也是为什么我们在CSS的最开始要写 * {padding:0;marging:0};
不过现在说的可不只是这些。基本上,不同内核的两个浏览器在某些元素的表现都会存在差异,比如缩进的大小、字体选择、字符样式等。也许一个很 漂亮的CSS样式表在一个浏览器上表现良好,在另外一个浏览器上即使是没有CSS Bug的情况也会变得结构混乱起来,我都是浏览器默认样式在作怪。
因此,我们在生成CSS样式规则的时候,一个必做的步骤就是重设浏览器的默认样式,也就是覆盖掉浏览器的默认样式。和使用 * {padding:0;margin:0}有所不同,并不是所有的元素都存在padding和margin的差异(元素列表、有序列表在Internet Xplorer和Firefox中的不同是由于它们的缩进采用了margin缩进和padding缩进)。例如下面这段代码:
<h1> Headlines are very important Elements in XHTML</h1>
这段代码在Internet Explorer中使用的字体是Times New Roman,而在Firefox和Opera中使用的是系统默认字体。因此我们要为<h1>在CSS中设定一个统一的样式。
但是,如果我们像使用* {padding:0;margin:0}一样去使用通配符“*”来简单地设定全局样式,那么一个很明显的问题就会出现,比如像form元素、input 元素、textarea等在某些浏览器中会忽略对它们的重新设定,更重要的是这将会严重破坏这些元素的外观,所以你又不得不去手动去一一为它们重新设定一 个padding值和margin值。所以我们应该放弃简单地使用“*”,而是为第一个存在表现不一致的元素进行重设,如 body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre等等。
同时,元素的默认样式可能会破坏页面的外观。比如<b>元素会把文字加粗,<blockquote>会大段缩进,<em>会使文字倾斜等,如果你想要求页 面文本外观一致的话,也应该在CSS中把这些元素的外观进行重设。同时,有时候我们要求这些元素的外观和父元素一样,可以直接使用 inherit从父元素继承即可。
至于哪些元素应该被重设?Yahoo!已经为我们做了比较出的总结。根据雅虎的建议,你需要把这些规则放到一个名为Reset.css的文件中单独引用(推荐这种做法):
html{color:#000;background:#FFF;}
body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,form,
fieldset,input,textarea,p,blockquote,th,td {
margin:0;
padding:0;
}
table {
border-collapse:collapse;
border-spacing:0;
}
fieldset,img {
border:0;
}
address,caption,cite,code,dfn,em,strong,th,var {
font-style:normal;
font-weight:normal;
}
ol,ul {
list-style:none;
}
caption,th {
text-align:left;
}
h1,h2,h3,h4,h5,h6 {
font-size:100%;
font-weight:normal;
}
q:before,q:after {
content:”;
}
abbr,acronym { border:0;
}
你要做的就是把这些规则简单地保存到reset.css中,然后在页面中使用。在需要给这些元素增加新的样式的时候,和其它元素的设定没有什么不同。
注意:上面reset.css中 input,textarea,select{*font-size:100%;} 只有Internet Explorer可以认识,这样的设定是为了使在Internet Explorer中可以缩放表单控件字体的大小。而 legend{color:#000;} 是因为在Internet Explorer中lengend元素使用字体颜色和系统有关(甚至和系统风格有关)。这里还要指出的 是,html{color:#000;background:#FFF;} 这条规则虽是细节,却很重要,因为在某些时候他直接影响了页面的整体外观,百度就存在这样的设计失误(雅虎没似乎也没有给这一条,但是在某个示例中似乎出 现了)。
和Yahoo!一样,Eric Meyer在他的网站也给出了一个新的写法:
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
margin: 0;
padding: 0;
border: 0;
outline: 0;
font-weight: inherit;
font-style: inherit;
font-size: 100%;
font-family: inherit;
vertical-align: baseline;
}
/* remember to define focus styles! */
:focus {
outline: 0;
}
body {
line-height: 1;
color: black;
background: white;
}
ol, ul {
list-style: none;
}
/* tables still need ‘cellspacing=”0″‘ in the markup */
table {
border-collapse: separate;
border-spacing: 0;
}
caption, th, td {
text-align: left;
font-weight: normal;
}
blockquote:before, blockquote:after,
q:before, q:after {
content: “”;
}
blockquote, q {
quotes: “” “”;
}
在文中他还提到了 Internet Explorer 中解决 inherit 的问题(我研究之后也想简单写一下),值得研究(查看原文:Reset Reloaded)。其实这两个reset.css差别并不大,可以选择其中之一或者合并使用。
px和pt的区别
by Gary on 一.12, 2009, under 学习
先搞清基本概念:px就是表示pixel,像素,是屏幕上显示数据的最基本的点;而pt就是point,是印刷行业常用单位,等于1/72英寸。
这样很明白,px是一个点,它不是自然界的长度单位,谁能说出一个“点”有多长多大么?可以画的很小,也可以很大。如果点很小,那画面就清晰,我们称它为“分辨率高”,反之,就是“分辨率低”。所以,“点”的大小是会“变”的,也称为“相对长度”。
pt全称为point,但中文不叫“点”,查金山词霸可以看到,确切的说法是一个专用的印刷单位“磅”,大小为1/72英寸。所以它是一个自然界标准的长度单位,也称为“绝对长度”。
因此就有这样的说法,在网页设计中,pixel是相对大小,而point是绝对大小。
但这种说法其实还是有问题,先来看看下面的例子:
文字72px
文字72pt
文字96px
看出什么名堂了么?
72px要比72pt小一些,但96px正好和72pt一样大小
让我们来调整电脑的设置:在桌面上右键 > 属性 > settings > Advanced > General > DPI setting > 96 DPI。
试着改变设置,设为72DPI,重启,再打开浏览器看:72px已经等同于72pt了。为什么?
还是再做个实验:分别用800×600和1024×768看刚才的例子,明显高分辨率下,文字就变小。而且,关键的是,无论用px还是pt,都会变小。pt并没有如有些人所说,是“绝对”的,“固定”的。
但如果用打印机把这页面打印出来,就可以看到:无论屏幕用什么分辨率,打印出来大小都是一样的(这是当然的)。
首先要分清“屏幕效果”和“打印效果”这两个概念。
在浏览网页过程中,所有的“大”“小”概念,都是基于“屏幕”这个“界面”上。“屏幕”上的各种信息,包括文字、图片、表格等等,都会随屏幕的分辨 率变化而变化,一个100px宽度大小的图片,在800×600分辨率下,要占屏幕宽度的1/8,但在1024×768下,则只占约1/10。所以如果在 定义字体大小时,使用px作为单位,那一旦用户改变显示器分辨率从800到1024,用户实际看到的文字就要变“小”(自然长度单位),甚至会看不清,影 响浏览。
那是不是用pt做单位就没这样的问题呢?错!问题同样出现。刚才的例子已经很清楚的说明,在不同分辨率下,无论是px还是pt,都会改变大小 。以现在的电脑屏幕情况,还没有一种单位可以保证,在不同分辨率下,一个文字大小可以“固定不变”。因为这很难以实现也不是很有必要:全球电脑用户以亿来 数,屏幕从14寸到40寸甚至更高都有,屏幕大小不同,分辨率也不同,要保证一个字体在所有用户面前大小一样,实在是MISSION IMPOSSIBLE。另外,电脑有其自身的调节性,用户可以自己来调节:1)在浏览器中调节字体大小;2)在刚才提到的显示属性里调节。
那在页面设计中到底是用px还是pt呢?
我认为,这个并没有什么原则性差异,就看自己处于什么角度思考了。
Mac机怎么情况不清楚,在Windows里,默认的显示设置中,把文字定义为96DPI(PPI, 微软都将DPI和PPI混为一体,我们也就无须较真了)。这样的定义,说明了:1px=1/96英寸。联系pt的概念,1pt=1/72英寸,可以得出, 在这样的设置中,1px=0.75pt,常见的宋体9pt=12px。在显示器分辨率不变的基础上(比如现在常用的1024×768),1px大小也就固 定不变,改变显示设置,调整为144DPI,可以得出,1px=0.5pt,常见的宋体9pt=18px。原先用12px来组成的一个文字,现在需要 18px来组成,px多了,文字就“大”了,更易阅读了。
所以,px和pt的使用区别,只有当用户改变默认的96DPI下才会产生:使用px定义文字,无论用户怎么设置,都不会改变大小;使用pt定义文字,当用户设置超过96DPI的值,数值越大,字体就越大。
(附公式:px = pt * DPI / 72)
对了,刚才还提到改变浏览器中文字大小的选项,也可以改变网页的文字大小。但在这种情况下,使用px和pt都是无效的,因为这2个都是有实际 “pixel”数值的单位,比如9pt是12px,大小固定。这里要引用新的单位:em,其实就是%。因为当网页中的字体没有给出实际的px或pt定义的 话,会有一个默认值:12pt即16px,对应浏览器中“字体大小”中的“中等”,以这个为标准,变大或缩小。(只适用于IE,在FF中,即便定义px或pt也都可以变大变小)
所以,从这个概念上看,em才是真正的“相对单位”(百分比嘛,当然是相对),而px和pt都是绝对单位(都有固定值)。
在网页设计中,面向用户的屏幕的基本单位是px,因此使用px作为单位是最简单也最容易理解的,而pt也不过是通过了Windows的设置乘上了一 个比率转变成px再显示,算是绕了个圈子。参考大部分大型网站,包括Adobe和Microsoft,都是使用px作为单位,而且在HTML中,默认的单 位就是px,是不是也暗示着px是网页设计的“内定单位”?
但在Word或Photoshop中,使用pt就相当方便。因为使用Word和Photoshop的主要目的都不是为了屏幕浏览,而是输出打印。当 打印到实体时,pt作为一个自然长度单位就方便实用了:比如Word中普通的文档都用“宋体 9pt”,标题用“黑体 16pt”等等,无论电脑怎么设置,打印出来永远就是这么大。又或者在Photoshop中,设置一个图片中的某个艺术效果的字体是72pt大小,然后分 别将这张图片设为300DPI和72DPI,再打印出来,就可以看出,这2个字体大小完全一样,只是“清晰度”不同,300DPI更清晰。这是毫无疑问的 结果。
最后整理一下所有出现过的单位:
px:pixel,像素,屏幕上显示的最小单位,用于网页设计,直观方便;
pt:point,是一个标准的长度单位,1pt=1/72英寸,用于印刷业,非常简单易用;
em:即%,在CSS中,1em=100%,是一个比率,结合CSS继承关系使用,具有灵活性。
PPI(DPI):pixel(dot)per inch,每英寸的像素(点)数,是一个率,表示了“清晰度”,“精度”
(后记,今后的发展趋势,传统的CRT显示器将被LCD淘汰,而LCD有个特点就是分辨率固定,而不像CRT那样,一个17寸CRT可以有从 640×480到1600×1200不等,但17寸LCD只有1280×1024这样一个标准分辨率,也是最大分辨率,而且占满屏幕,不会像CRT那样四 周留黑边,要靠人工调节。因此以后一台电脑看网页,效果可以保持相对稳定。由于技术的发展,LCD的“精度”也越来越高,先来计算一下LCD的“精度 ”(PPI,DPI):
15寸LCD是1024×768分辨率,对角线长为15寸(英寸),根据勾股定理,很容易可以算出,屏幕宽度是11.55英寸,再用1024来除,得出15寸LCD是88.68DPI,其余的同理,看数据:
15″(1024*768): 88.68 DPI
17″(1280*1024): 96.42 DPI
19″(1280*1024): 86.27 DPI; 19″W(1440*900): 89.37 DPI
20″(1600*1200): 103.92 DPI; 20″W(1680*1050): 99.06 DPI
22″W(1680*1050): 90.05 DPI
24″W(1920*1200): 94.34 DPI
以前普通15寸CRT在800×600分辨率下,大约是72DPI。让我们来算算最常用的“宋体 9pt(12px)”,在各种显示器下,实际可视大小是多少:
15″CRT(800*600): 12/72=0.167英寸,大约是4.2毫米,是很大很容易辨识的,这也是为什么前几年最流行的中文字体大小
LCD: 15″: 0.135英寸,17″: 0.124英寸,19″: 0.139英寸,19″W: 0.134英寸,20″: 0.115英寸,20″W: 0.121英寸,22″W: 0.133英寸,24″W: 0.127英寸
基本上,小于0.13英寸,对于视力不太好的或者年老的用户,就会有阅读困难,小于0.12英寸,即便一般用户也会感觉吃力。所以,一般在这种情况下,要么使用16px以上的字体大小,如果还是要9pt,那就改变显示属性,间接来改变到16px以上也一样。
再看看PDA上情况,Dell有款x50v,分辨率640×480,屏幕大小为3.7寸,可以推算出,这个屏幕是惊人的224.70DPI,高的可 怕,12px的字在里面几乎是难以辨认,因此换有另一种规格的字体来专门适合这些高分辨率的场合,同时这样的字体更显得清晰圆滑,接近于传统印刷。
css强制html中文字对齐
by Gary on 十二.26, 2008, under CSS, 学习
页面中文字一般都是左对齐,但右边往往会参差不齐,下面是强制对齐的css:
(continue reading…)
haslayout
by Gary on 十二.25, 2008, under CSS, 学习
挺麻烦一东东,一定要看的
来自:old9 [无法穿越光荣伟大正确的GFW]