一直以为overflow:hidden 是用于父元素隐藏子元素的,没想还可用于隐藏自身,为啥当列表自身高度展开后就又自动显示了呢?

一直以为overflow:hidden 是用于父元素隐藏子元素的,没想还可用于隐藏自身,为啥当列表自身高度展开后就又自动显示了呢?

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
<style>
*{
margin: 0;
padding: 0;
}
.header-layout{
height: 48px;
background-color: rgb(203, 39, 39);
display: flex;
/* justify-content: center; */
justify-content: space-between;
align-items: center;
position: relative;
padding: 0 20px;
}
.box1{
width: 20px;
height: 20px;
background-color: #fff;
}
.box2{
width: 20px;
height: 20px;
background-color: rgb(197, 255, 122);
}
.box3{
/* display: none; */
box-sizing: border-box;
overflow: hidden;
position: absolute;
background-color: rgb(231, 227, 227);
left: 0;
top:48px;
padding: 0 30px;
width: 100%;
height: 0px;
transition: height 0.3s;
}
.box3-extended{
/* display: block; */
height: 120px;
}
</style>
</head>
<body>
<header class="header-layout">
<div class="box1"></div>
<div id="box2" class="box2"></div>
<ul id="box3" class="box3">
<li>111</li>
<li>222</li>
<li>333</li>
<li>444</li>
</ul>
</header>

<script>
const box2=document.getElementById("box2");
const box3=document.getElementById("box3");
box2.addEventListener("click",function(){
box3.classList.toggle("box3-extended");
},false)

</script>
</body>
</html>


正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

1回答
好帮手慕久久 2022-12-03 16:49:13

同学你好,对overflow:hidden的理解不对。overflow:hidden本意是“超出隐藏”。给父元素设置了超出隐藏,那么子元素的显示范围一旦超出了父元素,子元素超出的部分就会被隐藏掉(下图绿色实习部分会看不见):

https://img1.sycdn.imooc.com//climg/638b0d6709ac67d410190371.jpg

当前练习,.box3初始时高度是0,此时它的所有子元素都会在box3外面显示,所以子元素都看不见了。点击的时候,.box3有了高度,子元素此时都在这个高度范围内显示,所以子元素可以看到。

祝学习愉快!

  • 提问者 小银 #1

    原来如此,感谢老师


    2022-12-03 17:31:01
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师