下拉菜单没有显示 CSS 中的所有内容

Posted

技术标签:

【中文标题】下拉菜单没有显示 CSS 中的所有内容【英文标题】:Dropdown isn't showing everything in CSS 【发布时间】:2021-09-25 13:04:23 【问题描述】:

所以我正在尝试使用我的 Django 应用程序中的下拉菜单制作一个基本的导航菜单。我的菜单很好,但下拉菜单不想显示所有链接。

如何解决这个问题?

html

    <nav role="navigation">
      <ul>
        <li><a href="">Chat Home</a></li>
        <li><a href="" aria-haspopup="true">Go To <i class="fa fa-caret-down"></i></a>
          <ul class="dropdown" aria-label="submenu">
            <li><a href="" target="_blank">Calendar</a></li>
            <li><a href=" " target="_blank">Big Blue</a></li>
          </ul>
        </li>
        <li><a href="" style="float: right">Logout</a></li>
      </ul>
    </nav>

CSS

ul 
  list-style-type: none;
  margin: 0;
  padding: 0;
  background-color: #333;
  position: sticky;
  position: -webkit-sticky;
  width: 100%;
  height: 1.5rem;


li 
  float: left;
  font-size: 1rem;
  padding: 0.25rem 1rem;
  letter-spacing: 1.5px;
  cursor: pointer;
  display: block;
  position: relative;


li a 
  color: white;
  text-decoration: none;
  text-align: center;


ul li ul li 
  display: block;
  padding: 0.25rem 1rem;


li:hover,
li:focus-within 
  background-color: black;


li:focus-within a 
  outline: none;


ul li ul 
  display: none;
  background-color: #333;
  position: absolute;
  visibility: hidden;
  left: 0;
  margin-top: 2px;

ul li:hover > ul,
ul li:focus-within > ul,
ul li ul:hover,
ul li ul:focus 
  display: block;
  visibility: visible;

你可以在这里看到我的意思:https://jsfiddle.net/rj269hsf/

但本质上,当我将鼠标悬停在“转到”项目上时,它会将第一个列出的项目放在它下面。查看第二个的唯一方法是向下移动并悬停在它应该在的位置,然后它就会显示出来。

【问题讨论】:

【参考方案1】:

您可以通过将下拉列表&lt;ul&gt; 包装在&lt;div&gt; 中来解决此问题。我还为带有下拉菜单的导航项指定了 .dropdown-btn 类,以使 CSS 更易于理解。

您使用的ul li:hover &gt; ul 选择器也不正确 - 我将其替换为.dropdown-btn:hover ul,它选择ul,它是.dropdown-btn 的子对象,但仅当它悬停时。

最后,您不需要同时使用 visibilitydisplay 来隐藏下拉菜单,只需 display: none 即可。

ul 
  list-style-type: none;
  margin: 0;
  padding: 0;
  background-color: #333;
  position: sticky;
  position: -webkit-sticky;
  width: 100%;
  height: 1.5rem;


li 
  float: left;
  font-size: 1rem;
  padding: 0.25rem 1rem;
  letter-spacing: 1.5px;
  cursor: pointer;
  display: block;
  position: relative;


li a 
  color: white;
  text-decoration: none;
  text-align: center;


/*ul li ul li 
  display: block;
  padding: 0.25rem 1rem;
*/

li:hover,
li:focus-within 
  background-color: black;


/*li:focus-within a 
  outline: none;
*/

.dropdown 
  display: none;
  background-color: #333;
  position: absolute;
  left: 0;
  margin-top: 2px;

/*ul li:hover > ul,
ul li:focus-within > ul,
ul li ul:hover,
ul li ul:focus 
  display: block;
  visibility: visible;
*/

.dropdown-btn:hover .dropdown 
  display: block;
<nav role="navigation">
   <ul>
      <li><a href="">Chat Home</a></li>
      <li class="dropdown-btn">
         <a href="" aria-haspopup="true">Go To <i class="fa fa-caret-down"></i></a>
         <div class="dropdown">
            <ul aria-label="submenu">
               <li><a href="" target="_blank">Calendar</a></li>
               <li><a href=" " target="_blank">Big Blue</a></li>
            </ul>
         </div>
      </li>
      <li><a href="" style="float: right">Logout</a></li>
   </ul>
</nav>

【讨论】:

我最初尝试过 &lt;div&gt; 路线,但它更加混乱。但是你的更正成功了。谢谢!【参考方案2】:

您只需将两个属性 widthheight 添加到类 .dropdown 即在您的 CSS ul li ul 中。 JSFiddle

ul li ul 
  /* already mentioned styles */
  width: fit-content;
  width: -moz-fit-content; /* Firefox support */
  height: fit-content;
  height: -moz-fit-content;

【讨论】:

以上是关于下拉菜单没有显示 CSS 中的所有内容的主要内容,如果未能解决你的问题,请参考以下文章

只用CSS能否制作可以收缩的下拉菜单

根据下拉菜单中的选择更改 div 的内容

网页中的下拉菜单按了没反应,怎么解决??

CSS下拉菜单打开:悬停

用js或者jq实现,根据下拉菜单的字段来显示对应的内容?

在“方法/事件/枚举下拉菜单”中禁用分类