如何防止切断绝对定位元素并仍然保持盒子阴影拥抱父元素 div?
How to prevent cutting off absolute positioned elements and still keep a box-shadow embrace the parent div?
首先举个例子:
https://jsfiddle.net/85uqehz5/
该代码只是一个示例,是我实际代码的更简单版本。我发现我不能同时拥有:将 wrap-div 设置为 overflow: visible
显示的菜单不会被切断,但框阴影不会包含框;使用 overflow:auto;
框阴影有效但菜单被切断。我该如何解决这个问题?固定高度不是一个选项。
示例代码:
$('#menu').click(function() {
$('#menu-list').toggleClass('hidden');
});
#wrap {
width: 80%;
height: auto;
overflow: visible;
box-shadow: 0 0 .2rem rgba(0, 0, 0, .4);
}
#content {
width: 200px;
height: 20px;
margin: 0 auto;
}
#content2 {
float: left;
}
.hidden {
display: none;
}
#menu {
position: relative;
height: 20px;
width: 100px;
background-color: #ccc;
float: left;
}
#menu-list {
position: absolute;
top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wrap">
<div id="content">
Some Content
</div>
<div id="content2">
Some Content
</div>
<div id="menu">
Open Menu
<div id="menu-list" class="hidden">
<div> bla </div>
<div> bla </div>
<div> bla </div>
</div>
</div>
</div>
这很简单,在你的具体情况下:
1- 从 #wrap
中删除 overflow: auto;
2- 将此添加到您的 CSS
:
#wrap:after {
display: table;
content: "";
clear: both;
}
这使得 #wrap
的计算高度包括浮动元素。
如果您有多种用途,请声明一个 class 类似 clearfix
并在需要时使用它。
必须清除浮点数:https://jsfiddle.net/85uqehz5/3/
<div id="wrap" class="clearfix">
菜单被截断的原因是因为你还没有清除你的float: left
而这是通过容器中的这段代码完成的
.clearfix:after {
content: "[=10=]20";
display: block;
height: 0;
clear: both;
visibility: hidden;
}
首先举个例子: https://jsfiddle.net/85uqehz5/
该代码只是一个示例,是我实际代码的更简单版本。我发现我不能同时拥有:将 wrap-div 设置为 overflow: visible
显示的菜单不会被切断,但框阴影不会包含框;使用 overflow:auto;
框阴影有效但菜单被切断。我该如何解决这个问题?固定高度不是一个选项。
示例代码:
$('#menu').click(function() {
$('#menu-list').toggleClass('hidden');
});
#wrap {
width: 80%;
height: auto;
overflow: visible;
box-shadow: 0 0 .2rem rgba(0, 0, 0, .4);
}
#content {
width: 200px;
height: 20px;
margin: 0 auto;
}
#content2 {
float: left;
}
.hidden {
display: none;
}
#menu {
position: relative;
height: 20px;
width: 100px;
background-color: #ccc;
float: left;
}
#menu-list {
position: absolute;
top: 20px;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="wrap">
<div id="content">
Some Content
</div>
<div id="content2">
Some Content
</div>
<div id="menu">
Open Menu
<div id="menu-list" class="hidden">
<div> bla </div>
<div> bla </div>
<div> bla </div>
</div>
</div>
</div>
这很简单,在你的具体情况下:
1- 从 #wrap
overflow: auto;
2- 将此添加到您的 CSS
:
#wrap:after {
display: table;
content: "";
clear: both;
}
这使得 #wrap
的计算高度包括浮动元素。
如果您有多种用途,请声明一个 class 类似 clearfix
并在需要时使用它。
必须清除浮点数:https://jsfiddle.net/85uqehz5/3/
<div id="wrap" class="clearfix">
菜单被截断的原因是因为你还没有清除你的float: left
而这是通过容器中的这段代码完成的
.clearfix:after {
content: "[=10=]20";
display: block;
height: 0;
clear: both;
visibility: hidden;
}