CSS定位之绝对定位
来源:互联网 发布:java string compare 编辑:程序博客网 时间:2024/05/14 10:38
绝对定位将一个元素框从文档流完全删除,并相对于其包含块定位。包含块的定义已经在之前的文章里解释过了。文档中的其他元素不受绝对定位元素的影响,就好像它不存在一样。元素定位后生成一个块级框,而不论原来它在正常流中生成何种类型的框。
1. position : absolute
绝对定位相对于包含块,根据left、right、top、bottom的值定位。前面的文章已经介绍过了包含块的概念,也列出了几个例子。这里主要讲一下绝对定位元素高度和长度的计算以及left等属性缺省时元素的呈现。对于绝对定位元素,总是存在以下公式:
'left' + 'margin-left' + 'border-left-width' + 'padding-left' + 'width'+ 'padding-right' + 'border-right-width' + 'margin-right' + 'right' = width of containing block
- 如果left、right、width的值都为auto,那么设置margin-left、margin-right为0如果它们的值为auto,如果父元素的direction为ltr(rtl),那么left(right)=父元素的left (right)padding,剩下的两个值由上述公式解出。例如,
<html> <head> <style type="text/css"> #container {border:solid 1px;height:50px;width:200px;margin:50px;position:relative;padding:5px;} #abs {background:red;position:absolute;margin:0 auto;} </style> </head> <body> <div id='container'> <div id='abs'>absolute</div> </div> </body></html>
margin-left、margin-right的值为0。元素相对与包含块的border edge产生了偏移,偏移的值是父元素的left-padding和top-padding。注意和设置left、top为0的区别
#abs {background:red;position:absolute;margin:0 auto;left:0;top:0;}
- 如果left、right和width都不为auto,那么当margin-left、margin-right为auto且公式内余下值的和小于包含块的宽时,margin-left=margin-right,值由公式算出。
#abs {background:red;position:absolute;margin:0 auto;left:50px;right:50px;width:100px;}
- 如果除左右边距外余下值的和已经大于了包含块的宽度,那么设margin-left(right)为0如果direction为ltr(ltr),剩下的一个由公式计算得出(为负值)。
#abs {background:red;position:absolute;margin:auto;left:200px;right:50px;width:100px;}
- 当left、right、width不全为auto,设置margin-left、margin-right为0如果它们的值为auto。
(1)当其中两个值不为auto,余下的一个由公式计算得出。
#abs {background:red;position:absolute;margin:0 10px 0 10px;right:20px;width:100px;}
上图中left=父元素的width-right-width=80px
(2)当left、right为auto,width不为auto时,如果父元素的direction为ltr(rtl),那么left(right)=父元素的left (right)padding,由公式解出right(left)的值。
#container {border:solid 1px;height:50px;width:200px;margin:50px;position:relative;padding:5px;}#abs {background:red;position:absolute;width:100px;}
(3)当left(right)、width为auto,right(left)不为auto时,计算出width的自适应的宽度。然后算出right(left)的值。
width自适应的值计算如下:
preferred width = 块里内容除了明确出现的换行符外不换行,所需的宽度
preferred minimum width = 块里内容在可以换行的地方(比如空格)都换行,所需的宽度
available width = 假设为auto的left(right)值为0时,width计算出的宽度
自适应的宽度=min(max(preferred minimum width, availablewidth), preferred width)
下面就展示了元素内容不同时不同的自适应效果。
#abs {background:red;position:absolute;left:20px;}
上面讨论的都是宽度相关的计算,高度相关计算是类似的,除了元素的高度取决与元素本身,并没有计算公式。另外当top、bottom的值都为auto时,总是设置top=父元素的top padding,这从第一、三张图片都可以看出。
2. position:fixed
fixed定位的元素其实就是absolute定位的一种特殊情况,只不过它的包含块是可视窗口,视觉上看就是一个元素固定在了当前窗口的某一个位置,并不会随着文档的滚动而移动。
<html> <head> <style type="text/css"> p { width:20px; line-height:60px;} img#left1 { height:100px; width:100px; position:fixed; top:100px; left:100px;} </style> </head> <body> <img id='left1' src="/i/eg_cute.gif" /> <p> line1 line2 line3 line4 line5 line6 line7 line8 line9 line10 </p> </body> </html>
可以看到,下拉滚动条并不会影响图片对于当前窗口的位置。
- CSS定位之绝对定位
- CSS定位之绝对定位
- CSS之定位,相对定位,绝对定位,固定定位
- CSS之----------相对定位,绝对定位
- css之相对定位与绝对定位
- css之绝对定位和相对定位
- CSS相对定位、绝对定位之我见
- DIV+CSS定位之相对定位与绝对定位
- CSS之定位(包括相对定位、绝对定位、浮动)
- CSS相对定位绝对定位
- css绝对定位&相对定位
- CSS绝对定位相对定位
- css相对定位,绝对定位,static定位
- css 固定定位 相对定位 绝对定位
- css相对定位、绝对定位、固定定位
- css :相对定位,绝对定位,固定定位
- CSS定位,相对定位,绝对定位
- CSS之绝对定位深入研究
- LR模拟HLS协议
- AssertionError、Error和Throwable
- When to use awakeFromNib , initWithWindow , windowDidLoad methods?
- 解决CentOS配置kdump失败的问题
- JAVA中String类的常用功能
- CSS定位之绝对定位
- SELinux中的sesearch命令找不到
- 各种浏览器全屏模式的方法、属性和事件介绍
- EM聚类算法简介
- c语言声明语法(参考其他文章)
- Android:解决列表滚动时背景色变黑的方法
- Android4.3 Bluetooth开篇
- ONE源代码分析——Report1
- 用javascript实现三级联动