css绝对定位、相对定位和文档流的那些事
接触html、和css时间也不短了,但每次用div+css布局的时候心里还是有点儿虚,有时候干脆就直接用table算了,很多时候用div会出现些不可预料的问题,虽然花费一定时间能够解决,但总不是个事,所以今天特地探索了下css+div的绝对定位和相对定位和文档流的关系。
确切的说应该是文档文档流模型的机制,html的布局机制就是用文档流模型的,即块元素(block)独占一行,内联元素(inline)。不独占一行
如块级元素(block)
<div>div1</div> <div>div2</div>
效果如下
ok,那么怎么知道这不是因为没有设置高和宽的样式而出现的情况呢,我们听邓爷爷的话,实践是检验真理的唯一标准
<div style=" width:100px; height:100px;">div1</div> <div style=" width:100px; height:100px;">div2</div>
效果如下:额,没坑你吧...
又如内联元素(inline)
<img src="Image/close.gif" alt="图片" style=" height:100px; width:100px;"/> <a href="http:">超链接1</a> <a href="http:">超链接2</a>
效果如下:可以看到内联元素后跟内联元素不会另起一行
我们再试下inline 后加 block
<img src="Image/close.gif" alt="图片" style=" height:100px; width:100px;"/> <a href="http:">超链接1</a> <a href="http:">超链接2</a> <div style=" width:100px; height:100px;">div1</div>
效果如下:可以看到div1(block)是另起一行独占的
故名思意,相对定位就应该是相对于一个东西来定位,而这个东西是什么呢?其实这个东西不是什么,就是元素自己本身,用left right top b0ttom进行定位后,元素会根据原来的位置进行移动,但由于position:relative这个属性并没有脱离文档流的,所以元素本身所占的位置会保留。
下面来做个实验,一看你就懂了- -
<div style=" width:100px; height:100px;">div1</div> <div style=" width:100px; height:100px;">div2</div> <div style=" width:100px; height:100px;">div3</div>
效果如下:这是没有加入position:relative文档流的默认排法
我们给div2加position:relative 并用top:-20px;left:50px进行相对移动
<div style=" width:100px; height:100px;">div1</div> <div style=" width:100px; height:100px; position:relative; top:-20px; left:50px;">div2</div> <div style=" width:100px; height:100px;">div3</div>
效果如下:额,为了给大家看到效果还有省了ps的劲直接截了ide的图...但我保证在浏览器里他也是这么排的。我们可以看到蓝色边框就是div2原来的位置,黑色边框就是通过position:relative相对于原来的位置左移50px; 上移20px得到的,而且我们看以看到,div3并没有因为div2的上移而上移了,原因就是position:relative这个属性是没有脱离文档流的,所以元素本身所占的位置会保留。
好吧终于有点戏肉了,文档流那复杂的玩意我们先不理,所谓绝对定位,其实也要找个东西来相对来绝对的,而这个东西就是元素的第一个有position,且positon不能为static的祖先元素,是不是有点拗口,换个说法吧,就是这个小鬼(element)的定位可以是他的老爸,他的爷爷,他的太公....(祖先要素)中而且第一个是是有钱的(position:absolute)或者是当官的(position:relative),就是不能是个程序猿(position:static 或者没有设position)的。而且值得注意的是position:absolute这个属性是脱离文档流的,所以重新定位后元素是不会占着原来的位置的
还是跟着程序来吧- -
<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px""> 红色:太公 <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px""> 绿色:爷爷 <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; "> 黄色:老爸 <div style="width: 100px; height: 100px;"> div1</div> <div style="width: 100px; height: 100px;"> div2</div> <div style="width: 100px; height: 100px;"> div3</div> </div> </div> </div>
效果如下:首先给div1 div2 div3三个祖先div 黄色的老爸, 绿色的爷爷, 红色的太公,暂时对他们都不设position属性
好吧,现在给老爸div设position:relative(哟!当官的)给div2设position:absolute;left:120px; top:100px;
<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px""> 红色:太公 <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px""> 绿色:爷爷 <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; position:relative;"> 黄色:老爸 <div style="width: 100px; height: 100px;"> div1</div> <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;"> div2</div> <div style="width: 100px; height: 100px;"> div3</div> </div> </div> </div>
效果如下:可以从蓝色线看出,div2以黄色(ide的蓝线和黄色混在一起变色了)div为参照距离老爸左边120px 上边100px而且有于position:absolute是脱离文档流的所以div2原来的位置不能保留div3向上填充
我们再用他爷爷来试试
<div style=" border:1px solid Red; padding:10px; width: 340px; height: 400px"> 红色:太公 <div style="border:1px solid Green; padding:10px; width: 320px; height: 360px; position:relative;"> 绿色:爷爷 <div style="border:1px solid Yellow; padding:10px; width: 300px; height: 320px; "> 黄色:老爸 <div style="width: 100px; height: 100px;"> div1</div> <div style="width: 100px; height: 100px; position:absolute; left:120px; top:100px;"> div2</div> <div style="width: 100px; height: 100px;"> div3</div> </div> </div> </div>
效果如下:还是div2还是 position:absolute;left:120px;top:100px,可以冲蓝色线看出这次是以绿色爷爷为参照物做绝对定位的,而且div2同样脱离了文档流
至于他太公,一把年纪了,我们就放过他吧- -
相关推荐
在网页设计和开发中,定位(Positioning)是布局的关键元素,主要分为两种类型:相对定位(Relative Positioning)和绝对定位(Absolute Positioning)。这两种定位方式都是CSS(层叠样式表,Cascading Style Sheets...
- **文档流**:绝对定位元素脱离了正常文档流,而相对定位元素仍然存在于文档流中,不影响其他元素的布局。 - **影响范围**:绝对定位会影响其所在层的所有元素,而相对定位仅影响自身。 ### 实践应用 1. **创建弹...
- 相对定位的元素不会脱离文档流,这意味着它仍然会影响其他元素的位置。 - 通常用于微调元素的位置,而不改变其在文档流中的默认行为。 #### 绝对定位(Absolute Positioning) 绝对定位允许元素完全脱离文档流...
2. **相对定位(Relative Positioning)**:当元素的`position`属性设置为`relative`时,该元素仍保持在正常的文档流中,但可以通过`top`、`right`、`bottom`和`left`属性调整其相对于原始位置的偏移量。这种定位...
综上所述,理解并熟练运用相对定位和绝对定位,以及它们之间的子父级关系,能极大地提升网页设计的灵活性和精确性。通过实践和案例分析,可以更好地掌握这些技巧,从而创造出更加精致和动态的网页布局。
如果说相对定位没有脱离文档流,相对于对象本身进行偏移有点拖泥带水的话,那么绝对定位绝对是快刀斩乱麻,因为绝对定位可以使一个对象脱离正常的文档流,好像是漂浮在正常文档流的上空,并相对于包含此对象的元素...
定位主要包括静态定位、绝对定位和相对定位三种方式。 1. 静态定位(static):这是元素的默认定位方式,元素按照正常的文档流排列,不受left, right, top, bottom等属性的影响。 2. 绝对定位(absolute):绝对...
在CSS布局中,绝对定位(absolute positioning)是一种强大的定位机制,允许元素脱离其正常文档流,并根据相对于某个特定祖先元素的位置进行布局。这篇博客“css-绝对定位的参考对象”深入探讨了这一主题,让我们一...
相对定位(`position: relative`)使元素可以在不脱离正常文档流的情况下,通过设置`top`、`bottom`、`left`和`right`属性来改变元素的位置。这些属性值分别指定了元素在垂直和水平方向上的偏移量。 例如: ```css ...
在网页设计中,CSS(层叠样式表)扮演着至关重要...绝对定位则用于创建独立于文档流的定位元素,常用于复杂的布局和层叠效果。熟练掌握这两种定位方式,能够帮助开发者更好地控制网页元素的布局和交互,提升用户体验。
绝对定位(Absolute Positioning)**:绝对定位是指元素完全脱离文档流,相对于最近的非`static`定位的祖先元素进行定位。如果找不到这样的祖先元素,则相对于`body`元素定位。 - **CSS写法**:“position: ...
相对定位保留了元素在正常文档流中的位置,元素的原始位置不会被改变,但它可以通过设置`top`、`bottom`、`left`和`right`属性来调整其位置。即使元素被移动,它仍然占据着原来的空间,可能会与其他元素重叠。例如:...
与相对定位不同,绝对定位的元素会完全脱离文档流,不会影响其他元素的位置。它依赖于一个祖先元素(通常是`position: relative`或`position: absolute`的元素),如果没有这样的祖先,那么它将相对于浏览器窗口定位...
值得注意的是,绝对定位的元素并不占据原来在文档流中的空间,因此会影响到其他元素的布局。 绝对定位的一个关键特性是`z-index`属性。由于绝对定位的元素可以叠加在其他元素之上,`z-index`用于决定这些元素的堆叠...
相对定位是CSS定位的基础,它允许元素在不改变其在正常文档流中的位置的情况下进行微调。当一个元素被设置为相对定位,通过`position: relative;`,我们可以使用`left`、`right`、`top`和`bottom`属性来调整元素相...
绝对定位使元素的位置与文档流无关,因此不占据空间。绝对定位的元素框与文档流无关,所以它们可以覆盖页面上的其它元素。 绝对定位的语法格式为: position: absolute; top: 260px; left: 260px; 在上面的代码...
层定位主要包括两种形式:**绝对定位**和**相对定位**。绝对定位是指层相对于其最初位置或浏览器窗口的位置进行固定,而相对定位则是指层相对于其最近的非静态定位祖先元素的位置进行定位。 #### 实现方法 ### 1. ...
浮动、绝对定位和相对定位是CSS中的关键概念,它们对于创建复杂的网页布局至关重要。本讲座将深入探讨这些概念,帮助您理解何时及如何有效地使用它们。 1. CSS 浮动(Float) 浮动最初是为了实现文本环绕图像而引入...