锁定老帖子 主题:如何在ie6下面设计出圆角,全兼容的
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (2)
|
|
---|---|
作者 | 正文 |
发表时间:2011-02-11
最后修改:2011-02-13
妈的,看看人家css3多么简单,一个css命令就够了,但是呢,你还得考虑那个万恶的ie6,谁让我的网站是面对的农民伯伯,估计用的都是ie6.
首先我针对类似于这样的圆角。如下:
先是做 235px长 1px像素高的图片(content_bar.png),然后平铺y方向(这里的容器高位35px),当然平铺之后是长方形的。 接着做两个图片,长和宽都是35px,大部分是透明图片,只有左边的有一部分圆弧外面的是白色,我这里为了让大家看得清楚,把图片反色了,里面的黑色其实在网页上是白色。聪明的读者肯定知道了,另外一张图片肯定就是与之水平翻转的图片了。正好是标题的左右角。 (blocktitle_left_corner.png)
接下来,我是这样写的html。
<div class="xo-block"> <div class="xo-blocktitle"> <div class="xo-blocktitle-mask-left"></div> <div class="xo-blocktitle-mask-right"></div> <h3>网站公告</h3></div> ............... </div>
css这样写
.xo-block .xo-blocktitle-mask-left { height: 35px; width: 35px; float: left; background-image: url("../img/blocktitle_left_corner.png"); } .xo-block .xo-blocktitle-mask-right { height: 35px; width: 35px; float: right; background-image: url("../img/blocktitle_right_corner.png"); } .xo-blocktitle { height: 35px; background: url("../img/content_bar.png") repeat-y; } .xo-blocktitle h3 { line-height: 35px; color: #000099; text-transform: uppercase; letter-spacing: 3px; font-size: 18px; padding-left: 30px; text-indent: -1000px; }
我们知道在标准的浮动模型里面,可以知道h3会无视.xo-blocktitle-mask-left和.xo-blocktitle-mask-right,而处于那左右角的背后去,所以文字还是在那一行显示。只要高度设的对就是这样的效果,而浮动的特性就是dom脱离文档流,因此两个角肯定是在正常文档流的上方,blocktitle_left_corner.png中的白色就会遮掩住.xo-blocktitle的背景的两角,形成圆角的效果。 这里在ff下是完美了。但是,在ie6下还是有不止一个问题。
首先在ie6下,不支持透明图片,于是在网上下了一个ie6pngfix的插件(本页面提供下载),把它放在网站目录下某个地方,添加代码 <script type="text/javascript" src="<{$xoops_url}>/include/me/iepngfix/iepngfix_titlebg.js"> </script> 还有在css里添加。 .xo-blocktitle-mask-left, .xo-blocktitle-mask-right { behavior: url(/shbank/include/me/iepngfix/iepngfix.htc); } 这里的路径是从apache的根目录开始的。这里貌似不能写相对路径啊啥的,一定要绝对的。我写了相对的没效果。为什么呢,貌似behavior的属性比较特殊,其路径相对的不是当前css文件,而是加载该css文件的页面,那我们也不知道我们到底加载的哪个页面,就写绝对路径了。如果要换目录这里也要改的。
如果这个时候你打开ie6,会发现根本看不到透明图片,这是因为在ie6下,其浮动模型是不一样的。那个h3不会无视那两个角,结果就出现在了两个角的下方,所以你没看到效果。这个时候,再修改以前的css
.xo-block .xo-blocktitle-mask-left { height: 35px; width: 35px; float: left; background-image: url("../img/blocktitle_left_corner.png"); _position: absolute; /*css mhack*/ _top: 0px; _left: 0px; } .xo-block .xo-blocktitle-mask-right { height: 35px; width: 35px; float: right; background-image: url("../img/blocktitle_right_corner.png"); _position: absolute; _top: 0px; _right: 0px; } .xo-blocktitle { _position: relative; height: 35px; background: url("../img/content_bar.png") repeat-y; _overflow: hidden; /*ie6*/ _width: 100%; /*ie6,否则会被background img撑大*/ } .xo-blocktitle h3 { line-height: 35px; color: #000099; text-transform: uppercase; letter-spacing: 3px; font-size: 18px; padding-left: 30px; text-indent: -1000px; }
看到了吗?者利用了css hack的技巧。那些css属性名前加_的就是css hack,只写给ie6看的。你看到.xo-blocktitle的position为relative,那么其子元素如果绝对定位的话,其left和top就会针对.xo-blocktitle的。这样让两个角绝对定位就达到了h3无视那两个角的目的。注意.xo-blocktitle里面的两个css hack,这个是为什么呢?因为我们之前设置了一个behavior属性,那个属性会暗地里把我们的h3的width改成260px,好像是100%的长度。接着那个h3有一个属性是padding-left:30px那么按照css盒模型,其占用的宽度就相当于是290px。然后在ie6下父元素被子元素给撑开了,所以.xo-blocktitle就被撑开到了290px,导致了样式错误。解决方案是不要让.xo-blocktitle被撑开,就需要用设定宽度再overfllow:hidden的方式,这样,子元素撑开的部分就被切掉了。而且因为.xo-blocktitle设置了宽度,所以.xo-blocktitle-mask-right也能正确定位的。
当然这只是其中一种解决方案,还有一个办法也可以奏效,而且可能更加简单
那就是不要做那两个角了,直接连带做一个带圆角的背景标题图片,还不要是透明的,把圆弧做好后,再把原来的背景的图案相对应的做在圆弧的外面,根本就不要什么处理了,直接拉上去就好。这种情况更适用于背景比较复杂或有明显渐变而不是纯色的情况,这类情况第一种方法是无法处理的。其实,现在想想,拿这一种方法其实更好,简单啊,而且不会产生多余的html,我真傻怎么当初没用这一种呢?不过,用第一种还是学到了不少东西的,尤其是ie6和ff的区别,看来走弯路也不见得是坏事啊!
声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2011-02-11
使用css3pie可以更快,更easy的实现全兼容圆角。
|
|
返回顶楼 | |
发表时间:2011-02-11
楼主我忍不住了,你声明的是xhtml在ie6下就是标准框模型。。。
所以其他人没乱说,是你。。。。没懂 ie5有怪异模型和。。。标准的。。。 还有你用gif做就可以透明了,png用滤镜,用你说的那个东西,如果图片太多会变慢的。 |
|
返回顶楼 | |
发表时间:2011-02-11
呵呵,我也是做了一个简单的实验,没有想到这么多模式,领教了
|
|
返回顶楼 | |
发表时间:2011-02-12
不好意思,忘记说了,pie css我以前用的是beta2的,存在一个问题,当圆角元素嵌套圆角元素的时候,在IE6下就出现BUG了,不知道beta3现在修正了没有。
|
|
返回顶楼 | |
发表时间:2011-02-12
你那个图片gif完全够了.......
|
|
返回顶楼 | |
发表时间:2011-02-12
可以看看 http://www.iteye.com/topic/610962 这个帖子
|
|
返回顶楼 | |
发表时间:2011-02-12
这种纯色背景在IE6下换用gif就行了,不需要js
|
|
返回顶楼 | |
发表时间:2011-02-12
这东西我7年前就实现了。。。
|
|
返回顶楼 | |
发表时间:2011-02-12
居然在ie6圆角实现上还这么纠集的人 还责怪人家是农民伯伯,太强大了!
|
|
返回顶楼 | |