彻底弄懂CSS盒子模式之五(定位强化练习)(2)

作者:唐国辉 来源:蓝色经典 时间:2007-05-11 16:51:00 

三、分析实现方法

1.从上面的截图可以看到有一标题,标题下面是一个列表,所以很容易想到用<h>标签和无序列表<ul><li>来做结构,标题是一块有背景的矩形块,文字白色,文字在矩形块中居中对齐,所以给<h>标签加个宽度控制,最后为了让文本看起来在垂直方向上居中,再加个上边填充,所以用到下面样式:


h3 {
    color: #FFF;
    background-color: #F90;
    width: 100px;
    padding-top:3px;
    text-align:center;
}


2.下面是一个<ul>区块,我让它有一个上线框,这样与标题吻合在一起就做出了标题效果,而<ul>里面的<li>要有一条下划线,以形成一种分行效果,于是用到下边框,这里用到下面样式:


ul {
    width: 300px;
    border-top: 1px solid #F60;/*使其上边有一线条,与标题h3吻合*/
}
ul li {
    padding:5px;
    border-bottom: 1px solid #CCC;
    list-style:none;/*去除列表样式,这对于标准浏览器很重要*/
}


3.列表中的链接文字点击效果就很简单了,大家自己看代码就行了,注意一点就是用到了下列一条样式:


a {
    position: relative;/*设置其定位方法为相对定位,等一下内部信息面板就可以相对它定位*/
    display:block;/*让链接以块状呈现,这样不用点中链接文字就可以响应链接*/
}


4.组织信息面板布局(实现的显示与隐藏效果放在后面再说)。信息面板为一个有浅蓝色背景和较深蓝色边框,并且有5px填充的盒子,盒子左边安排一幅图片,图片大小用CSS控制,图片右边为一个有清晰数据结构列表,为了不出现与前边父级<li>的重复使用(不然等一下CSS样式控制会较麻烦,因为内部的<li>会继承父级的样式,除非你又要新定义一则样式来逐一清除父级带给它的样式),所以我用到<dl><dd>结构,只设定<dl>一个宽度,高度不设定,让其高度随说明文字增多而增高,同时不用绝对定位,以便让它可以把父级撑高,然后并让它浮动到右边。而信息面板中的图片则用绝对定位方法把它定位在信息面板左上角,用5px偏移做到与父级5px填充一致,这样看起来会自然点。当然也许你认为还有很多简单的方法可以实现,比如:让图片左浮动,而且再让<dl>浮动就行了,此方法测试表明在IE中能正常显示,在FF中会有问题,因为我本意要让右边说明文字从上到下直列下来,当文字高过图片时,不能出现文字环绕图片的情况,恰好这种情况出现在FF中(因为<dl>是在正常文本流中,而左侧图片又用了左浮动,所以问题出现),所以再想到让<dl>右浮动,但此时图片在正常文本流中又不能放到左上方了,既然浮动会影响到<dl>内的文本流,那么就用绝对定位让其脱离正常文本流,但是问题又来了,这时它无法做到让父级高度自适应。所以最后想到图片是固定在信息面板的左上角的,就把它绝对定位,再让<dl>浮动到右边去,结果发现这个方法还行,用到下面样式:


a:hover div {
    position: absolute;
    padding:5px;
    display:block;
    width: 245px;/*只给出宽度,高让它随内容多少自动调整*/
    left:150px;/*这是相对父级A的定位*/
    top: 20px;
    border: 1px solid rgb(91,185,233);
    background-color: rgb(228,246,255);
    z-index:999;/*把信息面板提到一个较高的位置,使链接文字过长时不会与面板重叠,但这只对FF有效*/
}
a img {
    width:80px;
    height:80px;
    border:none;/*去除图片边框,默认情况下,链接内的图片在标准浏览器会出现边框*/
    display:block;
    position: absolute;/*用绝对定位抽离正常文本流,不然在设计的时候考虑到不同浏览器正常显示会更麻烦*/
    top:5px;/*这里的5px是与信息面板大盒子的填充一样的*/
    left:5px;
}
dl {
    width: 160px;
    float:right;
    color: #999;
    line-height:20px;
}
dl dd span {
    font-weight: bold;
    color: #639;
}


5.实现隐藏与显示效果。这个隐藏显示效果是由鼠标触发的,所以要自然想到链接A(因为现在我们是用CSS实现,你不要想到用javascript),并且要把信息面板安排在<a></a>内,因为到时就可以用CSS类型选择符配合样式的a:hover伪类控制其显示和隐藏了。另外一个很重要的问题是IE7以下版本有个A状态伪类BUG,这个BUG使你本来看似没有问题的CSS设置在IE中之前被隐藏的面板无法显示出来,这里用到一个常用的方法,加一条样式:a:hover {background:#fff;}以消除存在问题。

(1)让信息面板初始状态隐藏,用到样式:


a div {
    display: none;/*初始化信息面板不显示*/
}


(2)显示面板,用到样式:


a:hover div {
    position: absolute;
    padding:5px;
    display:block;
    width: 245px;/*只给出宽度,高让它随内容多少自动调整*/
    left:150px;/*这是相对父级A的定位*/
    top: 20px;
    border: 1px solid rgb(91,185,233);
    background-color: rgb(228,246,255);
    z-index:999;/*把信息面板提到一个较高的位置,使链接文字过长时不会与面板重叠,但这只对FF有效*/
}


四、收尾工作

最后整合一下样式和结构代码就完成了此实例的制作。最后再作一下设计思路扩展指引:像此类隐藏显示的CSS控制设计还可以用到边界的方法,即初始状态用一个很大的margin负值把对象移出可视区域,鼠标响应时再重新定位对象回到正常该出现的位置。另外相信你看完本教程后,自己喜欢的漂亮链接提示面板自己可以做出来了。

标签:定位,盒子,css
0
投稿

猜你喜欢

  • js小方框中浏览大图类似google earth效果

    2007-10-28 19:30:00
  • 分类、属性、关键词与Tag

    2009-08-27 12:57:00
  • 让ASP组件来保护你的网站,自定义加密方法的使用

    2009-11-07 19:27:00
  • 谈谈如何管理门户级网站的CSS/IMG/JS文件

    2009-09-03 11:48:00
  • 浅谈MySQL存储引擎选择 InnoDB还是MyISAM

    2009-05-10 20:02:00
  • 关于浏览器的一些观点

    2008-08-06 12:48:00
  • 深入浅出SQL嵌套SELECT语句

    2009-02-06 14:25:00
  • 讲解数据库管理系统必须提供的基本服务

    2009-01-04 14:33:00
  • SQL语句练习实例之二——找出销售冠军

    2011-10-24 19:52:45
  • css中absolute与relative的区别

    2007-11-17 08:04:00
  • 浅谈Oracle数据库的建模与设计

    2010-07-20 12:55:00
  • asp 实现当有新信息时播放语音提示的效果

    2011-03-31 11:00:00
  • xhtml+css页面制作过程中问题的解决方案

    2008-08-05 18:00:00
  • asp如何编写一个最简单的聊天程序?

    2009-11-08 19:04:00
  • 在ASP中使用SQL语句之12:连接

    2009-04-23 18:27:00
  • 错误的随机数_JavaScript

    2009-08-28 12:43:00
  • SQL Server重温 事务

    2012-08-21 10:48:15
  • ORACLE 最大连接数的问题

    2009-07-23 14:27:00
  • 如何把一个Excel文件放到ASP页面中去?

    2009-11-07 17:54:00
  • mysql5存储过程编写实践

    2008-12-24 16:32:00
  • asp之家 网络编程 m.aspxhome.com