南宫做网站,网站改不了分类,全网关键词云在哪里看,北京装修公司排名前十名关于CSS position#xff0c;来自MDN的描述#xff1a; CSS position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left 属性则决定了该元素的最终位置。 然后来看看什么是文档流(normal flow)#xff0c;下面是 www.w3.org 的描述#xff1a; Normal flo…关于CSS position来自MDN的描述 CSS position属性用于指定一个元素在文档中的定位方式。top、right、bottom、left 属性则决定了该元素的最终位置。 然后来看看什么是文档流(normal flow)下面是 www.w3.org 的描述 Normal flow Boxes in the normal flow belong to a formatting context, which may be block or inline, but not both simultaneously. Block-level boxes participate in a block formatting context. Inline-level boxes participate in an inline formatting context. 个人补充此处参考FungLeo的博客文章原文点此
normal flow直译为常规流、正常流国内不知何原因大多译为文档流窗体自上而下分成一行一行并在每行中按从左至右的顺序排放元素每个非浮动块级元素都独占一行 浮动元素则按规定浮在行的一端若当前行容不下则另起新行再浮动内联元素也不会独占一行几乎所有元素(包括块级内联和列表元素均可生成子行用于摆放子元素有三种情况将使得元素脱离normal flow而存在分别是 floatabsolute fixed但是在IE6中浮动元素也存在于normal flow中。
一、position: static
MDN的描述 该关键字指定元素使用正常的布局行为即元素在文档常规流中当前的布局位置。此时 top、right、bottom、left 属性无效。 个人补充static是position的默认值。 1 !DOCTYPE html2 html langen3 head4 meta charsetUTF-85 titleCSS-position-static/title6 link relstylesheet hrefhttps://cdn.bootcss.com/normalize/8.0.0/normalize.css7 style8 .container{9 background-color: #868686;
10 width: 100%;
11 height: 300px;
12 }
13 .content{
14 background-color: yellow;
15 width: 100px;
16 height: 100px;
17 position: static;
18 left: 10px;/* 这个left没有起作用 */
19 }
20 /style
21 /head
22 body
23 div classcontainer
24 div classcontent
25 /div
26 /div
27 /body
28 /html 对 content 的 position 设定 static 后left就失效了而元素content就以正常的 normal flow 形式呈现。
二、position: relative
MDN的描述 该关键字下元素先放置在未添加定位时的位置再在不改变页面布局的前提下调整元素位置因此会在此元素未添加定位时所在位置留下空白。position:relative 对 table-*-group, table-row, table-column, table-cell, table-caption 元素无效。 个人理解相对于normal flow中的原位置来定位。 1 !DOCTYPE html2 html langen3 head4 meta charsetUTF-85 meta nameviewport contentwidthdevice-width, initial-scale1.06 meta http-equivX-UA-Compatible contentieedge7 titleCSS-position-relative/title 8 link relstylesheet hrefhttps://cdn.bootcss.com/normalize/8.0.0/normalize.css9 style
10 .container{
11 background-color: #868686;
12 width: 100%;
13 height: 300px;
14 }
15 .content_0{
16 background-color: yellow;
17 width: 100px;
18 height: 100px;
19 }
20 .content_1{
21 background-color: red;
22 width: 100px;
23 height: 100px;
24 position: relative;/* 这里使用了relative */
25 }
26 .content_2{
27 background-color: black;
28 width: 100px;
29 height: 100px;
30 }
31 /style
32 /head
33 body
34 div classcontainer
35 div classcontent_0
36 /div
37 div classcontent_1
38 /div
39 div classcontent_2
40 /div
41 /div
42 /body
43 /html position: relative 这是没有设置left、top等属性时正常出现在normal flow中的位置。
接着添加left、top 1 .content_1{
2 background-color: red;
3 width: 100px;
4 height: 100px;
5 position: relative;/* 这里使用了relative */
6 left: 20px;/* 这里设置了left和top */
7 top: 20px;
8 } 可以看到元素content_1的位置相对于其原位置normal flow中的正常位置进行了移动。
三、position: absolute
MDN的描述 不为元素预留空间通过指定元素相对于最近的非 static 定位祖先元素的偏移来确定元素位置。绝对定位的元素可以设置外边距margin且不会与其他边距合并。 个人理解生成绝对定位的元素其相对于 static 定位以外的第一个父元素进行定位,会脱离normal flow。注意是除了static外 1 !DOCTYPE html2 html langen3 head4 meta charsetUTF-85 meta nameviewport contentwidthdevice-width, initial-scale1.06 meta http-equivX-UA-Compatible contentieedge7 titleCSS-position-static/title8 link relstylesheet hrefhttps://cdn.bootcss.com/normalize/8.0.0/normalize.css9 style
10 .container{
11 background-color: #868686;
12 width: 100%;
13 height: 300px;
14 margin-top: 50px;
15 }
16 .content{
17 background-color: red;
18 width: 100px;
19 height: 100px;
20 position: absolute;
21 top: 10px;
22 }
23 /style
24 /head
25 body
26 div classcontainer
27 div classcontent
28 /div
29 /div
30 /body
31 /html position: absolute 因为 content 的父元素 container 没有设置 position默认为 static所以找到的第一个父元素是 bodybody/body可以看成是元素content相对于 body 向下移动10px。
四、position: fixed
MDN的描述 不为元素预留空间而是通过指定元素相对于屏幕视口viewport的位置来指定元素位置。元素的位置在屏幕滚动时不会改变。打印时元素会出现在的每页的固定位置。fixed属性会创建新的层叠上下文。当元素祖先的 transform 属性非 none 时容器由视口改为该祖先。 个人理解fixed相对于window固定滚动浏览器窗口并不会使其移动会脱离normal flow。 1 !DOCTYPE html2 html langen3 head4 meta charsetUTF-85 meta nameviewport contentwidthdevice-width, initial-scale1.06 meta http-equivX-UA-Compatible contentieedge7 titleCSS-position-static/title8 link relstylesheet hrefhttps://cdn.bootcss.com/normalize/8.0.0/normalize.css9 style
10 .container{
11 background-color: #868686;
12 width: 100%;
13 height: 1000px;
14 }
15 .content{
16 background-color: yellow;
17 width: 100px;
18 height: 100px;
19 position: fixed;/* 这里使用了fixed */
20 }
21 /style
22 /head
23 body
24 div classcontainer
25 div classcontent
26 /div
27 /div
28 /body
29 /html position: fixed 这里就不上图了看一下代码或者自己动手码一下就能理解。
五、position: sticky
MDN的描述 盒位置根据正常流计算(这称为正常流动中的位置)然后相对于该元素在流中的 flow rootBFC和 containing block最近的块级祖先元素定位。在所有情况下即便被定位元素为 table时该元素定位均不对后续元素造成影响。当元素 B 被粘性定位时后续元素的位置仍按照 B 未定位时的位置来确定。position: sticky对 table元素的效果与 position: relative 相同。 因为各大浏览器对于sticky的兼容问题而且JS也可以实现这个功能在这里就不进行深入了了解一下就好。
六、position: inherit
w3school.com的 描述 规定应该从父元素继承 position 属性的值。 inherit 继承父元素这个用得不多所以也不继续深入了。