【冰极峰教程系列之五】:无hack并支持透明圆角框的全兼容九宫格布局


原创:冰极峰 转载请注明出处 时间:2009年7月19日 23:33:05


冰极峰教程系列之一:九宫格基本布局

冰极峰教程系列之二:牢不可破的九宫格布局

冰极峰教程系列之三:三层分离的完美九宫格

冰极峰教程系列之四:九宫格应用案例--极酷网页播放器设计

冰极峰教程系列之五:无hack并支持透明圆角框的全兼容九宫格布局

前言:在前面四篇文章中,我介绍了九宫格的原理及一个应用案例,本来已经告一段落了,但是那个布局还是有一定的局限性的。其最大的局限是不能应用四角圆角外面是透明的图片,而作为一个界面布局方式,如果不能应用透明的外圆角,那么这种布局的可扩展性就会大受影响,不能最大化限度地得以推广。本文就是要从根本上解决这个问题。

我知道这个问题的根源在于:中间的左右边框列垂直同高产生的,因为它们的父级容器是box这个总容器,而不是一个独立的容器,而底部的左右两个角容器是向上负偏移到它们的上面的,遮挡住了背景色。所以当圆角容器中的图片采用半透明或透明的图片时,其透明部分就会显示出左右两侧边框的图片背景出来。

在制作前面的《牢不可破的九宫格布局》的模型时,我就已经发现了这个问题,当时制作圆角图片也是采用的透明的圆角图片,可是后来发现这个问题后,为了减少麻烦,我又将透明的圆角片的透明部分加上一个和总容器相同的背景色,来避免了这个问题。但这个方法最终不是解决的终极办法,在我们的日常工作中,采用半透明的圆角来定制界面是很有必要的,因此在那篇文章中仅仅只是逃避了问题,而没有从根本上解决问题。在文章发布之后,终于有细心的朋友在试用之后,提出这个问题,哈哈,看看终于是无法偷懒来回避这个问题了。

知道了问题的根源后,要解决它也是一件简单的事情。

因为我这篇文章是建立在《牢不可破的九宫格布局》这篇文章的基础上的,如果还没有看过那篇文章的朋友,不妨先看了它后再来看这篇文章。这将有助于你的消化!

看来,要解决这个问题,我需要将中间部分作一些结构上的修改。因为我希望它的左右边框容器是和内容区是垂直同高的,也就是当内容区的文字内容的高度发生变化时,其左右边框的高度跟着同步调整其高度。这就是一个典型的三列同高布局。但与平时看到的三列布局有点不同的是,我希望中间的内容区的宽度填满整个中间的宽度,但它不是100%的宽度,而是100%减去左右两列边框的宽度,而这个宽度并不是一个百分比,它们都是有固定像素值的。这需要运用到我在上一篇文章中提到的方法来进行的解决。

为此我需要改变一下原来的结构:

【结构层】

我给中间的左中右三个容器增加一个父级容器,并给它定义一个类名middle,那么,现在的中间区域的结构应该是这样的:

<div class="middle">
  
<span class="m_l"></span>
  
<span class="m_r"></span>
  
<div class="context">
    
<p>内容区</p>
  
</div>
</div>

【样式层】

我们再定义一下middle的样式,我们将原来的box的overflow:hidden;取消,将它加在middle容器上,让超出的部分截出隐藏。

.box{width:50%;margin:50px auto 0;background:#fff;}
.middle
{overflow:hidden; zoom:1;}

这时需要特别指出的是,如果只是将middle这个容器设置为overflow:hidden的话,那么这个模型可以在IE6以上的所有浏览器中通过,但对于IE6来说,问题依然存在(你可以将此句删除,然后在IE6测试看看。)。最后加上zoom:1才能完美地解决这个问题。

基础模型的效果图如下:

图一

 

此基础案例也包括在下面的下载压缩包中。你可以下载到本机进行测试。

【案例应用】

为了更直观地测试透明圆角框效果,我在body中加了一张上下渐变的水平平铺的背景图片,并且出于简化模型的需要,我将圆角框的图片的外圆角改成了透明的gif图片(PS:你也可以将它换成png-24半透明的圆角图片,当然就要注意IE6的兼容性问题,需要JS代码来支持。支持代码在下面的播放器的案例中已经应用了,你略加修改就可以使用。)。你可以参照下面的实例来设计图片,在应用你自己的设计前,你需要修改样式表中图片的宽高值。

案例模型的效果截图如下所示:

图二

 

在上面的效果图中,可以看到在一个渐变背景下,其圆角框是透明的。你也以点击下面的“宽屏”、“全屏”按钮来测试当窗口放大时其透明圆角图片的完美应用。

本模型在以下浏览器中完美通过:

IE5.5、IE6、IE7、IE8、FF3、TT、Maxthon2.1.5、Opera9.6、Safari4.0、Chrome2.0。

点击这儿下载完整的压缩包:Demo

标签: html, css
posted @ 2009-07-19 23:34 Biny 阅读(3787) 评论(12) 编辑 收藏

 回复 引用 查看   
#1楼 2009-07-19 23:53 Cheney Shue      
你外圆角使用透明的gif图片吗?gif不支持多级透明啊,边缘没有过渡,会有锯齿啊
 回复 引用 查看   
#2楼[楼主] 2009-07-20 00:01 Biny      
@Cheney Shue
请仔细看看文章,我在文章中说得很清楚,你完全可以使用半透明的PNG-24位图片来达到无锯齿效果,只要加入JS代码支持IE6就可以了。作为演示模型,我采用的透明的gif图片。

 回复 引用 查看   
#3楼 2009-07-20 00:05 Cheney Shue      
引用Biny:
@Cheney Shue
请仔细看看文章,我在文章中说得很清楚,你完全可以使用半透明的PNG-24位图片来达到无锯齿效果,只要加入JS代码支持IE6就可以了。作为演示模型,我采用的透明的gif图片。


嗯,我不喜欢用png + js这种方法。不是真色的PNG有多级透明效果,而且又让ie6支持吗?

 回复 引用 查看   
#4楼[楼主] 2009-07-20 00:12 Biny      
@Cheney Shue
IE6只支持png-8位透明,24位半透明效果在IE6下不受支持,只能使用JS方式。

 回复 引用 查看   
#5楼 2009-07-20 00:19 Cheney Shue      
引用Biny:
@Cheney Shue
IE6只支持png-8位透明,24位半透明效果在IE6下不受支持,只能使用JS方式。


真色应该是指32bit吧,三色各8bit,再加alpha通道一共32bit。我是想知道出了8bit和真色外,png还没有其他模式,可以让ie6支持的。ps中保存png的时候没有模式选择啊。

 回复 引用 查看   
#6楼[楼主] 2009-07-20 00:27 Biny      
@Cheney Shue
不行,只能是8bit的png图片IE6才能支持,以上都不受支持。
ps虽不能选择模式,但ImageReady可以选择模式。导入进去就可以另存为了。

 回复 引用 查看   
#7楼 2009-07-20 01:21 Cheney Shue      
希望XP快点淘汰吧,该死的IE6
 回复 引用   
#8楼 2009-07-24 01:08 digimanual[未注册用户]
这个比上一个版本好多了,我曾经费了很大劲也没有把圆角搞成透明的。谢谢楼主了。

让IE6显示PNG还是很费劲的,即便用JS,不知道为什么有些脚本在本地试得好好的,到服务器上就不行。另外我也试了PNG-8,IE6好像只是简单地解析为透明和不透明,显示的图像相当难看,不得已还得用JS。

我的网页已经更新为这个版本了(看起来还不错):
http://digimanual.com/

 回复 引用 查看   
#9楼[楼主] 2009-07-24 08:53 Biny      
@digimanual
谢谢试用!
png-8格式的图片和gif其实是差不多的,质量肯定比png-24差了很多.这个脚本应该可以很好的支持PNG图片啊!你要查看一下服务器的设置.
看了你的网页,这样应用也不错.哈哈!只是我觉得页脚下面是不是应该给点空距,靠得太近了.

 回复 引用   
#10楼 2009-07-24 23:58 digimanual[未注册用户]
感谢你的建议,我已经把页脚增加了8个点。今天我又试了你的那个脚本,还是没有用。不过没关系啦,就用{_behavior: url("iepngfix.htc")吧,好在我的服务器支持HTC。
另外我想把ROUND.GIF改成PNG格式,因为在浅色背景下四个圆角太粗糙,但是效果总是不理想,你能从你原始的图片给改一个吗?谢谢了。

 回复 引用   
#11楼 2009-10-23 16:14 bq889[未注册用户]
怎样套入FLASH并可以用按扭控制
 回复 引用 查看   
#12楼[楼主] 2009-10-24 12:32 Biny      
@bq889
那是需要你自行写FLASH控制代码才能实现的。