在CSS中对元素使用了浮动,然后再使用相对定位的问题

html-css017

在CSS中对元素使用了浮动,然后再使用相对定位的问题,第1张

相对定位的特点就是占着马桶不拉屎,就是说它相对它本来的位置偏离了一定距离以后,它去了别的地方,但是它原来待的地方也是不会让出来的,你3个div浮动以后,就变成了图1的样子,那么3个div自己的位置已经确定,那么不管是div1也好,其他div也好,用相对定位跑到隔壁家去玩也好,跑到天涯海角也好,它家里的位置还是占着不让别人去的,仿佛它不曾离开。

今天看到有朋友留言问浮动和定位有什么区别,如何使用?今天找了篇文章,讲的比较通俗易懂,供大家参考postion:relative是子块级元素面向父级元素的相对定位,定位关键字使用left/right/top/bottom。兄弟块元素之间相对进行定位,但是position移动后,原位置依然保留。而且随后的兄弟块元素定位基于被移走前的位置。float:right/left是子块级元素流集合面向父级元素的定位,定位的关键词使用margin/padding。兄弟块元素之间进行相对的定位均基于移动后的新位置进行重新渲染,可以重叠,原位置被清空。二者之中最大的差别就是位置保留。人们也就利用这种差异,可以做出CSS代码的滑动门菜单。hover时取当前元素为保留位置,定义一个relative时,没有hover时使用float清空保留位置。比较示例中的3个样式表,就可以发现:<!--<style>*{border:1px solid #eee} body{ border-color:#09f} ul{list-style:nonewidth:800pxheight:600pxmargin:0 autopadding:10px} li{float:left} #li1{width:200pxheight:200pxborder-color:red} #li2{width:200pxheight:150pxborder-color:greenmargin-left:-20px} #li3{width:200pxheight:100pxborder-color:bluemargin-left:-20px} </style>--><!--<style>*{border:1px solid #eee} body{ border-color:#09f} ul{list-style:nonewidth:800pxheight:600pxmargin:0 auto} li{position:relative} #li1{width:200pxheight:200pxborder-color:redtop:10px} #li2{width:200pxheight:150pxborder-color:greentop:-192pxleft:180px} #li3{width:200pxheight:100pxborder-color:bluetop:-344pxleft:360px} </style>--><style>*{border:1px solid #eee} body{ border-color:#09f} #ul{list-style:nonewidth:800pxheight:600pxmargin:0 autopadding:20px} #li1{width:200pxheight:200pxborder-color:redposition:relative} #li2{width:200pxheight:150pxborder-color:greenfloat:leftmargin-left:-20pxmargin-top:-202px} #li3{width:200pxheight:100pxborder-color:bluefloat:leftmargin-left:20pxmargin-top:-202px} </style><ul id=#id><li id=li1>li1</li><li id=li2>li2</li><li id=li3>li3</li></ul>提示:可以先修改部分代码后再运行 (如果您觉得本站不错,请告诉身边的朋友,或转载到论坛、百度知道、贴吧等,记得带网址哟,不胜感激!) 〖DIV+CSS教程〗Tags:floatposition浮动绝对定位相对定位

一、普通流

普通流中元素框的位置由元素在XHTML中的位置决定。块级元素从上到下依次排列,框之间的垂直距离由框的垂直margin计算得到。行内元素在一行中水平布置。

普通流就是html文档中的元素如块级元素、行内元素依据他们的显示属性按照在文档中的先后次序依次显示。是块级元素就占一行或多行,是行内元素就和其他元素共处一行,没什么好说的,该咋显示咋显示,一个萝卜一个坑。

二、定位

1、相对定位 (position:relative)

被看作普通流定位模型的一部分,定位元素的位置相对于它在普通流中的位置进行移动。使用相对定位的元素不管它是否进行移动,元素仍要占据它原来的位置。移动元素会导致它覆盖其他的框。例如: 设置元素 top:20px; left:20px那么框将出现在距原本元素顶部左侧各20px的地方。

对蓝框进行定位后,它仍占据原先的位置。

2、绝对定位 (position:absolute)

绝对定位的元素位置是相对于距离它最近的那个已定位的祖先(相对/绝对)元素决定的。 如果元素没有已定位的祖先元素, 那么它的位置相对于初始包含块。绝对定位的元素可以在它的包含块向上、下、左、右移动。

与相对定位相反, 绝对定位使元素与文档流无关, 因此不占据空间。 普通文档流中其他的元素的布局不受绝对定位元素的影响。参见下图:

对蓝框定位后, 它下面的元素上移占据了蓝框原本的位置, 仿佛蓝框不存在一般。

由于绝对定位的元素脱离普通流,所以它可以覆盖页面上的其他元素,可以通过设置Z-Iindex属性来控制这些框的堆放次序。

绝对定位在大多数现代浏览器中实现得很好, 但是在IE5.5与IE6中有一个bug。 如果要设置绝对定位元素的right或bottom, 那么需要确保它的"最近的相对定位的祖先元素"已经设置了尺寸。 如果没有, 那么IE会错误的相对于初始包含快(画布)定位这个元素。 简单的解决办法 就是给相对定位的元素设置尺寸。 或者尽量使用 top/left定位。

3、固定定位 (position:fixed)

相对于浏览器窗口,其余的特点类似于绝对定位。

三、浮动

浮动的元素可以在左右移动,直到它的外边框边缘碰到包含块或另一个浮动元素的边缘。浮动的元素离普通流。

如果包含块太窄,无法容纳水平排列的浮动元素,那么其他浮动元素向下移动,直到有足够多的空间。如果浮动元素的高度不同,那么当它们向下移动时可能会被其他浮动元素卡住。

行内元素会围绕着浮动框排列。