overflow:hidden同样会隐藏position:absolute的子元素

<!DOCTYPE html>
<html>
<head>
	<title>父元素中有overflow:hidden, 子元素absolute不能显示</title>
	<style>
		.parent{
			height:40px;
			width:200px;
			border:solid 1px black;
			position:relative;
		}
		.sub{
			position:absolute;
			top:10px;
			left:10px;
			height:100px;
			width:100px;
			background-color:red
		}
		
		.overHidden{
			overflow:hidden;	/* 同样会隐藏position:absolute的子元素 */
		}
	</style>
</head>
<body>
这个是有overflow:hidden
	<div class="parent overHidden">
		<div class="sub"></div>
	</div>
	这个没有
	<div class="parent">
		<div class="sub"></div>
	</div>
</body>
</html>

效果如下:


这种情况通常会出现在我们在做一些具有弹出或下拉的控件时,所以还是把弹出层直接放到body中比较可靠。

### CSS 中 `overflow: hidden` 和 `position: absolute` 的组合使用及其行为 在 CSS 布局中,`overflow: hidden` 和 `position: absolute` 是两个非常重要的属性。它们的组合可以实现许多复杂的布局效果。 #### 1. `overflow: hidden` 属性的作用 当一个容器设置了 `overflow: hidden`,它会隐藏超出其边界的任何内容[^2]。这意味着如果子元素的内容超出了父级容器的范围,则这些溢出部分不会显示给用户。此属性通常用于清理浮动或者防止不必要的滚动条出现。 ```css .container { overflow: hidden; } ``` #### 2. `position: absolute` 属性的行为 绝对定位 (`position: absolute`) 将元素相对于最近的一个具有非静态位置 (non-static context, 即 relative/fixed/absolute/sticky) 的祖先来放置。如果没有这样的祖先存在,默认情况下该元素会被视为相对于文档根节点 `<html>` 进行偏移调整。 ```css .element { position: absolute; top: 10px; left: 20px; } ``` #### 3. 组合后的表现分析 当我们将两者结合起来时: - **剪裁功能**:由于 `overflow: hidden` 存在,即使某个被赋予了 `position: absolute` 的子项位于父框之外的部分也会被截断而不可见。 - **层叠上下文创建**:某些特定条件下(比如通过指定宽度高度),这种配置还可能触发一个新的块格式化上下文(Block Formatting Context),从而影响其他方面的渲染逻辑。 下面是一个简单的例子展示这一现象: ```html <div class="parent"> <div class="child"></div> </div> <style> .parent { width: 200px; height: 200px; background-color: lightblue; position: relative; /* 创建新的定位环境 */ overflow: hidden; /* 隐藏超出边界的内容 */ } .child { width: 100px; height: 100px; background-color: tomato; position: absolute; top: -50px; /* 移动到顶部外部区域 */ left: 50px; } </style> ``` 在这个案例里,“child” div 虽然因为它的负值 'top' 属性移动到了 “parent” div 外部的位置上,但由于后者定义了 ‘overflow:hidden’ ,所以实际上这部分超出界限外的内容将无法看到。 #### 实际应用场景举例说明 考虑如下情况下的实际运用场景——制作响应式图片画廊或幻灯片切换特效等情形下经常需要用到此类技术手段[^4]: ```css .mr_frbox { position: relative; } .mr_frBtnL, .mr_frBtnR { cursor: pointer; position: absolute; z-index: 6; display: none; } .mr_frBtnR { right: 80px; } .mr_frUl { width: 100%; margin: 0 auto; overflow: hidden; } .mr_frUl ul li { float: left; list-style-type: none; margin: 0 10px; width: calc(25%); box-sizing: border-box; } ``` 这里利用了 `.mr_frUl { overflow: hidden; }` 来控制列表项目之间的水平排列关系,并且借助于按钮控件(.mr_frBtnL/.mr_frBtnR卡槽设定成绝对定位形式以便灵活操作滑动方向指示图标摆放位置[^1]. ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值