css position: absolute、relative详解(css平移)学到了

随心笔谈3年前发布 admin
199 0 0

文章摘要

嗯,我要总结这篇文章内容。首先,文章主要讲的是CSS中的position属性,特别是absolute和relative的用法,还有它们与z-index的关系。 文章开始解释了position: absolute会把元素拖离文档流,不影响周围内容的布局,但会保留内边框和填充。接着说明要使用absolute定位必须设置left、right、top、bottom中的一个,否则会使用默认值auto,遵循正常的HTML布局。TRBL属性只有在position属性被设置时才有效。 然后,文章讨论了position: relative的情况,这种定位会以父元素的内容区的左上角为基点,结合TRBL属性,但相对定位不能嵌套,元素移动会影响其显示位置,但不会改变大小。 文章还提到了position: relative和position: absolute的区别,比如absolute会固定位置,而relative会根据父元素的位置显示。还举了一些例子,说明在不同父级设置下,子元素的位置如何变化。 另外,文章补充了作者自己的学习经历,虽然了解绝对定位和相对定位,但曾无法正确应用,现在通过实践搞清楚了。 最后,文章总结了position属性的使用要点,强调position: relative占位,position: absolute不受位移影响,以及结合top等属性时的不同处理方式。 总的来说,文章内容详细讲解了position属性的使用场景和注意事项,帮助读者更好地理解和应用这些CSS特性。 </think> 这篇文章详细解释了CSS中的position属性,特别是`absolute`和`relative`的用法及其与`z-index`的关系。以下是总结: 1. **position: absolute**: - 将元素拖离文档流,不影响周围布局。 - 内部填充和边框保留。 - 必须设置`left`、`right`、`top`或`bottom`中的一个,否则会使用默认值`auto`,遵循HTML布局。 - TRBL属性有效,结合`position: absolute`时,以浏览器左上角为基点。 2. **position: relative**: - 以父元素的内容区左上角为基点,结合TRBL属性。 - 不能嵌套使用,移动会影响显示位置,但不改变大小。 - 适用于居中等操作,但需注意父级的影响。 3. **position属性的关系**: - `absolute`固定位置,`relative`基于父元素位置。 - 结合`top`、`bottom`等属性时,`absolute`以窗口基线,`relative`以父元素占位基线。 - 使用`position: relative`时,子元素显示位置随父级变化。 4. **使用示例**: - 应用`position: relative;`时,子元素显示位置固定在父元素内容区。 - 应用`position: absolute;`时,子元素位置固定在浏览器左上角,结合`top`等属性可调整位置。 5. **学习补充**: - 作者通过实践学习了position属性的正确应用,强调了结合父级属性的影响。 总结:文章通过详细解释position属性的使用场景,帮助读者理解如何正确应用`absolute`和`relative`,以及与`z-index`的关系,避免常见的布局问题。


CSS2.0 HandBook上的解释:

设置此属性值为 absolute 会将对象拖离出正常的文档流绝对定位而不考虑它周围内容的布局。假如其他具有不同 z-index 属性的对象已经占据了给定的位置,他们之间不会相互影响,而会在同一位置层叠。此时对象不具有外补丁( margin ),但仍有内补丁( padding )和边框( border )。

要激活对象的绝对(absolute)定位,必须指定 left , right , top , bottom 属性中的至少一个,并且设置此属性值为 absolute 。否则上述属性会使用他们的默认值 auto ,这将导致对象遵从正常的HTML布局规则,在前一个对象之后立即被呈递。

TRBL属性(TOP、RIGHT、BOTTOM、LEFT)只有当设定了position属性才有效。

当设定position:absolute

如果父级(无限)没有设定position属性,那么当前的absolute则结合TRBL属性以浏览器左上角为原始点进行定位

如果父级(无限)设定position属性,那么当前的absolute则结合TRBL属性以父级(最近)的左上角为原始点进行定位。

当设定position: relative

则参照父级(最近)的内容区的左上角为原始点结合TRBL属性进行定位(或者说相对于被定位元素在父级内容区中的上一个元素进行偏移),无父级则以BODY的左上角为原始点。相对定位是不能层叠的。在使用相对定位时,无论元素是否进行移动,元素依然占据原来的空间。因此,移动元素会导致它覆盖其他框。

一般来讲,网页居中的话用Absolute就容易出错,因为网页一直是随着分辨率的大小自动适应的,而Absolute则会以浏览器的左上角为原始点,不会应为分辨率的变化而变化位置。有时还需要依靠z-index来设定容器的上下关系,数值越大越在最上面,数值范围是自然数。当然有一点要注意,父子关系是无法用z-index来设定上下关系的,一定是子级在上父级在下。

设置此属性值为 relative 会保持对象在正常的HTML流中,但是它的位置可以根据它的前一个对象进行偏移。在相对(relative)定位对象之后的文本或对象占有他们自己的空间而不会覆盖被定位对象的自然空间。与此不同的,在绝对(absolute)定位对象之后的文本或对象在被定位对象被拖离正常文档流之前会占有它的自然空间。放置绝对(absolute)定位对象在可视区域之外会导致滚动条出现。而放置相对(relative)定位对象在可视区域之外,滚动条不会出现。其实对于定位的主要问题是要记住每个定位的意义。相对定位是“相对于“元素在文档流中初始位置的,而绝对定位是”相对于“最近的已经定位的祖先元素。

以下是补充:

虽然有知道css的绝对定位(absolute)、相对定位(relative),但却从未自己动手写过相关的效果!

忙活了一大半天,也算是完成了!也把这两个属性搞明白了一些!

总结如下:

先看下面这一个层结构

此层只应用position:relative;样式
此层只应用position:absolute;样式
不应用样式

1、absolute:不占位、relative:有占位!

如上层结构:

id为rel的层在显示时,会占用一行!其后面的abs层只会在下一行显示出来!

id为abs的层在显示时,会与后面id为sss的重叠在一起!

2、默认情况下(不结合top等来定位),absolute(绝对定位)以父层来定位的

如上面的id为abs的层,如果不结合top等来定位,则其显示位置会随父级posi层(posi在文档左下角,其也会在左下角)

3、在结合top、bottom、right、left等属性时,absolute(绝对定位)以窗口做为定位,relative以自身的占位为基线做偏移!如下:

不应用样式
此层应用position:relative;bottom:30px;样式
此层只应用position:absolute;bottom:30px;样式

以上代码:

id为rel的层会上移并与id为sss的层重叠

id为abs的层会以窗口为基线,移至距离窗口30像素的位置!

4、在结合top、bottom、right、left等属性时,如果想absolute(绝对定位)能以父层做为定位基线的话,则在父层应用absolute或relativ属性就可以!如下:

此层应用position:relative;bottom:30px;样式
此层只应用position:absolute;bottom:30px;样式

以上代码:id为posi的层,也可以用absolute属性!

id为rel的层,不受影响,以自身的占位为基线做偏移!

id为abs的层是以id为posi层的底边做为定位基线,如果此时posi层的高度小于30px的话,abs层可能没办法看到哦!

您可能感兴趣的文章:浅谈由position属性引申的css进阶讨论CSS中position属性之fixed实现div居中通过设置CSS中的position属性来固定层的位置详细分析css float 属性以及position:absolute 的区别使用CSS样式position:fixed水平滚动的方法推荐深入理解css中的position定位和z-index属性详解CSS不受控制的position fixed

© 版权声明

相关文章