标签导致溢出内容向上移动

Joe*_*eyP 3 html css

我有一个定义高度的div和溢出设置为隐藏.如果溢出内容中有锚点,div的可见内容将向上移动,这意味着我想要显示的内容将被推离div的顶部,锚点将移动到div的可见部分的中心.没有滚动条显示(一件好事)所以内容有点卡在那里.

HTML

<div class="container">
    <div class="show-content">Click in the box and hit tab</div>
    <div class="overflow-content">
        <a href="javascript:void(0);">Pesky Link</a>
        <a href="javascript:void(0);">Pesky Link 2</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

CSS

.container{
    height: 100px;
    overflow: hidden;
    border: 1px solid black;
}
.show-content{
    line-height: 100px;
    height: 100px;
    font-size: 16px;
}
.overflow-content a{
    display: block;
    margin-top: 40px;
    line-height: 20px;
    font-size: 16px;
}
Run Code Online (Sandbox Code Playgroud)

这是小提琴.点击框内部并点击标签查看我的意思 http://jsfiddle.net/2seLJ/1/

我的用例就是我有一个下拉菜单,其中包含我只想在用户点击"显示下拉列表"时显示的链接.可见内容有一个输入框,因此如果用户从输入框中选择标签,则会显示链接,并且无法返回到输入框,而不是整个页面的标签.这只能通过在所有链接中添加tabindex =" - 1"来解决吗?

Ale*_*ara 6

替代方案

发生这种情况时,已overflow: hidden应用的父元素将滚动以将焦点元素置于视图中,并且scrollTop和/或scrollLeft属性将变为正整数,尽管事实上没有滚动条.

解决此问题的一种方法是,不涉及额外的标记或DOM操作,将有一个事件监听器将overflow: hidden父级的滚动位置重置为0.

jQuery示例:

$(document).on('focus', '.some-overflow-hidden-element > *', function() {
    $(this).closest('.some-overflow-hidden-element').scrollTop(0).scrollLeft(0);
});
Run Code Online (Sandbox Code Playgroud)

注意:如果您要这样做,请确保您没有在此过程中破坏您的可访问性.这通常不是最好的选择,因为隐藏元素仍然可以通过tab这样的事情来集中.


htx*_*yan 5

听起来你想要阻止该锚点上的tabstop行为.请参阅:在HTML中阻止A元素(锚链接)上的tabstop

<div class="container">
    <div class="show-content">Click in the box and hit tab</div>
    <div class="overflow-content">
        <a href="javascript:void(0);" tabindex="-1">Pesky Link</a>
        <a href="javascript:void(0);" tabindex="-1">Pesky Link 2</a>
    </div>
</div>
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/2seLJ/2/

另外

您可以使用jQuery以编程方式为"overflow-content"div中的所有链接执行此操作:

$(document).ready(function(){
    $('div.overflow-content a').attr('tabindex', '-1');
});
Run Code Online (Sandbox Code Playgroud)

小提琴:http://jsfiddle.net/2seLJ/3/