html position布局
html布局的方式
标准流 (文档流),浮动, position定位, flex布局,表格布局,网格布局
html元素可以分为
块级元素:div table p ol ui li 等(在标准流中独占一行)
内联元素:a span img input等(在标准流中不独占一行)
position定位:使用position属性进行定位
position属性的值有:static relative absolute fixed inherit
static:文档流 默认值
relative:相对定位,可以通过top,bottom,left,right来改变其相对于标准流的位置,(改变位置后可能与其他元素重叠,但原占有的空间不变)
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #p{ border: 1px solid black; } #span{ position: relative; left: 20px; top:20px; color: red; } </style> <body> <p id="p">这是一个段落,这里有很多内容。这是一个段落,这里有很多内 容。<span id="span">注意我的位置</span>这是一个段落,这里有很多内 容。</p> </body> </html>
结果:

可以看出span标签的内容相对与原本的文档流的位置发生了改变,向右和下移动了20px,注意其原本所占有的空间并没有关闭
absolute:绝对定位,可以通过top,bottom,left,right来改变其相对于标准流的位置,元素从标准流完全删除,原本应该占有的空间会关闭,定位后生成块级框。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #p{ border: 1px solid black; } #span{ position: absolute; left: 20px; top:20px; color: red; } </style> <body> <p id="p">这是一个段落,这里有很多内容。这是一个段落,这里有很多内 容。<span id="span">注意我的位置</span>这是一个段落,这里有很多内 容。</p> </body> </html>
结果:

将position属性设置为absolute后,span标签脱离了文档流,相当于从文档流中删除,等定位成功后在显示,其原来在文档流中所占的空间关闭。
fixed:相对于窗口进行定位
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #p{ border: 1px solid black; } #span{ position: fixed; left: 200px; top:200px; color: red; } </style> <body> <p id="p">这是一个段落,这里有很多内容。这是一个段落,这里有很多内 容。<span id="span">注意我的位置</span>这是一个段落,这里有很多内 容。</p> </body> </html>
结果

inherit:继承父元素的position
z-index 改变元素的层叠顺序(同一层叠上下文值越大显示越在上面)
定位元素(有position属性)z-index才有效 position:static无<!DOCTYPE html><html lang="zh">
<head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #parent{ width: 600px; height: 600px; background: red; } #child{ width: 300px; height: 300px; background: yellow;
z-index:-1;
} </style> <body> <div id="parent"> <div id="child"> </div> </div> </body> </html>

id为child的div无position属性 z-index失效
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #parent{ width: 600px; height: 600px; background: red; } #child{ position: absolute; width: 300px; height: 300px; background: yellow; z-index: -1; } </style> <body> <div id="parent"> <div id="child"> </div> </div> </body> </html>

可见当为child设置了position属性后z-index有效了因为值为-1,默认的parent元素的值为0 所以其被父元素给挡住了
注意以下代码
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> #parent_1{ position: absolute; left: 0; top: 0; width: 600px; height: 600px; background: red; z-index: 5; } #child_1{ position: absolute; width: 300px; height: 300px; background: yellow; z-index: 10; } #child_2{ position: absolute; top: 10px; left: 10px; width: 300px; height: 300px; background: blue; z-index: 4; } #parent_2{ position: absolute; left: 100px; top: 100px; width: 600px; height: 600px; background: black; z-index: 8; } </style> <body> <div id="parent_1"> <div id="child_1"></div> <div id="child_2"></div> </div> <div id="parent_2"></div> </body> </html>

虽然black区域的z-index值为8小于yellow区域的z-index的值10,但black区域显示在yellow区域的上面,因为2个位于不同的层叠上下文(2个不是同级兄弟元素),实际上比较的是yellow区域的父元素的值和black区域的值,5<8,所以yellow区域被遮挡
position实现3栏布局,中间宽度自适应
<!DOCTYPE html> <html lang="zh"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <style> .box { width: 100%; height: 400px; } .box>div{ height: 100%; position: absolute; } .left{ width: 300px; background: red; left: 0; top: 0; } .center{ background: yellow; height: 100px; left: 300px; right: 300px; top: 0; bottom: 0; } .right{ background: blue; width: 300px; right: 0; top: 0; } </style> <body> <div class="box"> <div class="left"></div> <div class="center"></div> <div class="right"></div> </div> </body> </html>

浙公网安备 33010602011771号