彻底弄懂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负值把对象移出可视区域,鼠标响应时再重新定位对象回到正常该出现的位置。另外相信你看完本教程后,自己喜欢的漂亮链接提示面板自己可以做出来了。


猜你喜欢
- 当后端并未编写后台json数据,但是前端又要使用数据进行页面的编写,这是便可用mockjs编写一个假的数据源,发送ajax请求并获取数据1.
- 1、Git Bash默认路径在windows系统上操作Git的客户端是Git Bash。安装完Git Bash之后,双击打开,如下图:使用p
- 本文实例讲述了Python实现matplotlib显示中文的方法。分享给大家供大家参考,具体如下:【注意】可能与本文主题无关,不过我还是想指
- UDP 套接字是可以使用 connect 系统调用连接到指定的地址的。从此以后,这个套接字只会接收来自这个地址的数据,而且可以使用 send
- java 中JDBC连接数据库代码和步骤详解JDBC连接数据库 •创建一个以JDBC连接数据库的程序,包含7个步骤:
- asyncio 是 python 力推多年的携程库,与其 线程库 相得益彰,更轻量,并且协程可以访问同一进程中的变量,不需要进程间通信来传递
- 前言因为项目中遇到了这个bug:Vue cil2中配置代理proxytable成功,却无效报错404,在后端和代理都配置无误的情况下,还是报
- mpvue使用# 全局安装 vue-cli$ npm install --global vue-cli# 创建一个基于 mpvue-quic
- 一些大型站点都有着非常一流的视觉外观,它们很可能在设计时使用了网格系统。网格可以是页面布局显得紧凑而且稳定,为设计师在设计站点时提供一个逻辑
- 前言:了解了一下MySQL数据库的基本语句,这章了解一下它的高级操作,包括用户增删除与给予相对应的权限一.克隆表1.1克隆方法一(将表与内容
- 前言Beautiful Soup是python的一个HTML或XML的解析库,我们可以用它来方便的从网页中提取数据,它拥有强大的API和多样
- #!/bin/perlprint "please input some lines,then press Ctrl+Z. \n&q
- 爬取一些网站下指定的内容,一般来说可以用xpath来直接从网页上来获取,但是当我们获取的内容不唯一的时候我们无法选择,我们所需要的、所指定的
- MGR全称MySQL Group Replication(Mysql组复制),是MySQL官方于2016年12月推出的一个全新的高可用与高扩
- 本文实例为大家分享了JSP学生信息管理系统源码,JSP+Servlet+Javabean+JDBC+MySQL,供大家参考,具体内容如下1.
- 前言首先需要知道的是,js中有6个值为false,分别是: 0, '', null, undefined, NaN 和 fa
- 如果你从未为MySQL设置根用户密码,服务器在以根用户身份进行连接时不需要密码。但是,建议你为每个账户设置密码。如果你以前设置了根用户密码,
- 如何在线修改表?具体代码如下:<%Set conn1 = Server.CreateObject(&qu
- 我们直接先给出输出与预期不同的代码In[28]: a = [1,2,3,4,5,6]In[29]: for i in a: ...: &nb
- 本文实例讲述了基于wxpython开发的简单gui计算器。分享给大家供大家参考。具体如下:# wxCalc1 a simple GUI ca