首页 > 解决方案 > 如何将下拉 div 的宽度设置为与其按钮相同

问题描述

我有一个带有按钮的水平顶部导航栏,每个按钮都有一个下拉菜单,其中包含几个链接,这些链接出现在悬停时。一切都按预期工作,除了一件事:下拉菜单的宽度与其最长的链接一样宽,而不是产生它的按钮那么宽。

起初我认为这将是一个简单的修复,只需一些快速position: relative;调整或width:100%. 但是我尝试过的每一种方法都遇到了问题。这是代码(我只包含一个按钮,它们的功能都相同):

body {margin:0;font-family:Arial}

.topnav {
  overflow: hidden;
  background-color: #75AE59;
}

.topnav a {
  float: left;
  display: block;
  color: #FF0000;
  text-align: center;
  padding: 14px 16px;
  text-decoration: none;
  font-size: 17px;
}

.active {
  background-color: #4CAF50;
  color: white;
}

.topnav .icon {
  display: none;
}

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 17px;
  border: none;
  outline: none;
  color: white;
  padding: 14px 16px;
  background-color: inherit;
  font-family: inherit;
  margin: 0;
}

.dropdown-content {
  visibility: hidden;
  opacity: 0;
  margin-top: 0.5%;
  position: absolute;
  background-color: #f9f9f9;
  width: auto;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
  transition: all 0.5s ease-in;
}

.dropdown-content a {
  float: none;
  color: black;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
  text-align: left;
}

.topnav a:hover, .dropdown:hover .dropbtn {
  background-color: #577649;
  color: white;
}

.dropdown-content a:hover {
  background-color: #ddd;
  color: black;
}

.dropdown:hover .dropdown-content {
   margin-top: 0%;
   visibility: visible;
  opacity: 1;
}

@media screen and (max-width: 600px) {
  .topnav a:not(:first-child), .dropdown .dropbtn {
    display: none;
  }
  .topnav a.icon {
    float: right;
    display: block;
  }
}

@media screen and (max-width: 600px) {
  .topnav.responsive {position: relative;}
  .topnav.responsive .icon {
    position: absolute;
    right: 0;
    top: 0;
  }
  .topnav.responsive a {
    float: none;
    display: block;
    text-align: left;
  }
  .topnav.responsive .dropdown {float: none;}
  .topnav.responsive .dropdown-content {position: relative; display: none;}
  .topnav.responsive .dropdown:hover .dropdown-content {display: block;}
  .topnav.responsive .dropdown .dropbtn {
    display: block;
    width: 100%;
    text-align: left;
  }
}
<div class="topnav" id="myTopnav">
   <div class="dropdown">
    <button class="dropbtn">About us
    </button>
    <div class="dropdown-content">
      <a href="#">about 1</a>
      <a href="#">about 2</a>
      <a href="#">about 3</a>
    </div>
  </div>

   

  <a href="javascript:void(0);" style="font-size:15px;" class="icon" onclick="myFunction()">&#9776;</a>
</div>

最后的 javascript 在那里,因为我希望 topnav 在较小的屏幕上自动切换到不同的格式。这就是为什么笨重的变通办法对我不起作用的原因之一。

如果将 dropdown-content div 设置为position: relative;,则 div 实际上与按钮具有相同的宽度,但它会破坏整个 topnav。将其设置为width: 100%仅将其拉伸到整个页面的最边缘,并且继承在这里不起作用。单独设置它们的宽度也不是一个解决方案,灵活导航栏的整个想法是让它在任何屏幕尺寸和比例上看起来都很好。

我错过了一些明显的东西吗?还是我需要一个可以将 div 的大小调整为按钮大小的整个 javascript 部分?

我真的很感激任何帮助,我相信有人足够聪明,可以解决这个问题。

标签: htmlcss

解决方案


推荐阅读