也不记得是哪天了,美工丢来一个页面要做。哇塞!上面居上有文字阴影的效果,一般这种情况下,要么就用图片,要么就是沟通一下把这个不2.0的效果给喀嚓掉就得了。如果只考虑IE的话那当然就一个滤镜就搞定,不过我们得向标准看齐嘛。当时脑瓜子转了转,还真让我给想出办法来了。就是下面这种效果咯。
兼容浏览器的文字阴影效果
兼容浏览器的文字阴影效果
其实这只算是一种取巧的手法了,原理很简单,其实是输入了两次文本,通过定位使其中一个在上方另一个在下方,并加上少许的偏移使之产生阴影的效果。当然,此方法是能通过W3C验证了,但本民工并不觉得这是一种“标准”的做法,还是只在少数需要增强设计的场合使用罢了。
下面是代码:
1
2
3
4
5
6
7
8
9
10
| <style type="text/css">
.title_div {height:30px; background:#6c7d8d; overflow:hidden; line-height:30px; padding-left:35px;}
.title_text { color:#FFF; margin:1px 0 0 0px; position:absolute; z-index:20; float:left;}
.title_shadow { color:#000; margin:2px 0 0 2px; position:absolute; z-index:10; float:left;}
</style>
/*包含文字的不一定是要DIV,用SPAN也行,只不过要加上display:block;*/
<div class="title_div">
<div class="title_text">兼容浏览器的文字阴影效果</div>
<div class="title_shadow">兼容浏览器的文字阴影效果</div>
</div> |
首先,本民工要声明的是,本人并不喜欢hack,只是在某些不得已的情况下需要用到而已。hack并不是标准,如果过于依懒hack来调整页面的话,只会让我们离标准越来越远。在很多大公司会把DIV+CSS的工作称之为“页面重构”或者“网页架构”,是有原因的,一个好的网页架构本身就可以避免大多数需要用到hack的情况。
当然,不管标不标准,至少现在不是IE一统天下的时代,为了兼容浏览器,这些常用的hack手法还是必备的。
屏蔽IE浏览器
*:lang(zh) select {font:12px !important;} /*FF,OP可见*/
class:empty {font:12px !important;} /*safari可见*/
这里class是选择符,根据情况更换。第二句是MAC上safari浏览器独有的。
仅IE7识别
*+html {…}
当面临需要只针对IE7做样式的时候就可以采用这个HACK。
IE6及IE6以下识别
* html {…}
这个地方要特别注意很多地方都写了是IE6的HACK其实IE5.x同样可以识别这个hack。其它浏览器不识别。
仅IE6不识别
class{ display /*IE6不识别*/:none;}
这里主要是通过CSS注释分开一个属性与值,流释在冒号前。
仅IE6与IE5不识别
class/**/ { display /*IE6,IE5不识别*/:none;}
这里与上面一句不同的是在选择符与花括号之间多了一个CSS注释。
仅IE5不识别
select/*IE5不识别*/ { display:none;}
这一句是在上一句中去掉了属性区的注释。只有IE5不识别。现在已经很少去考虑IE5了。
盒模型解决方法
class{width:IE5.x宽度; voice-family :”\”}\””; voice-family:inherit; width:正确宽度;}
盒模型的清除方法不是通过!important来处理的。这点要明确。这也是IE5中才出现的,也是N久都不用了。
只有Opera识别
@media all and (min-width: 0px){ class{……} }
针对Opera浏览器做单独的设定。
清除浮动
class:after {content:”.”; display:block; height:0; clear:both; visibility:hidden;}
关于清除浮动,在这里要详细说下,因为个是经常会碰到的。很多网站上都把上面那个方法称之为万能清除浮动之方法。其实用起来也并不那么好用。下面这句比较简单,效果也是一样:
class{overflow:hidden; height:1%;}
虽然这两种方法在页面输出的时候是没有问题的,但是用dreamweaver打开的时候有可能就是一团糟。本民工可是一个追求完美之人,所以推荐用下面这种方法:
.clearfloat { /* 此类应当放在 div 或 break 元素上,而且该元素应当是完全包含浮动的容器关闭之前的最后一个元素 */ clear:both;height:0;font-size: 1px;line-height: 0px;}
这个是dreamweaver模版自带的清除浮动方法,很好用的。
记得在程序员之间有这么一句话:让我做什么都行,就是别让我去看别人的程序。其实在写CSS的时候也会有这样的情况,当然,CSS相对来说简单得多,但是不同的人也都有不同的书写习惯及爱好,有时碰到与自己风格相差很远的样式表,一时半会还真很难看懂。
说到书写习惯,首先就是版式。有人喜欢横着写,同一个样式中的所有属性都写成一行;也有人喜欢竖着写,每写一个属性就换一行。关于这两种写法,也没有什么明确的说法谁好谁坏了,完全看个人喜好了。本民工偏向于前者,因为横着写的话整个样式会显得紧凑,而且找样式名也比较方便,并且文件的体积也会小。个人觉得如果随便打开一个样式表就上千行的话那是很恐怖的事(尽管可能内容并不多,只是因为竖着写而已)。
另一个受习惯影响最大的就是命名了。一个好的命名,应该是让人只要看到样式名就能知道这个样式应该是作用在什么地方的。特别是团队合作项目,制订一套命名规范是很有必要的。命名就都尽量用英文好了,拼音给人的感觉实在是太怪了。常用的命名方法中,驼峰命名法本人觉得不好用,不仅可读性不高而且因为大小写混排也容易出错,大写的I跟小写的l看起来都差不多的。中杠”-”命名跟下杠”_”命名本人觉得都差不多,而用下杠命名的话在双击选择样式名的时候比较方便,所以本人的习惯是用小写加下杠的命名法,原来公司团队也是用这个的,而且很多大站也都是这样用的。
接下来就是在书写样式表的时候尽量养成分块书写的习惯。也就是说定义同一个区块的样式都写到一起,好比下面这样:#sidebar {float:left;}
#sidebar p { … }
#footer {clear:both;}
#footer p { … }
这样在出问题的时候查找起来很方便。曾经有一位同事写样式的思维相当“跳跃”,每次改的时候都好想哭……
最后再说说样式属性的排列顺序了。说真的,这个平时还真没太去注意过,我在网上查了一下Mozilla推荐的书写规范,但却不知为何这样推荐,我觉得大概是跟浏览器解析的过程有关吧。
//显示属性
display
list-style
position
float
clear
//自身属性
width
height
margin
padding
border
background
//文本属性
color
font
text-decoration
text-align
vertical-align
white-space
other text
content
我想应该有很多朋友都会碰到DIV中图片垂直居中的问题,DIV不像TABLE,直接一个valign就搞定,特别是当图片的大小不确定的时候,无法通过事先定位来解决。而等比缩放的话,IE6中不认 max-height跟max-width。本民工几经摸索加实践,终于找到一种比较简单干净的方法,是从淘宝网上学来的,呵呵。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
| .box {
/*非IE的主流浏览器识别的垂直居中的方法*/
display: table-cell;
vertical-align:middle;
/*设置水平居中*/
text-align:center;
/* 针对IE的Hack */
*display: block;
*font-size: 175px;/*这个值大概为最大高度的0.875*/
*font-family:Arial;/*防止非utf-8引起的hack失效问题,如gbk编码*/
width:200px;
height:200px;
border: 1px solid #eee;
}
.box img {
/*设置图片垂直居中*/
vertical-align:middle;
/*非IE6下的等比缩放*/
max-height:150px;
max-width:150px;
/*IE6下的等比缩放,注意expression其实是运行了一个JS程序,所以如果图片很多的话会引起CPU占用率高*/
width:expression(this.width >150 && this.height <= this.width ? 150: true);
height:expression(this.height > 150 && this.width <= this.height ? 150 : true);
}
<div class=”box”>
<img src=”02.jpg” />
</div> |
Download:mywork.rar
在某些条件下,IE6中会出现这样的BUG(似乎只在IE6里出现,其他浏览器没见过),在一些浮动元素的最末尾的几个字符会在该元素下面重复出现:

经过多次偿试后得出结论,大多数时间该BUG是由页页中的注释引起的,虽然可以通过给该容器的右空白边设置一个负值来解决,但很可能又会在其他浏览器中产生影响,所以最好的办法就是把注释都给去掉。
但是,有些时候页面里一个注释都没有,也会出现这个BUG,本民工不信这个邪,找了很多资料后,总算得到一个说法。这个BUG不一定跟注释有关但基本上都跟浮动有关,当页面里有type=hidden的input以及display: none的div的时候,也会引起这个BUG。解决的方法可以适当调整下该元素的位置,最通用的办法就是用一个DIV把它包起来就好了。
今天兴冲冲的把刚弄好的MP3播放器传到小博里调试,弄了好久,最后才发现是在服务器上读不了lrc文件(汗死)。但此外又发现了一个问题,在FF下FLASH不能透明!
原来是太性急了忘了在embed标签里面加wmode属性了,在这里就把各个浏览器下让FLASH透明的方法整理一下吧。
在IE6下很容易,把FLASH所在的DIV的z-index属性设为-1就可以了。
IE7下应该大多数人都知道,在<object>标签里面加上
<param name=”wmode” value=”transparent” />或者
<param name=”wmode” value=”opaque” />
在FF跟Chrome中,在IE7的基础上再在<embed>标签里添加属性wmode=”transparent”或wmode=”opaque”。
在这里列一个总的代码:
<div style=”z-index:-1;”>
<object classid=”clsid:D27CDB6E-AE6D-11cf-96B8-444553540000″ codebase=”http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=9,0,28,0″ width=”350″ height=”180″>
<param name=”movie” value=”/mp3/player.swf” />
<param name=”quality” value=”high” />
<param name=”wmode” value=”transparent” />
<embed src=”/mp3/player.swf” quality=”high” pluginspage=”http://www.adobe.com/shockwave/download/download.cgi?P1_Prod_Version=ShockwaveFlash” type=”application/x-shockwave-flash” width=”350″ height=”180″ wmode=”transparent”></embed>
</object>
</div>
或者可以简写为
<object width="550" height="400" data="flash.swf" type="application/x-shockwave-flash">
<param name="wmode" value="transparent" />
<param name="src" value="flash.swf" />
</object>