当前位置: 首页 > Web前端 > CSS

下面说说css中的position属性

时间:2023-03-31 01:48:28 CSS

有过CSS开发经验的同学,肯定对position属性不陌生。不过这个熟悉的属性确实是面试题中的常客,这也说明了这个属性在CSS的世界里。它在世界上是有一定地位的,下面就详细说一下position这个属性。在w3school中,position属性的定义和用法是这样解释的。position属性指定元素的定位类型。说明此属性定义用于建立元素布局的定位机制。任何元素都可以定位,但绝对或固定元素会生成块级框,而不管元素自身的类型如何。相对定位的元素相对于其在正常流中的默认位置有偏移。CSS定位机制CSS具有三种基本定位机制:正常流定位、浮动定位和绝对定位。除非另有说明,否则所有框均按正常流程放置。也就是说,元素在正常流中的位置由元素在(X)HTML中的位置决定。块级盒子从上到下依次排列,盒子之间的垂直距离由盒子的垂直边距计算。行内框水平排列成一行。它们可以使用水平填充、边框和边距来隔开。但是,垂直填充、边框和边距不会影响行内框的高度。由一行组成的水平框称为行框,行框的高度总是足够大以容纳它包含的所有行内框。但是,设置行高可以增加这个框的高度。position属性对应的值为position:static;定位:继承;位置:相对;位置:绝对;位置:固定;定位:粘性;(新属性值)1.position的默认值:static。没有定位,元素出现在正常流中(忽略顶部、底部、左侧、右侧或z-index声明)。元素框正常生成。块级元素生成一个矩形框作为文档流的一部分,而内联元素创建一个或多个行框放置在它们的父元素中。2.position:inheritinherit值和其他css属性的inherit值一样,就是继承父元素的position值。3.position:relative相对定位,相对于自身的初始位置,不脱离文档流。也就是说,元素框架偏移了一定的距离,元素仍然保持定位前的形状,原先占据的空间依然存在。比如html结构div1

div2
div3
css样式div{width:100像素;高度:100px;}.div1{背景:#ffff00;}.div2{背景:#00ff00;位置:相对;顶部:40px;left:40px;}.div3{background:#0000ff;}结果是红色的框是div2的初始位置。由于div2设置了position:relative;top:40px;left:40px;,元素相对于其初始位置在上方40px和左侧40px。同时,其他元素的位置没有改变。4.position:absolute绝对定位元素的位置是相对于最近定位的祖先元素。如果该元素没有定位的祖先元素,则其位置是相对于原始包含块的。在示例中,我们稍微更改了div2.div2{background:#00ff00;的样式。位置:绝对;顶部:40px;left:40px;}由于div2的祖先元素都没有定位,它是相对于原始包含块body而言的,并且由于绝对定位脱离了文档流,所以div3占据了div2的原始位置。5.position:fixedfixed元素脱离了正常的文档流,所以和absolute元素很相似,也会被周围的元素忽略。它支持top、bottom、left、right属性,但是固定元素就像它的名字一样,固定在屏幕上的某处,不随浏览器的滚动条滚动。比如我们常用的返回顶部功能,按钮总是在浏览器的左下方。无论滚动条如何滚动,按钮始终位于左下角的固定位置。这个要求可以使用position:fixed来满足。不过需要注意的是,position:fixed存在兼容性问题,不支持IE6、IE7、IE8。可以通过给元素设置position:absolute,得到滚动条距顶部的高度加上一定的固定高度来实现。6.position:sticky这个属性很多同学会比较陌生,这是一个比较新的属性值。sticky的本意是粘着,可以说是粘性定位,只不过在css中表现的更像吸附。这是一种特殊的定位,结合了position:relative和position:fixed的功能。这个属性很适合常见的顶底效果(网站头部返回栏,底部切换栏等)。例如下面的淘宝效果,当元素与页面视口(Viewport,固定定位的参考)顶部的距离大于0px时,元素显示为相对定位,当距离元素与页面视口之间的距离小于0px,元素固定定位显示。它也将固定在顶部。注意必须指定top、right、bottom、left这四个阈值之一,粘性定位才能生效。否则它的行为与相对定位相同。并且同时设置top和bottom时,top优先生效;left和right同时设置时,left优先。任何设置了position:sticky的父节点的overflow属性必须是可见的,否则position:sticky不会生效。如果position:sticky元素的任意一个父节点的定位设置为overflow:hidden,则父容器不能滚动,所以position:sticky元素不会滚动然后固定。如果position:sticky元素的任何父元素将定位设置为position:relative|绝对|fixed,元素相对于父元素定位,而不是视口。达到设定的阈值,即设置position:sticky元素的行为是相对的还是固定的取决于元素是否达到设定的阈值。兼容性问题