定义和用法:position 属性规定元素的定位类型。css
说明:这个属性定义创建元素布局所用的 定位机制 。任何元素均可以定位,不过绝对或固定元素会生成一个块级框,而不论该元素自己是什么类型。相对定位元素会相对于它在正常流中的默认位置偏移。html
—— 来自 w3school前端
position
有如下可选值:git
值 | 描述 |
---|---|
absolute | 生成绝对定位的元素,相对于 static 定位之外的第一个父元素进行定位。 元素的位置经过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
fixed | 生成绝对定位的元素,相对于浏览器窗口进行定位。 元素的位置经过 "left", "top", "right" 以及 "bottom" 属性进行规定。 |
relative | 生成相对定位的元素,相对于其正常位置进行定位。 所以,"left:20" 会向元素的 left 位置添加 20 像素。 |
sticky | CSS3 新增,粘性定位,相对于最近的一个拥有“滚动机制”的祖先上(当该祖先的overflow 是 hidden, scroll, auto 或 overlay时,即不是 visible 时)。 它的行为就像 position:relative 而当页面滚动超出目标区域时,它的表现就像 position:fixed,它会固定在目标位置。 |
static | 默认值。没有定位,元素出如今正常的流中 (忽略 left、top、right、bottom 或者 z-index 声明)。 |
inherit | 规定应该从父元素继承 position 属性的值。 |
其中,CSS 定位机制:github
CSS 有三种基本的定位机制:普通流、浮动和绝对定位。面试
除非专门指定,不然全部框都在普通流中定位。也就是说,普通流中的元素的位置由元素在 (X)HTML 中的位置决定。算法
块级框从上到下一个接一个地排列,框之间的垂直距离是由框的垂直外边距计算出来。浏览器
行内框在一行中水平布置。可使用水平内边距、边框和外边距调整它们的间距。可是,垂直内边距、边框和外边距不影响行内框的高度。由一行造成的水平框称为行框(Line Box),行框的高度老是足以容纳它包含的全部行内框。不过,设置行高能够增长这个框的高度。markdown
绝对定位 ,绝对定位的元素的位置相对于最近的已定位父元素,若是元素没有已定位的父元素,那么它的位置相对于 <html>
:oop
<div class="one">one</div>
<div class="two">two</div>
<div class="three">three</div>
复制代码
div {
width: 100px;
height: 100px;
}
.one {
background: red;
}
.two {
background: yellow;
position: absolute;
top: 50px;
left: 50px;
}
.three {
background: green;
}
复制代码
固定定位 ,与绝对定位类似,但元素的包含块为 viewport 视口。该定位方式经常使用于建立在滚动屏幕时仍固定在相同位置的元素。在下面的示例中,"one" 元素定位在离页面顶部 80px,离页面左侧 20px 的位置。
<div class="an">
<div class="one">one</div>
<div class="two">two</div>
</div>
复制代码
.an {
width: 500px;
height: 300px;
overflow: scroll;
background: indianred;
}
.one {
position: fixed;
top: 50px;
left: 50px;
background: red;
width: 100px;
height: 100px;
color: white;
}
.two {
background: yellow;
height: 500px;
}
复制代码
相对定位 ,相对于其正常位置进行定位,不影响其余元素的偏移。
<div class="one">one</div>
<div class="two">two</div>
<div class="three">three</div>
复制代码
div {
width: 100px;
height: 100px;
color: white;
}
.one {
background: red;
}
.two {
background: yellow;
position: relative;
top: 50px;
left: 50px;
}
.three {
background: green;
}
复制代码
粘性定位 ,能够被认为是相对定位和固定定位的混合。元素在跨越特定阈值前为相对定位,以后为固定定位
这是一个结合了 position:relative
和 position:fixed
两种定位功能于一体的特殊定位。常见的吸顶、吸底(头部返回栏,底部切换栏等)的效果都是使用这个属性:
注意:
top
、 right
、 bottom
、 left
四个阈值其中之一,才可以使粘性定位生效。不然其行为与相对定位相同。 而且 top
和 bottom
同时设置时,top
生效的优先级高,left
和 right
同时设置时,left
的优先级高。position:sticky
元素的任意父节点的 overflow
属性必须是 visible
,不然 position:sticky
不会生效。若是 position:sticky
元素的任意父节点定位设置为 overflow:hidden
,则父容器没法进行滚动,因此 position:sticky
元素也不会有滚动而后固定的状况。若是 position:sticky
元素的任意父节点定位设置为 position:relative | absolute | fixed
,则元素相对父元素进行定位,而不会相对 viewport
定位。position:sticky
的元素表现为 relative
仍是 fixed
是根据元素是否达到设定了的阈值决定的。静态定位 ,HTML 元素默认状况下的定位方式为 static(静态),静态定位的元素不受 top、bottom、left 和 right 属性的影响,它始终根据页面的正常流进行定位
inherit
值如同其余 css
属性的 inherit
值,即继承父元素的 position
值。