CSS盒子模式详解五

2016-02-19 19:35 9 1 收藏

岁数大了,QQ也不闪了,微信也不响了,电话也不来了,但是图老师依旧坚持为大家推荐最精彩的内容,下面为大家精心准备的CSS盒子模式详解五,希望大家看完后能赶快学习起来。

【 tulaoshi.com - Web开发 】

  在本人上一篇教程《彻底弄懂CSS盒子模式四(绝对定位和相对定位)》中最后有演示一个综合导航实例,那时因为时间关系,同时本人也觉得有必要将这实例分出来单独讲一下,所以没有把实例讲解教程写到上一篇教程中。这个教程可以作为CSS定位学习的强化练习,当然教程我也不只是单一的讲解做的步骤,还会和大家一起来分析一下设计思路,同时分享本人在做的过程中发现的一些问题供大家防范参考。为了兼顾一下没有来得及看我上一篇教程的网友,我再次给出代码运行框,大家可以先运行看看效果,不过建议最好先看一下本人上一篇教程,除非你已对定位有所了解。另外本实例还是不够完善的,比如结构的规范等等,如果你能有更好的实现方法,不妨在回复中写出来与大家分享,同时也让我这个积极的菜鸟学习下。

  示例代码浏览:http://tech.ddvip.com/yssl/29811/29814_1.html

  一、实例实现功能介绍

  本实例为一个栏目链接列表,鼠标移动到链接所在行,链接文本颜色会改变,同时会在链接右下侧显示一个与链接相干的信息面板,信息面板中左边有一幅图片,图片右侧又有三项说明,它们分别是“歌名”、“歌手”、“介绍”。这个栏目被重定位到其它地方,效果、位置不会发生改变,全程只用CSS+DIV实现,无任何脚本。

 
实例效果截图

  二、结构和样式代码

  1.结构

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

  2.样式

*{
  margin:0px;
  padding:0px;
}
body {
  margin:10px;
  font-size: 13px;
}
a:link {
  color: #666;
  text-decoration: none;/*去除链接下划线*/
}
a:visited {
  color: #666;
  text-decoration: none;
}
a:hover {
  color: #F90;
}
h3 {
  color: #FFF;
  background-color: #F90;
  width: 100px;
  padding-top:3px;
  text-align:center;
}

ul {
  width: 300px;
  border-top: 1px solid #F60;/*使其上边有一线条,与标题h3吻合*/
}
ul li {
  padding:5px;
  border-bottom: 1px solid #CCC;
  list-style:none;/*去除列表样式,这对于标准浏览器很重要*/
}
a {
  position: relative;/*设置其定位方法为相对定位,等一下内部信息面板就可以相对它定位*/
  display:block;/*让链接以块状呈现,这样不用点中链接文字就可以响应链接*/
}
a div {
  display: none;/*初始化信息面板不显示*/
}
a:hover {background:#fff;}/*IE7以下版本A状态伪类bug*/
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;
}
  三、分析实现方法

  1.从上面的截图可以看到有一标题,标题下面是一个列表,所以很容易想到用h标签和无序列表ulli来做结构,标题是一块有背景的矩形块,文字白色,文字在矩形块中居中对齐,所以给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会继承父级的样式,除非你又要新定义一则样式来逐一清除父级带给它的样式),所以我用到dldd结构,只设定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有效*/
}
  四、收尾工作

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/webkaifa/)

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

来源:http://www.tulaoshi.com/n/20160219/1621353.html

延伸阅读
标签: Web开发
原文:http://jorux.com/archives/property-4-if-you-love-css/ 本文作为属性篇的最后一篇文章, 将讲述HTML和CSS的关键盒子模型(Box model). 理解Box model的关键便是margin和padding属性, 而正确理解这两个属性也是学习用css布局的关键. 注: 为什么不翻译margin和padding? 原因一, 在汉语中并没有与之相对应的词语; 原因二: 即使有这...
标签: Web开发
盒子模型是CSS中一个重要的概念,理解了盒子模型才能更好的排版。其实盒子模型有两种,分别是 IE 盒子模型和标准 W3C 盒子模型。他们对盒子模型的解释各不相同,先来看看我们熟悉的标准盒子模型: 从上图可以看到标准 W3C 盒子模型的范围包括 margin、border、padding、content,并且 content 部分不包含其他部分。 IE 盒子模型 从...
《彩虹六号 围攻》猎杀恐怖分子模式玩法介绍 不少玩家不了解《彩虹六号:围攻》猎杀恐怖分子模式怎么玩?下面为大家带来《彩虹六号:围攻》猎杀恐怖分子模式详解,一起来看看吧。 猎杀恐怖份子 在线合作体验现在提供多变的原创游戏模式,不同于对战模式,猎杀恐怖份子模式由五名玩家来合作或者是自行独立挑战十张特别设计的地图。 ...
标签: Web开发
IE6 盒子模型中,盒子的尺寸包含了 内容区,padding, border 和 margin 这四个部分,而 W3C 的盒子模型中,盒子的尺寸只包含内容区,padding,border 和 margin 被排除在盒子尺寸之外。 盒子模型(Box Model)是 CSS 的核心,现代 Web 布局设计简单说就是一堆盒子的排列与嵌套,掌握了盒子模型与它们的摆放控制,会发现再复杂的页面也不过如...
标签: Web开发
CSS盒子(CSS box)     首先要清楚,CSS中没有box这个属性。CSS的盒子(box)是由以下几个部分组成的:     内容(content)、 填充(padding) 、边框 (border) 和边界( margin)。盒子的内容当然是必须有的,而填充、边框和边界都是可选的。如果把CSS的盒子看做现实生活中的盒子,那么内容就是盒子里装的货物;而填充...

经验教程

953

收藏

97
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部