首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何实现只有一个嵌套元素溢出它的父元素

如何实现只有一个嵌套元素溢出它的父元素
EN

Stack Overflow用户
提问于 2016-10-05 07:25:22
回答 2查看 157关注 0票数 4

我正在为select元素使用多选择jquery插件。外部div (包含多个选择框)具有最大高度.如果我打开多个选择框,它将被切断,我必须向下滚动以查看所有选项:

代码语言:javascript
复制
$('select').multipleSelect();
代码语言:javascript
复制
#outer {
  max-height: 110px;
  overflow: auto;
  background-color: green;
  color: white;
}
#select {
  width: 200px;
}
代码语言:javascript
复制
<link href="https://cdnjs.cloudflare.com/ajax/libs/multiple-select/1.2.0/multiple-select.css" rel="stylesheet" />

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/multiple-select/1.2.0/multiple-select.min.js"></script>
<div id="outer">
  <p>
    Below you find a multiple select box that should overflow the outer div.
  </p>
  <label for="select">Multiple select:</label>
  <select id="select">
    <option value="1">One</option>
    <option value="2">Two</option>
    <option value="3">Three</option>
    <option value="4">Four</option>
  </select>
  <p>
    Scroll to the button when the select box is open.
  </p>
  <button>
    Do nothing
  </button>
</div>

JSFiddle

如果我打开多个选择框,所有选项都应该是可见的。因此,这些选项应该溢出外部div。我怎样才能做到这一点?

如果我将div.ms-parent的位置设置为fixed,我将得到所需的行为,直到我向下滚动,因为复选框是固定的,并且不会与其他内容一起移动。

在这种情况下,使用z-index也不起作用。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-10-05 07:40:18

我用JQ做了一种老式的解决方案(因为我对乘法选择()插件不太熟悉)

见此处> 小提琴

代码:

代码语言:javascript
复制
$('select').multipleSelect();
var sTop = $('.ms-parent ').offset().top,
sHeight = $('.ms-parent ').height()
$('.ms-drop.bottom').css('top',sTop+sHeight)

CSS

代码语言:javascript
复制
.ms-drop {
  position:fixed;
  width:200px;
}

为了使.ms-drop脱离它的容器,您需要将position:fixed设置为它。然后用JQ计算出它的top位置,通过求出.ms-parentoffset().top和它的高度。这两个组合给出了您的top位置的.ms-drop

希望能帮上忙。

编辑: jsFiddle

如果您希望ms-drop保持在相同的位置,而不是在绿色div ( #outer)内滚动时向下滚动,则应该添加一个滚动函数,在该函数中计算滚动距离并从ms-droptop位置中扣除它,因此它将始终保持在该位置。

因此,您将得到以下JQ:

代码语言:javascript
复制
$('select').multipleSelect();
var sTop = $('.ms-parent ').offset().top,
    sHeight = $('.ms-parent ').height()

$('.ms-drop.bottom').css('top',sTop+sHeight)
$("#outer").on("scroll",function(){
    var oScroll = $(this).scrollTop()
    $('.ms-drop.bottom').css('top',sTop+sHeight-oScroll)

})
票数 1
EN

Stack Overflow用户

发布于 2016-10-05 07:33:52

这个插件上的container选项实现了这一点。尝试像这样启动插件:

代码语言:javascript
复制
$('select').multipleSelect({
   container: "body",
});

https://jsfiddle.net/8mdxuz1w/1/

然后,您需要限制下拉列表的宽度。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/39867803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档