CSS教程】【Web前端基础】css绝对定位和相对定位区别_第2页回答

2020-12-14 14:06发布

11条回答
猫的想法不敢猜
2楼 · 2021-01-24 11:20

一:绝对定位

position: absolute

绝对定位:绝对定位是相对于元素最近的已定位的祖先元素,如果元素没有已定位的祖先元素,那么它的位置则是相对于最初的包含块(也就是body)。

绝对定位本身与文档流无关,因此不占空间,普通文档流中的元素的布局就当绝对定位的元素不存在时一样,所以它们可以覆盖页面上其他的元素,且可以通过z-index属性来控制这些层的相应顺序。

    #div1 {
        width:150px;
        height:200px;
        background:green;
        position:absolute;
        left:100px;}/*由于div1没有已定位的祖先元素,因此此处div1的位置是以body为准*/
    #div1 span {
        position:absolute;
        width:20px;
        height:60px;
        line-height:20px;
        background:blue;
        right:-20px;/*绝对定位:以父类的位置为标准,也就是以div的位置为准,会在div1右边的20px出现span */
        top:70px;}

二:相对定位

position: relative

相对定位:相对位置的坐标参考系是以自己上一次的位置(x,y)作为原点(0,0)。

注意:在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。
    #div1 {
        width:150px;
        height:200px;
        background:green;
        position:relative;
        left:100px;}
    #div1 span {
        position:relative;
        width:20px;
        height:60px;
        line-height:20px;
        background:blue;
        right:-20px;/*相对定位:以它最初的位置为准,因为div是它的父类,所以它最初位置是在div1内,然后现在会在div1内部距离右边20px,距离div顶部70px处出现span */
        top:70px;}


不学还会不
3楼 · 2021-01-26 00:23

一:绝对定位

position: absolute

绝对定位:绝对定位是相对于元素最近的已定位的祖先元素,如果元素没有已定位的祖先元素,那么它的位置则是相对于最初的包含块(也就是body)。

绝对定位本身与文档流无关,因此不占空间,普通文档流中的元素的布局就当绝对定位的元素不存在时一样,所以它们可以覆盖页面上其他的元素,且可以通过z-index属性来控制这些层的相应顺序。

二:相对定位

position: relative

相对定位:相对位置的坐标参考系是以自己上一次的位置(x,y)作为原点(0,0)。

在使用相对定位时,无论是否进行移动,元素仍然占据原来的空间。因此,移动元素会导致它覆盖其它框。

722
4楼 · 2021-02-22 14:38

一、position 的四个值:static、relative、absolute、fixed。

绝对定位:absolute 和 fixed 统称为绝对定位

相对定位:relative

默认值:static

二、relative定位与absolute定位的区别

实例:

HTML代码:

css代码:

初始效果:

1、relative:相对于原来位置移动,元素设置此属性之后仍然处在文档流中,不影响其他元素的布局

给第二个box设置relative:

元素相对于原来位置偏移,宽高都没变,撑大了容器。

2、absolute:元素会脱离文档流,如果设置偏移量,会影响其他元素的位置定位

只给第五个box设置absolute:

说明:元素在没有定义宽度的情况下,宽度由元素里面的内容决定,效果和用float方法一样。

 absolute定位原理剖析:

1.在父元素没有设置相对定位或绝对定位的情况下,元素相对于根元素定位(即html元素)(是父元素没有)。

现在给box5偏移值来验证:

2.父元素设置了相对定位或绝对定位,元素会相对于离自己最近的设置了相对或绝对定位的父元素进行定位(或者说离自己最近的不是static的父元素进行定位,因为元素默认是static)。

补充:网上有人解释为元素会相对于第一个不是static的父元素定位,我觉得这很容易让人产生误解。以上是我自己的定义。

现在给body元素一个绝对定位(body元素设置为了absolute,整个容器的宽度由最长div决定,宽度变小了):

此时的box5现在相对于body元素定位

我把上面相对于html元素定位和相对于body定位的两张图放在一起,对比可以看到下面的图,相对于body定位的box5距离文字box1要远一点。所以在没有父元素设置相对定位或绝对定位的情况下,设置了absolute的元素会相对于html根元素定位。

css代码:

再来验证这句话:父元素设置了相对定位或绝对定位,元素会相对于离自己最近的设置了相对或绝对定位的父元素进行定位

现在给box们套三个父容器,如下:

html代码:

三个父容器的css样式如下:

 现在的样子,现在的box5并不是所说的相对于第一个不是static的元素定位(按这句话的说法,现在我的box5应该相对于最外层容器1偏移才对),而是相对于离自己最近的一层的设置了相对或绝对定位的父元素定位:

现在把第二个容器和第三个容器的position注释掉(没有position,设置top、left、bottom、right值都没有效),结果如下:

现在box5的外层设置了相对或绝对的父元素只有最外层容器1,所以box5现在相对于最外层容器1定位。(明显box5移动了)

现在只注释掉第三个容器的position

原理也是一样,现在相对于第二个容器定位(top:50px,离自己最近的设置了相对或绝对定位的父元素):

 上面第二个和第三个容器都设置的是相对定位,现在改成绝对定位:

css代码:

原理和把第二、第三个容器设置为relative一样,只是设置为absolute了之后,第三个容器包含着内容一起脱离了文档,所以没有撑开外面两层容器的宽度

现在的效果:

 外面再添一个容器,来验证上面第一、第二没有被撑开的效果

宽度受到上一层的父容器的宽度限制,现在拉宽第一层的容器的宽度,第二层和第三层随之变宽,效果如下:

 

但是如果容器里面有长的div,容器仍然可以被撑开,效果如下:

 补充:

box2设置为absolute定位之后,脱离文档流,box3向上移,左边被box2遮盖了。

 

 在上面的基础上,box3设置absolute,box3脱离文档流(就好像box3浮起来了一样,浮在了box2上面),box4往上移,box3盖住box2,和部分box4.

 同理如果box4设置了绝对定位,就会浮起来盖住box3和box2。

总结


relative:定位是相对于自身位置定位(设置偏移量的时候,会相对于自身所在的位置偏移)。设置了relative的元素仍然处在文档流中,元素的宽高不变,设置偏移量也不会影响其他元素的位置。最外层容器设置为relative定位,在没有设置宽度的情况下,宽度是整个浏览器的宽度。

absolute:定位是相对于离元素最近的设置了绝对或相对定位的父元素决定的,如果没有父元素设置绝对或相对定位,则元素相对于根元素即html元素定位。设置了absolute的元素脱了了文档流,元素在没有设置宽度的情况下,宽度由元素里面的内容决定。脱离后原来的位置相当于是空的,下面的元素会来占据位置。


相关问题推荐

  • 回答 14

    1.static:正常文档定位,此时top,bottom,left和z-index属性无效,块级元素从上往下纵向排布,行级元素从左往右排列2.relative: 相对定位,此时的相对是相对于正常文档流的位置3.absolute:相对于最近的非static定位祖先元素的偏移,来确定元素位置,比如一个绝...

  • 回答 8

    设置为相对定位的元素框会偏移某个距离。元素仍然保持其未定位前的形状,它原本所占的空间仍保留。相对定位是一个非常容易掌握的概念。如果对一个元素进行相对定位,它将出现在它所在的位置上。然后,可以通过设置垂直或水平位置,让这个元素相对于它的起点进...

  • 回答 15

    浮动和定位都可以使元素脱离标准文档流,提升层级,  浮动脱离文档流,提高半个层级,不能完全覆盖下面元素(不能覆盖图片文字)定位脱离标准文档流,提升一个层级,可以完全覆盖下面元素及其内容...

  • 回答 7

    绝对定位就是你的位置已经不属于你了,你只能漂浮在半空中。相对定位就是你的位置你还占用的,人还在飘着有意思的是这些都是相对父辈元素有position为相对或者绝对属性来定位的,都找不到的话就以body窗口来定位。...

  • 回答 17

    定位:1、相对定位 position:relative; 兼容2、绝对定位 absolut 兼容3、固zhuan定定位 fixed ie6不兼容

  • 回答 5

    css浮动属性通俗的来说就是让一个个原本坚守自己位置的元素让它们在网页中能紧挨在一起,举个例子来说吧,就比如有两个div盒子在网页中显示,一个盒子里展示的是图片,另一个盒子中展示的是文字,他们虽说自己占有的位置不大,可是他们却各占一行来显示,这可...

  • 回答 7

    引言:这篇文章是我对BFC的理解及总结,带你揭开BFC的面纱。你将会知道BFC是什么,形成BFC的条件,BFC的相关特性,以及他的实际应用。一、何为BFC       BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的...

  • 回答 8

    同时用JS就可以随意移动DIV标签的位置 {maxz_play} [removed]var obj=document.getElementById('idDiv');obj.style.left='10px';obj.style.top='10px';[removed]

  • 回答 9

    css浮动属性通俗的来说就是让一个个原本坚守自己位置的元素让它们在网页中能紧挨在一起,举个例子来说吧,就比如有两个div盒子在网页中显示,一个盒子里展示的是图片,另一个盒子中展示的是文字,他们虽说自己占有的位置不大,可是他们却各占一行来显示,这可...

  • 回答 12

    BFC 是 Block Formatting Context(块级格式化上下文)的缩写,它是为了解决如下问题:浮动定位外边距合并清除浮动自适应多栏布局

  • 回答 9

    一、何为BFC       BFC(Block Formatting Context)格式化上下文,是Web页面中盒模型布局的CSS渲染模式,指一个独立的渲染区域或者说是一个隔离的独立容器。二、形成BFC的条件      1、浮动元素,float 除 none 以外的值;       2、定位元素,p...

  • 回答 12

    css清除浮动可以理解为打破横向排列。 清除浮动的关键字是clear,官方定义如下: 语法: clear : none | left | right | both 取值: none : 默认值。

  • 回答 11

    float属性是CSS中常用的一个属性,在实际工作中使用的非常多,如果使用不当就会出现意料之外的效果。CSS世界中的float属性是一个年代非常久远的属性,设置了float属性的元素会根据设置的属性值向左或者向右浮动,直到它的外边缘碰到包含框或另一个浮动框的边...

  • 回答 11

    如果不定义浮动的话,各个div的内容在页面上是由上向下排列的。而如果某个div定义了float: left,那么这个div就会出现在上层div下最靠左的位置,而与它同一等级,但列在它后面的div就会显示在他的右侧了。同样,如果定义了float:right,那么这个div就会出现在...

  • 回答 6

    1、 元素类型的转换(display属性)Display属性属性值:BlockInlineNone大部分块状元素默认的display的值为block,其中li默认的值 list-item(列表元素)大部分内联元素默认的display值为inline,其中input默认的值为:inline-block;(行内块元素);内联元素...

没有解决我的问题,去提问