列表自身崩溃?
List Collapsing on itself?
我最近一直在使用 tabindex="1" 和 :focus with divs 在我的菜单中制作下拉列表。
但是当点击这些下拉列表时,它们会使我下面的链接自行折叠,有人知道为什么吗?
示例如下https://jsfiddle.net/ugjgng5u/4/
单击列表 1 时,下面的所有链接都会收缩并折叠。
<li class=collapse tabindex="1"><a class=red> List 1 </a>
<div class="inside">Content 1....<br>
hi<br>
hi<br>
hi<br>
hi</div></li>
我以为是在 div 之后清除浮点数?但似乎没有帮助。
谢谢!
如果非要我猜的话,那是因为 li 在菜单内,您无法将其分离。解决方法是使 div 成为绝对值。
https://jsfiddle.net/ugjgng5u/7/
HTML
<div id=container>
<div id=top-bar>
<div class=top-links>
<toplinks>
<ul id=menu>
<li><a>A </a></li>
<li class=collapse tabindex="1">
<a class=red> List 1 </a>
<div class="inside">Content 1....
<br> hi
<br> hi
<br> hi
<br> hi
</div>
</li>
<li> <a> C</a></li>
<li><a>B </a></li>
</ul>
</toplinks>
</div>
</div>
</div>
CSS
#container {
background-color: #fff;
max-width: 350px;
z-index: 1;
position: relative;
}
#top-bar {
display: block;
position: relative;
height: auto;
line-height: 1.7;
font-size: 16px;
font: Arial, Helvetica, sans-serif;
}
.top-links li a:hover {
color: #808080;
}
.top-links li ul {
display: none;
}
.top-links li ul li {
display: block;
float: none;
}
.top-links ul li a:hover + .hidden,
.hidden:hover {
display: block;
}
.top-links li > a {
display: block;
font-size: 12px;
font-weight: 600;
height: 44px;
color: #999;
text-decoration: none;
}
li.collapse > a {
cursor: pointer;
display: block;
}
li.collapse:focus {
outline: none;
}
li.collapse > div.inside {
display: none;
}
li.collapse:focus div.inside {
display: block;
}
.inside {
z-index: 10;
position: absolute;
top: 40%;
left: 11%;
background: white;
width: 300px;
padding-left: 20px;
border: 1px solid black;
}
您的 JSFiddle 中出现了一些奇怪的选择。
None-少,别飘.indside
。不知道为什么它一开始就被浮动了。当你浮动和项目时,你将它从正常的文档流中取出,它不再像浮动之前那样占用 space。这意味着父元素会将其视为不存在。
如果你想做一个弹出式菜单,那么你应该在下拉菜单上使用 position: absolute;
并在它的包含元素上使用 position: relative;
。
下面是基本的弹出式菜单。
ul,
li {
margin: 0;
padding: 0;
list-style: none;
}
ul {
width: 300px;
background-color: #f1f1f1;
}
li {
position: relative;
line-height: 1.5;
}
li:hover {
background-color: #ccc;
cursor: pointer;
}
li:hover > ul {
display: block;
}
li > ul {
display: none;
position: absolute;
top: 0;
left: 100%;
background-color: #eee;
}
<ul>
<li>One</li>
<li>Two
<ul>
<li>Two A</li>
<li>Two B</li>
</ul>
</li>
<li>Three</li>
</ul>
我最近一直在使用 tabindex="1" 和 :focus with divs 在我的菜单中制作下拉列表。
但是当点击这些下拉列表时,它们会使我下面的链接自行折叠,有人知道为什么吗?
示例如下https://jsfiddle.net/ugjgng5u/4/
单击列表 1 时,下面的所有链接都会收缩并折叠。
<li class=collapse tabindex="1"><a class=red> List 1 </a>
<div class="inside">Content 1....<br>
hi<br>
hi<br>
hi<br>
hi</div></li>
我以为是在 div 之后清除浮点数?但似乎没有帮助。
谢谢!
如果非要我猜的话,那是因为 li 在菜单内,您无法将其分离。解决方法是使 div 成为绝对值。
https://jsfiddle.net/ugjgng5u/7/
HTML
<div id=container>
<div id=top-bar>
<div class=top-links>
<toplinks>
<ul id=menu>
<li><a>A </a></li>
<li class=collapse tabindex="1">
<a class=red> List 1 </a>
<div class="inside">Content 1....
<br> hi
<br> hi
<br> hi
<br> hi
</div>
</li>
<li> <a> C</a></li>
<li><a>B </a></li>
</ul>
</toplinks>
</div>
</div>
</div>
CSS
#container {
background-color: #fff;
max-width: 350px;
z-index: 1;
position: relative;
}
#top-bar {
display: block;
position: relative;
height: auto;
line-height: 1.7;
font-size: 16px;
font: Arial, Helvetica, sans-serif;
}
.top-links li a:hover {
color: #808080;
}
.top-links li ul {
display: none;
}
.top-links li ul li {
display: block;
float: none;
}
.top-links ul li a:hover + .hidden,
.hidden:hover {
display: block;
}
.top-links li > a {
display: block;
font-size: 12px;
font-weight: 600;
height: 44px;
color: #999;
text-decoration: none;
}
li.collapse > a {
cursor: pointer;
display: block;
}
li.collapse:focus {
outline: none;
}
li.collapse > div.inside {
display: none;
}
li.collapse:focus div.inside {
display: block;
}
.inside {
z-index: 10;
position: absolute;
top: 40%;
left: 11%;
background: white;
width: 300px;
padding-left: 20px;
border: 1px solid black;
}
您的 JSFiddle 中出现了一些奇怪的选择。
None-少,别飘.indside
。不知道为什么它一开始就被浮动了。当你浮动和项目时,你将它从正常的文档流中取出,它不再像浮动之前那样占用 space。这意味着父元素会将其视为不存在。
如果你想做一个弹出式菜单,那么你应该在下拉菜单上使用 position: absolute;
并在它的包含元素上使用 position: relative;
。
下面是基本的弹出式菜单。
ul,
li {
margin: 0;
padding: 0;
list-style: none;
}
ul {
width: 300px;
background-color: #f1f1f1;
}
li {
position: relative;
line-height: 1.5;
}
li:hover {
background-color: #ccc;
cursor: pointer;
}
li:hover > ul {
display: block;
}
li > ul {
display: none;
position: absolute;
top: 0;
left: 100%;
background-color: #eee;
}
<ul>
<li>One</li>
<li>Two
<ul>
<li>Two A</li>
<li>Two B</li>
</ul>
</li>
<li>Three</li>
</ul>