【发布时间】:2017-08-28 02:37:20
【问题描述】:
我正在尝试设置一个弹出菜单的样式,该菜单在悬停时显示子菜单,在悬停项目的右侧弹出。
我的主要项目使用column-count 分为两列,这就是痛苦的开始。
在 Firefox 中,一切都按预期运行:子菜单会在悬停项目所在的位置弹出。在 Chrome 中,子菜单相对于最左边的列弹出。
四个案例(悬停的项目 3 和 9,Firefox 和 Chrome)显示在附加的屏幕中。在 Firefox 和 Chrome 中尝试演示以了解我的意思。
有没有一个巧妙的解决方案?我尝试了列跨度,但这不起作用。我无法使项目的 li 相对,因为我希望弹出窗口填充整个高度。
ul.first {
border:1px solid #888;
position:relative;
display:inline-block;
margin:5px;
padding:0;
column-count:2;
-moz-column-count:2;
-webkit-column-count:2;
column-rule:1px solid #888;
-moz-column-rule:1px solid #888;
-webkit-column-rule:1px solid #888;
background-color:#eee;
}
ul.first li {
list-style:none;
display:block;
width:200px;
background-color:#eee;
margin:2px;
padding:5px;
}
ul.first li:hover {
background-color:#ddd;
}
ul.first > li.hassub > ul {
display:none;
position:absolute;
margin-left:100px;
top:0;
bottom:0;
background-color:#ddd;
padding:0 5px;
}
ul.first > li.hassub:hover > ul {
display:inline-block;
}
ul.first > li.hassub > ul > li {
background-color:#ddd;
}
ul.first > li.hassub > ul > li:hover {
background-color:#eeffee;
}
<ul class="first">
<li>Item 1</li>
<li>Item 2</li>
<li class="hassub">Item 3
<ul>
<li>Subitem 3-1</li>
<li>Subitem 3-2</li>
<li>Subitem 3-3</li>
<li>Subitem 3-4</li>
</ul>
</li>
<li>Item 4</li>
<li>Item 5</li>
<li>Item 6</li>
<li>Item 7</li>
<li>Item 8</li>
<li class="hassub">Item 9
<ul>
<li>Subitem 9-1</li>
<li>Subitem 9-2</li>
<li>Subitem 9-3</li>
<li>Subitem 9-4</li>
</ul>
</li>
<li>Item 10</li>
</ul>
【问题讨论】:
-
“我无法使项目的
li相对”。在我看来,Chrome 的做法是对的,而 FF 是错的。 -
这很奇怪,但似乎是一个 chrome 错误。问题是
<li>的相对父级在 Firefox 中似乎是相对的,但在 chrome 中是静态的。您无法定义位置:相对于 li 的元素,因为您破坏了列结构。 -
@Paulie_D 我认为恰恰相反。然而,这种奇怪的行为是一个真正的问题,因为我无法看到没有 javascript 的解决方法
-
简短更新:IE 10 及更高版本的行为类似于 Firefox。 @MarcosPérezGude 遗憾的是,我也没有看到任何纯 css 解决方案,但我在 SO 上看到了这么多天才的东西,并认为值得一试。
-
通常,chrome 错误意味着 javascript 中的解决方法。抱歉,但我不知道如何使用 CSS 来实现。等待您正在谈论的这些天才之一;)。我对此问题投赞成票并收藏,因为我对此很感兴趣。祝你好运!
标签: html css css-multicolumn-layout