如何防止切断绝对定位元素并仍然保持盒子阴影拥抱父元素 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/1/

必须清除浮点数: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;
}