CSS的position定位及区别

本文详细介绍了CSS中的position属性,包括static、relative、absolute和fixed四种定位方式。static为默认定位,遵循正常文档流;relative是相对定位,不影响其他元素布局;absolute是绝对定位,相对于最近的relative父元素定位,若无则相对于视口,会脱离文档流;fixed则是固定定位,始终相对于浏览器视口,同样脱离文档流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

position 常用属性:

 

【1】static

静态定位。默认值,即没有定位,遵循正常的文档流对象,不受到 top、bottom、left、right影响。

【2】relative

相对定位。相对于离它最近的使用static定位的父元素进行定位,不脱离文档流(不影响其他元素的布局)。

例子:(为显而易见,将用内联样式)

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
</head>
<body>
  <div style="width: 300px; height: 300px; background: #ccc;">
	<div style="width: 100%; height: 20px; background: #777;"></div>
		
	  <div style="width: 200px; height: 200px; background: pink">
		<div style="width: 50px; height: 50px; background: blue"></div>
		<div style="width: 50px; height: 50px; background: green; position: relative; top: 20px; left: 20px;"></div>
		<div style="width: 50px; height: 50px; background: yellow"></div>
	  </div>
		
  </div>
</body>
</html>

 

green块使用了relative定位。可见,是相对于离它最近的使用static定位的父元素(pink块)进行定位 的,不脱离文档流(其他块的布局按文档流布局,blue块与yellow块之间,仍然保留着green块的布局大小)

【3】absolute 

绝对定位。相对于离它最近的使用relative定位的父元素进行定位,如没有找到使用relative定位的父元素,将相对于浏览器视口进行定位,脱离文档流(将影响其他元素的布局)。

例子:

<!DOCTYPE html>
<html style="width:400px; height: 400px; border:1px solid red; margin-left: 30px;">
<head>
<meta charset="utf-8">
</head>
<body>
	<div style="width: 300px; height: 300px; background: #ccc;">
		
		<div style="width: 100%; height: 20px; background: #777;"></div>
		
		<div style="width: 200px; height: 200px; background: pink">
			<div style="width: 50px; height: 50px; background: blue"></div>
			<div style="width: 50px; height: 50px; background: green; position: absolute; top: 20px; left: 20px;"></div>
			<div style="width: 50px; height: 50px; background: yellow"></div>
		</div>
		
	</div>
</body>
</html>

 

 green块使用了absolute定位。可见,它当前没有找到使用relative定位的父级元素,所以相对于视口(非html)进行布局,red框是<html></html>节点,另外,yellow块的布局改变了,blue块与yellow块之间并不保留着green块的布局。

现在我们在pink块上添加relative定位试试看:

<!DOCTYPE html>
<html style="width:400px; height: 400px; border:1px solid red; margin-left: 30px;">
<head>
<meta charset="utf-8">
</head>
<body>
	<div style="width: 300px; height: 300px; background: #ccc;">
		
		<div style="width: 100%; height: 20px; background: #777;"></div>
		
		<div style="width: 200px; height: 200px; background: pink; position: relative;">
			<div style="width: 50px; height: 50px; background: blue"></div>
			<div style="width: 50px; height: 50px; background: green; position: absolute; top: 20px; left: 20px;"></div>
			<div style="width: 50px; height: 50px; background: yellow"></div>
		</div>
		
	</div>
</body>
</html>

可见,它当前相对于pink块(使用relative定位的父级元素)进行布局。

【4】fixed

固定定位。相对于浏览器视口进行定位,脱离文档流(于其他元素的布局无关)。相对容易理解,不上代码。

 

 

 

### CSS `position` 属性使用指南 #### 一、CSS 定位概述 CSS 中的 `position` 属性用于定义元素框相对于其正常位置或其他容器的位置。通过设置不同的定位类型,可以精确控制 HTML 元素在页面中的布局[^1]。 --- #### 二、定位类型的详细说明 ##### 1. **Static(默认定位)** 这是所有 HTML 元素的默认定位方式。在这种模式下,元素按照正常的文档流进行排列,不受 `top`, `bottom`, `left`, `right` 属性的影响[^3]。 ```css /* 默认定位 */ .element { position: static; } ``` ##### 2. **Relative(相对定位)** 相对定位使元素相对于其原始位置偏移,而不会影响其他元素的布局。尽管该元素被重新定位,但它仍然占据原来的空间。 ```css /* 相对定位 */ .relative-element { position: relative; top: 20px; /* 向上移动 20px */ left: 10px; /* 向右移动 10px */ } ``` ##### 3. **Absolute(绝对定位)** 绝对定位将元素从标准文档流中移除,并将其放置在一个指定的位置。如果父级元素设置了 `position` 属性为非 `static` 值,则子元素会相对于最近的已定位祖先元素;如果没有这样的祖先,则相对于初始包含块(通常是浏览器窗口)。 ```css /* 绝对定位 */ .absolute-element { position: absolute; top: 50px; right: 30px; } ``` ##### 4. **Fixed(固定定位)** 固定定位类似于绝对定位,但是固定的参照物是视窗本身而不是某个特定的HTML标签或者区域。即使用户滚动页面,这种类型的盒子也会保持不动[^2]。 ```css /* 固定定位 */ .fixed-element { position: fixed; bottom: 0; right: 0; } ``` ##### 5. **Sticky(粘性定位)** 粘性定位是一种混合形式,在某些条件下表现为相对定位而在另一些条件则像固定定位一样工作。通常来说,当目标对象位于可见区域内时表现得像是相对定位,一旦超出可视范围就变成固定定位。 ```css /* 粘性定位 */ .sticky-element { position: sticky; top: 10px; /* 距离顶部的距离 */ } ``` --- #### 三、实际应用场景与案例分析 以下是几个常见的场景以及如何利用不同种类的定位来解决问题: - **导航栏始终显示于顶端** 可以采用 Fixed Position 来实现这一需求,使得无论怎样滑动网页内容,导航条都维持在其设定好的地方不变形也不消失。 - **侧边栏跟随浏览行为变化** Sticky positioning 很适合用来创建随着用户的垂直滚动自动调整自己高度或状态的小部件,比如目录索引链接列表等。 --- #### 四、常见问题及其解决方案 1. **清除浮动导致的布局错乱** 当多个浮动物体并列存在时可能会引发后续非浮动项目无法正确计算宽度等问题。可以通过引入额外空白 div 设置样式 clear:both 或者运用 clearfix 技巧加以规避[^4]。 2. **层叠上下文混乱** 如果发现 z-index 不生效,请确认当前操作的对象确实处于同一层级关系之中,并且已经显式声明过相应的 position 参数值。 --- ### 总结 掌握好各种定位机制的特点及适用场合对于构建复杂灵活界面至关重要。每种方法都有各自的优势局限之处,合理搭配才能达到最佳效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值