CSS学习九:定位与层叠
浮动会让出文档流的位置,绝对定位和相对定位不会让出文档流的位置。固定定位会让出文档流的位置,比浮动层更高层,即位于顶层。
一、定位:{position:.....},结合left,top等定位距离
css定位属性position:允许你对元素进行定位。允许你定义元素框相对于其正常位置应该出现的位置,或者相对于父元素,另一个元素甚至浏览器窗口本身的位置。
position定位,相对于上一个定位元素,不一定是父级元素。
一切皆为框:块框,行内框。
CSS框定位机制:普通流(文档流)、浮动流和绝对定位。
position定位属性的属性值:
- absolute:设置绝对定位的元素,是相对于具有定位属性的父级元素偏移元素的位置,通过left/top/right/bottom属性进行规定。它的父级元素要有相对定位属性relative,或绝对定位属性absolute。
- fixed:生成固定定位的元素,相对于浏览器窗口进行定位。元素的位置通过left,top,right,bottom属性进行规定。
- relative:相对定位的元素,相对于该元素原来位置偏移。因此元素的位置通过left,top,right,bottom属性进行规定。
- static:默认值。没有定位(元素的位置通过left,top,right,bottom属性进行规定)。
绝对定位:以父元素为基点,进行定位
使用绝对定位的元素,以它最近的一个具有定位属性的父级元素为基准进行偏移。如果没有任何”具有定位属性“的父级元素,那么会以浏览器窗口为基准进行定位。
绝对定位、相对定位、固定定位的元素从标准文档流中脱离出来,因此它们不会对其它元素的定位造成影响。但可能造成覆盖的影响。
设置绝对定位的两个必要 条件:
- 必须给父级元素(任何一个祖先元素)加定位属性,一般建议加相对定位属性,不定方向属性:position:relative
- 给子元素加绝对定位:position:absolute,同时加上方向属性。
经验:设置了绝对定位,但没有设置偏移的元素将保持在原来的位置。这个性质在网页制作中,可以用于需要使某个元素脱离标准流,而仍然希望它保持在原来的位置的情况。
示例div1相对于div box定位:
<style type="text/css"> * { margin: 0; padding: 0; } #box { width: 500px; height: 500px; background-color: #0000FF; position: relative; } #div1 { width: 100px; height: 100px; background-color: red; position: absolute; left: 10px; top: 50px; } </style>
<div id="box"> <div id="div1"> </div> </div>
示例,div2相对于div1定位时,div1是定位元素,则相对于div1定位:
<style type="text/css"> * { margin: 0; padding: 0; } #box { width: 500px; height: 500px; background-color: #0000FF; position: relative; } #div1 { width: 100px; height: 100px; background-color: red; position: absolute; left: 10px; top: 50px; } #div2 { width: 20px; height: 20px; background-color: yellow; position: absolute; left: 5px; top: 5px; } </style>
<div id="box"> <div id="div1"> <div id="div2"></div> </div> </div>
示例,div2相对于div1定位时,div1不是定位元素,但div1的父级是定位元素,则最终结果是相对于div1的父级box定位:
<style type="text/css"> * { margin: 0; padding: 0; } #box { width: 500px; height: 500px; background-color: #0000FF; position: relative; } #div1 { width: 100px; height: 100px; background-color: red; margin: 10px; } #div2 { width: 20px; height: 20px; background-color: yellow; position: absolute; left: 5px; top: 5px; } </style>
<div id="box"> <div id="div1"> <div id="div2"></div> </div> </div>
以上,不论div1,还是div2,都是相对于已有的定位元素进行的绝对定位。
相对定位,是相对于元素自身原来的位置的偏移,而不是相对于其它元素。
相对定位:无论是在标准流中,还是浮动流中,都不会对它的父级元素和相邻元素有任何影响,它只针对自身原来的位置进行偏移。如果与相领位置有冲突,则覆盖相冲突的区域。
示例,box相对于自己原来的位置,进行相对定位。如果设置了left,right,top,bottom,则偏移:
<style type="text/css"> * { margin: 0; padding: 0; } #box { width: 500px; height: 500px; background-color: #0000FF; position: relative; left: 20px; } </style>
<div id="box"> </div>
绝对定位时,如果没有任何祖先元素设置定位,那么此元素的绝对定位是相对应浏览器窗口定位。
固定定位定律:
- 元素框的表现类似于将position设置为absolute,不过其包含块是视窗本身。
- 固定定位是相当于”当前窗口“来进行的定位。
- 固定定位元素不再占文档流的空间,层级要高于普通流文档的元素,跟浮动很像。
- 固定定位元素,是一个”块元素“,即行内元素使用fiexed定位,将转成”块元素“。
示例,fixed相对于浏览器窗口固定,常用于移动端。
使屏幕超出上下范围,可以上下滚动:设置height超过屏幕的高度
<div style="width: 10px; height: 1000px;background-color: #800080;"></div>
设置div3,相对于浏览窗口固定,不论怎么移动屏幕,它的位置就位于固定位置:
<div id="div3"></div>
#div3 { width: 20px; height: 20px; background-color: darkorchid; position: fixed; left: 500px; bottom: 500px; }
总结浮动流与定位的相同和区别:
浮动流与定位,都脱离了文档流。
浮动流会让出原来的位置,给相邻元素使用。一般会覆盖某些文档流元素。
定位不会让出原来的位置,不会影响相邻元素的位置。可能会覆盖某些文档流元素。
二、z-index属性:层叠
z-index属性:设置元素的层叠顺序 ,属性值为无单位的整数值,值较大的元素会叠加在值 较小的元素之上
z-index属性值:整数,默认值为0。
z_index值越大越靠上。
说明:
在position为static时,会忽略z-index声明。没有定位时,z-index层叠是没有意义的。
即z-index,必须和定位一起使用,才有意义。
示例,div1和div4的层叠:
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> * { margin: 0; padding: 0; } #box { width: 500px; height: 500px; background-color: #0000FF; position: relative; left: 20px; } #div1 { width: 100px; height: 100px; background-color: red; position: absolute; left: 10px; top: 20px; z-index: 999; } #div2 { width: 20px; height: 20px; background-color: yellow; position: absolute; left: 5px; top: 5px; } #div3 { width: 20px; height: 20px; background-color: darkorchid; position: fixed; left: 500px; bottom: 500px; } #div4 { width: 100px; height: 100px; background-color: aqua; position: absolute; left: 30px; top: 80px; z-index: 100; } </style> </head> <body> <div id="box"> <div id="div1"> <div id="div2"></div> </div> </div> <div style="width: 10px; height: 1000px;background-color: #800080;"></div> <div id="div3"></div> <div id="div4"></div> </body> </html>
三、练习
定位练习:
在图片最后一行,添加文字.
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <style type="text/css"> #box { width: 700px; height: 500px; margin: 0 auto; background-color: antiquewhite; position: relative; } #img { width: 700px; height: 400px; background-image: url(img/timg.jpg); position: relative; } #pp { position: absolute; left: 0; right: 0; bottom: 0; text-align: center; } </style> </head> <body> <div id="box"> <div id="img"> <p id="pp">汤美女..........</p> </div> <p>abc...........</p> <p>111111..........</p> </div> </body> </html>
示例,下拉菜单:
示例,跟随菜单:
posted on 2018-11-17 16:38 myworldworld 阅读(478) 评论(0) 收藏 举报