【问题标题】:Relatively position menu-item in a dropdown/collapsible menu?在下拉/可折叠菜单中相对定位菜单项?
【发布时间】:2012-12-22 04:38:51
【问题描述】:

首先,here's the dropdown/collapsible menu 我已经构建好了。

至于小提琴中显示的the preview中的“menu”和“menu-item”是什么——ChannelsSearchAbout我们是菜单,而当你点击菜单时下拉/滑出的那些是菜单项。

屏幕截图:

我在菜单项上使用position: absolute; (.collapse),在菜单上使用position: relative;

相关代码 (more in the fiddle):

/* Menu: <li class="float-left top-menu">... */
.top-menu {
    position: relative;
}

/* Menu-Item: <div id="channels-menu-item-container" class="collapse">... */
.collapse {
    position: absolute;
    width: 570px;
    z-index: 1000;
    padding: 0;
    margin: 0;
    color: #222;
    background-color: #fff;
    -webkit-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2), 0 10px 20px rgba(0, 0, 0, 0.12);
    -moz-box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2), 0 10px 20px rgba(0, 0, 0, 0.12);
    box-shadow: 0 5px 5px rgba(0, 0, 0, 0.2), 0 10px 20px rgba(0, 0, 0, 0.12);
    overflow: hidden;
}

是否也可以在“菜单项”(.collapse) 上使用position: relative; 来实现相同的功能?


注意:在您使用小提琴提交答案之前,请确保通过单击每个菜单并比较两个小提琴(您的和我的)中的菜单功能相同 (以确认没有菜单项因位置变化而错位)。

当然,您可以添加额外的 HTML 和 CSS。


是的,我尝试了几个小时都徒劳无功,想看看是否有可能。

【问题讨论】:

  • 如果我可以问 - absolute 有什么问题?在relative 中定位absolute 效果很好(例如,right: 0; 在右对齐菜单中非常适合您)- 什么不适合您?此外,我在其他框下方看到“版本”框,而不是在右侧(在 Firefox 17 上)
  • @Kobi 是的,没错。您看到的是因为我在菜单项 (.collapse) 上指定了宽度,但我不想要它。如果我删除宽度,菜单项不再是水平的,即垂直折叠。但是,如果我可以让菜单与relative 一起使用,我可以在菜单项中的列中使用inline-block 而不是float。明白了吗?
  • 我想是的。那么,真正的问题是如何获得自动宽度?
  • @Kobi 本质上是的。这是正确的。但我认为唯一的选择是使用position: relative; 并使用inline-block 作为菜单项内的列。

标签: html css


【解决方案1】:

这样的事情怎么样:

  • 删除.collapse的宽度。
  • 从列中删除浮动,更改为inline-block
  • white-space 更改为nowrap

HTML:

<div class="in collapse" id="channels-menu-item-container" style="height: auto;">
    <div id="channels-menu-item-wrapper">
        <ul class="channel-column" id="nav-channels">
           <!-- ... -->
        </ul>
        <ul class="channel-column" id="nav-topics">
           <!-- ... -->
        </ul>
        <ul class="channel-column" id="nav-editions">
           <!-- ... -->
        </ul>
        <div class="aahans"></div>
        <div class="clearfix"></div>
    </div>
</div>

CSS:

.collapse {
    position: absolute;
    min-width:200px; /*for the seach box*/
    /* ... */
}

#channels-menu-item-wrapper {
    border-bottom: 4px solid #259;
    white-space:nowrap;
}

.channel-column {display:inline-block; vertical-align:top;}

您可能还想重置每个.channel-column 中的white-space 值。

结果:http://jsfiddle.net/kobi/fxSYT/1/embedded/result/

【讨论】:

  • 我很快在我的开发网站上复制了这个,它似乎工作得很好,因此将其标记为答案。由于这里已经过了凌晨 2 点,无法好好看看。 编辑:您建议将white-space 更改为no-break,但您的答案中的CSS 使用nowrap。那是一个错误吗?另外,您所说的“您可能还想重置每个 .channel-column 中的 white-space 值”是什么意思。您的意思是,在.channel-column 上使用white-space: normal; 是个好主意吗? (PS:非常感谢!)
  • @its_me - 是的,这就是我的意思,以防万一(例如,列中可能有文本块)。乐意效劳! (另外,请记得清楚state the problem。晚安!
  • 已编辑。我想我编造了no-break。谢谢:)
  • 你好。在不同浏览器上测试菜单的外观(因为它的设计已经完成),我注意到菜单实际上在 Firefox 中被切掉了,像这样:i.stack.imgur.com/D0LD6.png -- 你也看到了吗?关于为什么会发生这种情况的任何想法? (对不起,我没有早点检查。)
  • (...继续) 在您的回答中,您要求我在 .channel-column 上使用 white-space: normal; 来重置属性。我刚刚意识到这是我上面提到的问题。 #2 另一件事是,Chrome 中的“搜索”菜单已损坏(请尝试多次单击它——至少三次,以亲自查看)。有任何想法吗?任何帮助都会很棒。谢谢!
猜你喜欢
  • 1970-01-01
  • 2012-12-16
  • 2016-08-07
  • 2019-07-22
  • 2023-03-10
  • 1970-01-01
  • 1970-01-01
  • 2016-02-14
  • 1970-01-01
相关资源
最近更新 更多