【问题标题】:Dropdown menu appears on right instead of underneath anchor下拉菜单出现在右侧而不是锚点下方
【发布时间】:2015-05-08 15:20:24
【问题描述】:

如果我向左浮动一个想要作为下拉菜单切换的元素,下拉菜单会出现在左侧。我正在努力让它跌到谷底。

这通常不会在常规引导程序中发生,所以我有点迷茫。有人有什么建议吗?

Here is a Plunker example

<div id="top-header" class="slide" ng-controller="DropdownCtrl">
    <div id="cornerBox"></div>
    <span class="dropdown" dropdown on-toggle="toggled(open)">
        <a id="logo" class="clearfix dropdown-toggle" dropdown-toggle><span>{{ "header" }}</span></a>

        <ul class="dropdown-menu">
            <li ng-repeat="choice in items">
                <a href>{{choice}}</a>
            </li>
        </ul>
    </span>

    <div id="searchBar">
        <div>&nbsp;</div>
    </div>

</div>

CSS

#cornerBox { float:left;width:50px;height:50px;background-color:#3CC274; }

#top-header {
    position:absolute;
    height: 56px;
    width:100%;
    max-height: 50px;
    background-color:#24BD66;
    color:#fff;
    z-index:3;
    box-shadow: 0 0 4px rgba(0,0,0,.14),0 4px 8px rgba(0,0,0,.23);
}

#logo
{
    font-weight:400;
    color:#000;
    display:block;
    position:relative;
    text-decoration:none;
    float:left;
    width:100px;
    margin:3px 0 0 15px;
    height:30px;
    font-size:30px;
    cursor:pointer;
}

#searchBar { position:relative;width:68%;margin:0 auto;left:100px;border-radius:3px;height:35px;margin-top:7px;background-color:#5ECD8C;}
#searchBar div { float:left;width:50px;height:35px;text-align:center;line-height:35px;font-size:15px; }

【问题讨论】:

    标签: javascript angularjs angular-ui-bootstrap


    【解决方案1】:

    我无法解释原因,但浮动是问题所在。改为设置锚点inline-block

    Demo

    (我个人的政策是在每种情况下都在浮点数之前尝试 inline-block ——浮点数往往会导致比它们解决的问题更多的问题。)

    【讨论】:

    • Plunkr 链接已修复。我对 Plunkr 不熟悉(通常使用 JSFiddle),没有正确保存。
    • 相同。感谢更新!似乎工作得很好......我真的很抱歉,但你能检查我在问题中更新的plunk,也许给我你的2美分吗?我忘了在#top-header 中添加一个重要部分。如果我有另一个 div 试图转到我的“标题”文本的右侧,inline-block 似乎不能很好地工作。我认为这无关紧要,所以我把它省略了:\
    • 似乎如果您将搜索栏浮动到右侧,一切都很好。 plnkr.co/edit/wAwKxhB5RC1IK6OaEpNO?p=preview
    • 不一定想让我的搜索栏向右浮动。有点想把它放在我的头球之后的左边,我认为这是问题所在。根据页面的不同,我会在该栏上浮动其他内容。
    • 好的,但现在我们跑题了。我不完全确定你在追求什么,因为你似乎试图以margin: 0 auto 居中搜索栏。看看这个。 plnkr.co/edit/M6A5YWqeJSUxG2s35WIG?p=preview
    【解决方案2】:

    我修改了 Plunk here,它似乎是你想要的。

            <div class="dropdown clearfix" dropdown on-toggle="toggled(open)">
                // Other Code
            </div>
    

    关键变化:

    1. 使用 div 代替 span。 Span 是 inline-block 元素(出现在同一行), div 是块元素(出现在新行)
    2. 添加 clearfix 类。使用 float 时,它可以防止所有对象与它发生碰撞(因此破坏了我们让 div 换行的计划)。 clearfix 类纠正浮动元素。

    【讨论】:

    • 使用这种方法,下拉菜单似乎相对于页面定位,而不是锚点。
    • @isherwood 实际上,下拉菜单类似乎应用了绝对定位。但这很容易解决。我想专注于为什么它显示在同一行
    • 这太棒了!感谢 Vlad 为 span vs div 发言。这完全有道理。 @isherwood 是对的,但由于下面的内容我没有在 plunk 中,我想让它定位到锚点。您是否介意为您所说的简单解决方案投入 2 美分?
    • v2. plnkr.co/edit/u0hxlcsctss5GaHmU4ko?p=preview 主要变化:删除浮动和相对位置(我发现浮动应该是最后的手段)。正因为如此,我们又回到了元素的跨度。为角框添加 display=inline-block (我想去 Span,但它会显示出来。我认为这与 div/span 如何填充“空”空间有关)。为下拉列表添加 position=absolute。下拉类应用“position=relative”,这是一个问题
    • 伟大的工作弗拉德,这太棒了。不幸的是,我在我的#top-header 中忘记了一个关键元素,我在我的原始问题中进行了更新。但这似乎造成了比我预期的更多的困难。如果你有时间,please let me know what you think(更新plunk并添加)。
    猜你喜欢
    • 2020-03-11
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 2021-10-09
    • 1970-01-01
    • 1970-01-01
    • 2022-01-22
    • 1970-01-01
    相关资源
    最近更新 更多