javascript:将绝对div与另一个div对齐
我想做一个类似组合的事情,我需要在输入上面对齐一个div 如何计算列表的正确javascript:将绝对div与另一个div对齐,javascript,jquery,html,css,Javascript,Jquery,Html,Css,我想做一个类似组合的事情,我需要在输入上面对齐一个div 如何计算列表的正确底部css属性,使其显示在输入的正上方 示例代码: HTML <div style="position:absolute;top:150px; left:150px;"> <input/><span class="btn">V</span> </div> <div class="list" style="display:none;">
底部css属性
,使其显示在输入的正上方
示例代码:
HTML
<div style="position:absolute;top:150px; left:150px;">
<input/><span class="btn">V</span>
</div>
<div class="list" style="display:none;">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
<div class="dropdown">
<input/><span class="btn">V</span>
<div class="list" style="display:none;">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>
JS
.btn {
width: 10px;
height:10px;
background-color: black;
cursor: pointer;
}
.list {
position: absolute;
border: solid 1px black;
}
$('.btn').click(function(){
var list = $('.list');
list.show();
var inputOffset = $('input').offset();
list.css({
bottom: inputOffset.top,
left: inputOffset.left
});
});
.btn {
width: 10px;
height:10px;
background-color: black;
cursor: pointer;
}
.list {
position: absolute;
border: solid 1px black;
/* To make the list on top, change to bottom: 100%;*/
top: 100%;
left: 0;
}
.dropdown {
position: relative;
/* If you want the list on top, be sure to add some space above the input */
}
$('.btn').on('click', function(){
$('.list').toggle();
});
注意:
输入将像过滤器一样工作,因此列表的高度将发生变化。
我想让浏览器保持列表对齐。这就是为什么我想在列表上设置一个适当的
底部
值。使用顶部
而不是底部
,并从输入位置减去列表
的高度:
list.css({
top: inputOffset.top - list.outerHeight(),
left: inputOffset.left
});
您可以使用CSS实现这一点
(刚刚注意到您希望将输入放在顶部……这里有一个更新的小提琴,其中有一些调整:)
HTML
<div style="position:absolute;top:150px; left:150px;">
<input/><span class="btn">V</span>
</div>
<div class="list" style="display:none;">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
<div class="dropdown">
<input/><span class="btn">V</span>
<div class="list" style="display:none;">
<ul>
<li>Item 1</li>
<li>Item 2</li>
<li>Item 3</li>
<li>Item 4</li>
</ul>
</div>
</div>
JS
.btn {
width: 10px;
height:10px;
background-color: black;
cursor: pointer;
}
.list {
position: absolute;
border: solid 1px black;
}
$('.btn').click(function(){
var list = $('.list');
list.show();
var inputOffset = $('input').offset();
list.css({
bottom: inputOffset.top,
left: inputOffset.left
});
});
.btn {
width: 10px;
height:10px;
background-color: black;
cursor: pointer;
}
.list {
position: absolute;
border: solid 1px black;
/* To make the list on top, change to bottom: 100%;*/
top: 100%;
left: 0;
}
.dropdown {
position: relative;
/* If you want the list on top, be sure to add some space above the input */
}
$('.btn').on('click', function(){
$('.list').toggle();
});
你如何纠正任何正确的事情?请阅读您自己的问题并更正。那么您正试图使列表显示在输入和按钮的正上方?这很好,但输入将像过滤器一样工作,因此列表的高度将发生变化。我想让浏览器保持列表对齐。这就是为什么我想在列表上设置一个合适的底部值。看起来不错,但我的组件不是那么简单。列表将作为主体的子级呈现,但输入和按钮可以在dom中的任何级别上。我明白了,因此这两个可能无法在dom中具有相同的祖先。我不确定您的浏览器要求是什么,但您可以查看HTML5的datalist
元素并输入list
属性。这里有一个来自Wufoo的演示。下面是多填充的列表: