![]()
写代码的过程中才会发现问题,这篇文章将会简单介绍一下用 javascript 修改 dom 的 class 时,由于使用方法“不当”,导致 IE 浏览器不会对页面渲染的问题。
这几天呢,忙着一款新皮肤的制作,Sablog Plus 2.0(本人修改版)的CMS风格皮肤。现在差不多已经快完成了,趁这个时候把憋着半天的郁闷全部发泄出来。
我只能够说,每次写模板的时候就想大骂半个小时。这次写的网站不是给自己的,是给自己的社团,相当于是一个品牌形象啊,在兼容性上面必须下大功夫,毕竟访问我们社团网站的70%50%用户使用的是IE6,虽然微软强制利用安全中心推送过IE7,但是国内大量盗版用户关闭了安全更新,导致IE6依然猖狂。
这一批猖狂的IE6er,让我们这一群网页设计师抓狂了。一大堆的BUG,还有对CSS的许多选择器的不支持!很多好看的效果在他上面,我都很抓狂!为自己的网站,我可以放弃IE6,但是社团的网站我却不得不考虑IE6的兼容性。
现在,为了这款新皮肤已经花了3天了,许多效果都已经兼容了,一些待定的CSS3标准真好用啊,而这些效果对IE却得重新用图片来实现。
现在这个新皮肤就剩下JS特效的处理了。期待吧……我相信,这款皮肤将会是我到现在为止,做的最华丽,最漂亮的皮肤。
这个CSS问题就是在我写这个博客的新皮肤的时候发现的。我简单的测试了一下IE6,IE7,IE8beta1都存在该问题。问题代码如下
- <style>
- #sidebar { background:url(http://huangj.in/templates/One%20in%20Spring/img/bottomm.gif) repeat #093; }
- #sidebar ul { float:left; }
- .clear {clear:both;}
- </style>
- <div id="sidebar">
- <ul>
- <li>ul1 第一行 长度宽一点点</li>
- <li>ul1 第二行</li>
- <li>ul1 第三行</li>
- </ul>
- <ul>
- <li>ul2 第一行</li>
- <li>ul2 第二行</li>
- <li>ul2 第三行</li>
- </ul>
- <div class="clear"></div>
- </div>
http://huangj.in/demo/iefloatbg.html
用宽度较大的浏览器查看这段代码的时候,显示效果正常,背景图片会正常的平铺容器,但是,你尝试缩小浏览器宽度的时候,尤其是宽度无法容下两个ul并列的时候,第二个ul会被挤到第二行,同时,背景图片也被挤到了第二个ul。
你会问到,一般我不会调整浏览器宽度啊,但是,如果你的容器的宽度不足,并且使用float属性,容器会被挤换行,这个BUG出现同样会出现。
关于这个问题的解决方法,自己小小测试了一下,可以通过在每组相邻的两个ul之间,插入一个空白的段落<p></p>,或者插入一个 ,这样问题就解决了。但是加入空白的段落在IE6不知道为什么显示还有有问题,看来IE6只能插入一个可见字符了,比如 。
新模板已经做使用了2天了,使用的过程中,逐渐发现了一些小问题。这里把这些小问题总结一下。
首先不得不说让我心痛的IE,IE对图像的处理能力实在是让我头疼,虽然最后修改了定位的方式解决了页面底部草地的效果。这里说说问题所在。
第一是IE6的不支持PNG透明的问题,这个大家都知道,就不多说了,第二是关于background的问题。在页面底部先设置了草地图片的repeat,在正常的FF下面,我在其子容器里面放置图片啊,输入框啊,都不会影响底部草地图片,但是在IE6和IE7下,都出现了含图片(或input标签)的子容器挤走父容器的背景图片的情况。结果就导致父容器背景变成了空白,惨不忍睹啊。解决方法,我尚未详细测试和总结,我只是去掉了图像,去掉了部分block属性,以及包含图片(img标签)的容器不要使用float属性。当然,这个是不完整的总结。以后再测试测试这个bug的成因。
默认情况下,文本的属性是display:inline;,这样的属性,我们不能够给它设置width和height,甚至padding这个属性都会使该文本产生负偏移。起初使用的是postion:relative;来把负偏移抵消掉。但是这个效果在IE和FF下面显示效果出现了差异,尽量不要使用css hack吧。
第二种想法是使用display:block;来控制padding,这样虽然能够轻松调整文字位置,但是出现了标题中说的问题,块状对象的宽度不能够随着内部文字变化,这个明显不能够符合我最初设计的。
为了不用css hack,又要让容器宽度能够自适应,又一次请教了 Tension 之后,得知,可以直接使用float属性。在使用了float属性之后,这一段文字能够使用padding来调整其边距,并且容器的长宽能够随着文字的增减变化。简直是太完美了。而且这个代码在IE和FF下都显示正常,特别高兴啊!
具体效果就是主页的文章标题部分,大家可以使用firebug来分别测试这三种效果。
校内上面,无聊,伪装了一个星级用户。以前提供的代码只能够在自己的页面显示出自己是星级的。现在的代码换了个容器来显示星星和紫豆。不过,这段代码使用了负边距,可能在IE6下面显示不正常。那个就不在我的考虑范围内了。
只需要在涂鸦板里面加上后文的极端代码就可以了。没有星星的或者想装有钱的,可以试试这些代码。
- .profile-tabs-holder .count {
- background:transparent url(http://xnimg.cn/imgpro/icons/star.gif) no-repeat scroll left center;
- font-size:12px;
- margin:0 2px;
- padding-left:38px;
- }
- .profile-tabs-holder .count .count {
- background:transparent url(http://xnimg.cn/imgpro/icons/vip_l.gif) no-repeat scroll 0 0;
- margin-left:-35px !important;
padding-left:35px;- text-indent:35px;
- }
- .profile-tabs-holder img {
- display:none;
- }
PS:12月28日修正了一下,针对IE7,效果修改了一下,把padding-left换成了text-indent,因为IE7好像background是从padding里面开始算的。不过IE6的负边距问题还是没有想到解决方法。不知有没有高手指导。
很多人在自己的博客上面安装了Google Friend Connect,但是近期,这个在Firefox下,会出现容器高度不足的问题。这里,我介绍一点点简单的方法来解决这个问题。下文针对不同浏览器的用户提供不同的方法来修正这个问题。
如果你用的是Firefox,并且安装了Firebug的话,就简单多了,右键点击Google Friend Connect,然后查看元素,在左侧源代码里面选中iframe,然后在最后边的窗口里面选中布局,这个时候,在中间蓝色的框框里面就能够看到Google Friend Connect的实际高宽了。
然后在你的CSS文档里面添加上这样一句
- /* Google Friend Connect */
- #remote_iframe_0 {height:240px;}
这个是专门针对Firefox的一段CSS,比如我的iframe高度是240px,我就在上面代码里面设置的为240px,保存就可以了。
当然,如果你没有Firebug,那QQ应该有把,用IE打开你的博客,然后用QQ截图功能测量一下Google Friend Connect的实际高度,然后稍稍把高度增大一点点,比如我在IE下面测量的是236px,然后,我就写240px了。
最后,还是把前面的一段代码粘贴进CSS,就可以了。
没有办法了,下载一个Firefox,然后安装Firebug插件,再按照前面说的修改一下吧。
本文中的各种方法都是为了获取Google Friend Connect的真实高度,因为每个人设置的宽度不同,导致Google Friend Connect自动生成的高度也不一样,所以不能给一个固定值在修改,只能够实地测量高度,然后添加一段CSS来调整容器。
而前文中的那段代码是专门针对Firefox hack的,仅仅只会在Firefox里面展示出效果。
说实话,互联网上面的类似文章很多了。写这篇文章纯属是把自己的经验记录下来,以后方便自己查找啦。
CSS图片替换文字有两种方法
- display:none;
- text-indent:-9999em;
先说第一种方法,这个是用的比较早的一种方式,使用方法如下,例如我要替换一个超链接。
- <a href="#"><span>待替换的链接</span></a>
对应的CSS就是
- a {background:url(....); display:block; width:100px; height:100px; }/*关于a标签的伪类就自己添加*/
- span {display:none; }
这样的方式就是需要多用一个标签。给a设置好背景图片,并且设置显示为块状对象,并且指定高宽,然后span指定文字不显示。
第二种方式相对来说简单一些,只需要一个标签
- <a href="#">待替换的链接</a>
CSS代码
- a { display:block; width:100px; height:100px; overflow:hidden; text-indent:-9999em; background:url(...);}
其效果就是把a变成指定高宽的块状对象,然后设置溢出的内容不显示,然后设置文字缩进-9999em,这样文字就到显示的范围外了,最后指定背景。
当初自己用第二种方法的时候,经常会出现在FF下面点击链接,结果会产生一个向左延长虚线框,这个是因为没有设置overflow:hidden;的缘故。
NetPuter 说…建议使用text-indent:-9999em;而不是display:none;
因为后者对搜索引擎不太友好~
自己总结了一下自己在设计 CSS 过程中学会的和用过的 CSS hack 技术。相信看这篇文章的都不会是 CSS 白痴,所以 CSS 是层叠样式表我就不说了。
至于文中的 CSS hack 技术,要么是我从书上看到的,要么就是在学习别人的网站的 CSS 的时候发现的。
IE都支持*,IE6 不支持 !important,FireFox不支持 *
举例说明:
- color:#FFFFFF;/*FF显示的效果 */
- *color:#EE7EE7!important;/*IE7显示的效果 */
- *color:#EE6EE6;/*IE6显示的效果 */
叠放顺序必须如此,可以从中去掉某个。
IE7可以认+,IE6可以认-
举例说明:
- color:#FFFFFF;/*FF显示的效果 */
- +color:#EE7EE7;/*IE7显示的效果 */
- -color:#EE6EE6;/*IE6显示的效果 */
Firefox对于 i 会转换成为 i ,所以对于width, heigh, margin 等包含字母 i 的参数都可以用这套方法。
举例说明:
- width:30px;/*非FF的显示效果*/
- width:25px;/*FF的显示效果*/
有了这三种方法,一般的 hack 问题都能够解决。学习和制作 CSS 中继续总结心得。
今天一天时间都在给社团的网站制作模板,一切都好了之后,自己PS了一个顶部的 banner,然后按照常规的情况写入了CSS,可以不管怎么修改代码,主页上面就是不显示这个 banner,急死我了。
然后就愤怒的按 Ctrl+z 撤销前面的操作,结果一下按住了,把整个代码全部还原了~整了我一个白天的CSS啊!都没有了!一看网站,又还原成以前的模子。
只好凭着记忆,一点一点改回来,好多地方都是修改了长和宽,数值都忘记了。不过还好,只用了不到一半的时间就改回来了。好辛苦,好郁闷啊!
只不过那个 banner 还是不显示,IE 可以显示,Chrome 也可以显示,就是 FF 不能显示。问了一下别人,别人说他的 FF 能够看到图片。我更郁闷了,难道是 FF 坏了?
不过安装了好几个插件,都设置习惯了的 FF,我可不想卸载啊。最后犹豫了好久,把插件关掉试试,这下图片显示出来了。YEAH!最后发现结果了,是 Adblock Plus 屏蔽了。在他的规则里面屏蔽了 topbanner 这个代码。后来决定,为了避免被其他的插件屏蔽掉,把 topbanner 换了个名字!
OK了!大家来看看吧!http://www.content.org.cn,全国百强社团康腾实践中心。
今天在angle的博客下载了新的精简版的fckeditor2.6,更新到了自己的博客上面,多了很多功能,特别是加上了插入代码的功能。自己修改了一下fckeditor的代码,保留了我更新的表情功能。
但是使用插入代码功能的时候和以前模板的css有些冲突,下午重新整理了一下模板,但是发现了一个问题,顶部的登陆和搜索框好像写的不符合标准,在文章浏览页面的时候CSS控制不了那里的格式,FF和IE会字体变大,IE下面还会在左边显示一个白条。自己初学CSS,实在是找不到解决办法了!