曾经写网页,学css整体上不难,但就是元素定位,始终一知半解,直到今天,本着实践出真知的理念,经过认真测试,总结出了如下结论。
css 定位: position
static : 默认静止定位,元素在正常的文档流中无法移动定位。
absolute :独立元素,元素从文档流中脱离,会相对于父层(static定位的父层除外)移动定位。
relative : 相对定位,相对本身的位置移动定位,效果等同于相对于父层移动定位。
fixed: 固定定位,相对于窗口移动定位。
注:
1、移动定位是指通过 top,bottom,left,right属性来移动元素位置。
2、任何元素都有相对于父层定位的特性,所以当不用方向移动定位属性,而只用 margin 定位,则必然是相对的位移。
3、absolute 是“独立的,绝对”的意思,我觉得应该是取“独立的”意义更好理解。它所达到的效果就是元素从文档流中脱离,印证了独立存在的意义。
测试结果如下(static元素就不测试):
子元素 ( 相对于 =>) 父元素
absolute => static 绝对
fixed => static 绝对
relative => static 相对
absolute => absolute 相对
fixed => absolute 绝对
relative => absolute 相对
absolute => relative 相对
fixed => relative 绝对
relative => relative 相对
absolute => fixed 相对
fixed => fixed 绝对
relative => fixed 相对
简述CSS样式表元素的定位
1. position:static|无定位
position:static是所有元素定位的默认值, 一般不用注明,除非有需要取消继承的别的定位
example:
代码如下 | 复制代码 |
#div-1 { |
2. position:relative|相对定位
使用position:relative,就需要top,bottom,left,right4个属性来配合,确定元素的位置。
如果要让div-1层向下移动20px,左移40px:
example:
代码如下 | 复制代码 |
#div-1 { |
如果用到相对定位,紧随他的层divafter是不会出现在div-1的下方,而是和div-1在同一个高度出现。
可见, position:relative;并不是很好用。
3. position:absolute|绝对定位
使用position:absolute;,能够很准确的将元素移动到你想要的位置,
让我将 div-1a 移动到页面的右上角:
example:
代码如下 | 复制代码 |
#div-1a { |
使用绝对定位的div-1a层前面的或者后面的层会认为这个层并不存在,丝毫不影响到他们。所以position:absolute;用于将一个元素放到固定的位置很好用,但是如果需要div-1a层相对于附近的层来确定位置就不要实现了。
*这里有个Win IE的bug需要提到,就是如果为绝对定位的元素定义一个相对的宽度,那么在IE下它的宽度取决于父元素的宽度而不是整个页面的宽度。
4. position:relative + position:absolute|绝对定位+相对定位
如果给父元素(div-1)定义为position:relative;子元素(div-1a)定义为position:absolute,那么子元素(div-1a)的位置将相对于父元素(div-1),而不是整个页面。
让div-1a定位于div-1的右上角:
example:
代码如下 | 复制代码 |
this is div-1a element. this is div-1 element. #div-1 { position:relative; } #div-1a { position:absolute; top:0; right:0; width:200px; } |
5. two column layout|两列布局
让我们实践position:relative + position:absolute的理论,实现两列布局。
example:
代码如下 | 复制代码 |
this is the column-one this is the column-two #div-1 { position:relative;/*父元素相对定位*/ } #div-1a { position:absolute;/*子元素绝对定位*/ top:0; right:0; width:200px; } #div-1b { position:absolute;/*子元素绝对定位*/ top:0; left:0; width:200px; } |
注意,在这个例子中会发现父元素的告诉不会随着子元素的告诉变化,所以如果父元素的背景和边框需要定义一个足够高的高度才能显示出来。
6.float|浮动对齐
使用float定位一个元素有float:left;&float:right;两种值。这种定位只能在水平坐标定位,不能在垂直坐标定位。而且让下面的元素浮动环绕在它的左边或者右边。
example:
代码如下 | 复制代码 |
#div-1a { |
7.make two clumn with float|浮动实现两列布局
如果让一个元素float:left;另一个float:right;控制好他们的宽度,就能实现两列的布局效果。
example:
代码如下 | 复制代码 |
#div-1a { |
8.clear float|清除浮动
如果你不想让使用了float元素的下面的元素浮动环绕在它的周围,那么你就使用clear,clear有三个值,clear:left;(清除左浮动),clear:right;(清除右浮动),clear:both;(清除所有浮动)。
example:
代码如下 | 复制代码 |
this is div-1a this is div-1b this is div-1c #div-1a { float:left; width:190px; } #div-1b { float:left; width:190px; } #div-1c { clear:both; } |
至此,这个css的定位部分就结束了,你可以动手体会体会加深印象。
用于设置相对和绝对定位元素的"内外"位置,数值越小的在最内层,外层的将覆盖内层
例子
代码如下 | 复制代码 |
"http://www.worg/TR/xhtml1/DTD/xhtml1-transitional.dtd"> position: absolute; top: 5px; right: 20px; position: absolute; left: 20px; position: absolute; top: 5px; left: 5px; position: relative; left: 150px; width: 300px; height: 50px; 1 2 3 4 5 padding: 20px 0 0 20px; position: absolute; position: relative; /> left: 200px; width: 300px; height: 300px; position: absolute; top: 20px; right: 20px; position: absolute; bottom: 20px; left: 20px; |
绝对定位使用条件
position:absolute;position:relative绝对定位使用通常是父级定义position:relative定位,子级定义position:absolute绝对定位属性,并且子级使用left或right和top或bottom进行绝对定位。
.divcss5{position:relative} 定义,通常最好再定义CSS宽度和CSS高度
.divcss5-a{position:absolute;left:10px;top:10px} 这里定义了距离父级左侧距离间距为10px,距离父级上边距离为10px
或
.divcss5-a{position:absolute;right:10px;bottom:10px} 这里定义了距离父级靠右距离10px,距离父级靠下边距离为10px
对应HTML结构
代码如下 | 复制代码 |
这样就绝对定位了“divcss5-a”在父级“divcss5”盒子内。
注意的是,left(左)和right(右)在一个对象只能选一种定义,bottom(下)和top(上)也是在一个对象只能选一种定义。