html - 子菜单项不断移动...如何使它们固定?

标签 html css

好的,我们再来一次......

当我将鼠标悬停在它们上方时,子菜单中的元素会不断移动。我似乎无法在这个问题上找到任何东西。我之前为我的导航栏问过这个问题,但我收到的答案 - (对 a 标签使用相同的填充并在它们周围放置边框 - 但让它透明)不适用于子菜单。我也尝试过填充,但没有运气。

另一件事...(对于所有问题我深表歉意,我只是讨厌在这里提问......有些人可能居高临下)我已经为导航栏的每个元素(或列表项)分配了一个类,因为当我试图在它们周围放置边框,每个子菜单元素也继承了边框。这是一种“更清洁”的方法吗?我尝试了 :not() 标签,但我似乎也无法让它工作。

最后,作为最后的选择,我会在此站点上提问。我是一名新手程序员/网页设计师,正在寻求网络,并希望在我被禁止提出其他人认为无用的问题之前与更有经验的人联系。如果最后一个请求违反服务条款,请告诉我 - 我会删除它。

HTML

/* Style The Dropdown Button */
.dropbtn {
background-color: transparent;
font-family: 'Homemade Apple',cursive;
color: pink;
padding: 4px;
font-size: 16px;
cursor: pointer;
border: 3px solid pink;
border-radius: 16px;}




.dropdown {
position: relative;
display: inline-block;
}


.dropdown-content {
display: none;
position: absolute;
background-color: #DDDDEE;
border: 3px solid pink;
border-top: hidden !important;
border-radius: 16px;
min-width: 160px;
box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
z-index: 2;
}

/* Links inside the dropdown */
.dropdown-content a {
color: #B76E79;
padding: 12px 16px;
text-decoration: none;
display: block;
}


.dropdown-content a:hover {color: #B76E79}

/* Show the dropdown menu on hover */
.dropdown:hover .dropdown-content {
display: block;
}

/* Change the background color of the dropdown button when the dropdown 
content is shown */
.dropdown:hover .dropbtn {
color: #B76E79;
background-color: #DDDDEE;
}
</style>

</head>
<body>
<h1>Debi's Babies</h1>
<h2>A Mother's collection of Snow Babies</h2>
 <ul class = "nav">
 <li class= "one"><a href = "main_page.html">Home</a></li>
 <li class= "two"><a href = "orig_fig.html">Original Figurines</a></li>
 <li class= "three"><a href ="villages.html">Villages</a></li>
 <div class = "dropdown">
 <a href= "guest_collect.html"<button class="dropbtn">The Guest 
Collection</button></a>
<div class = "dropdown-content">
    <li class="c"><a href ="seuss.html">Dr. Seuss</a></li>
    <li class="d"><a href ="Rudolph.html">Rudolph and Friends</a></li>
    <li class="e"><a href ="santa.html">Santa</a></li>
    <li class="f"><a href ="oz.html">Wizard of Oz</a></li>
</div>
</div>
</li>
<li class= "four"><a href ="orna.html">Oranments</a></li>
<li class= "five"><a href ="sno_bunn.html">Snow Bunnies</a></li>
</ul>
</body>
</html>

CSS

/*navbar*/

.nav {
list-style-type: none;
margin: 0;
padding: 0;
text-align: center;
display: block;
position: relative;}

.nav li{
display: inline-block;
}


.nav a {
display: inline-block;
color: pink;
font-family: 'Homemade Apple', cursive;
padding: 6px;}


.nav li a:hover {
color: #B76E79; 
padding: 8px;
z-index: 1;
}  

.one,.two,.three,.four,.five {
border: 3px solid pink;
border-radius: 16px;}

.one:hover,.two:hover,.three:hover,.four:hover,.five:hover {
background: #DDDDEE;
}

最佳答案

据我所知,您所说的“定位”变化来自额外的 padding悬停。这是特别来自声明:

.nav li a:hover {
    padding: 8px;
}

删除它可以解决问题。但是,除此之外,您的 <a>标签缺少 > , 你有一个 </li>太多了。

在以下示例中也更正了这两个问题:

/* Style The Dropdown Button */

.dropbtn {
  background-color: transparent;
  font-family: 'Homemade Apple', cursive;
  color: pink;
  padding: 4px;
  font-size: 16px;
  cursor: pointer;
  border: 3px solid pink;
  border-radius: 16px;
}

.dropdown {
  position: relative;
  display: inline-block;
}

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #DDDDEE;
  border: 3px solid pink;
  border-top: hidden !important;
  border-radius: 16px;
  min-width: 160px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 2;
}


/* Links inside the dropdown */

.dropdown-content a {
  color: #B76E79;
  padding: 12px 16px;
  text-decoration: none;
  display: block;
}

.dropdown-content a:hover {
  color: #B76E79
}


/* Show the dropdown menu on hover */

.dropdown:hover .dropdown-content {
  display: block;
}


/* Change the background color of the dropdown button when the dropdown 
content is shown */

.dropdown:hover .dropbtn {
  color: #B76E79;
  background-color: #DDDDEE;
}


/*navbar*/

.nav {
  list-style-type: none;
  margin: 0;
  padding: 0;
  text-align: center;
  display: block;
  position: relative;
}

.nav li {
  display: inline-block;
}

.nav a {
  display: inline-block;
  color: pink;
  font-family: 'Homemade Apple', cursive;
  padding: 6px;
}

.nav li a:hover {
  color: #B76E79;
  /*padding: 8px;*/
  z-index: 1;
}

.one,
.two,
.three,
.four,
.five {
  border: 3px solid pink;
  border-radius: 16px;
}

.one:hover,
.two:hover,
.three:hover,
.four:hover,
.five:hover {
  background: #DDDDEE;
}
<h1>Debi's Babies</h1>
<h2>A Mother's collection of Snow Babies</h2>
<ul class="nav">
  <li class="one"><a href="main_page.html">Home</a></li>
  <li class="two"><a href="orig_fig.html">Original Figurines</a></li>
  <li class="three"><a href="villages.html">Villages</a></li>
  <div class="dropdown">
    <a href="guest_collect.html"><button class="dropbtn">The Guest 
Collection</button></a>
    <div class="dropdown-content">
      <li class="c"><a href="seuss.html">Dr. Seuss</a></li>
      <li class="d"><a href="Rudolph.html">Rudolph and Friends</a></li>
      <li class="e"><a href="santa.html">Santa</a></li>
      <li class="f"><a href="oz.html">Wizard of Oz</a></li>
    </div>
  </div>
  <li class="four"><a href="orna.html">Oranments</a></li>
  <li class="five"><a href="sno_bunn.html">Snow Bunnies</a></li>
</ul>

关于您的第二个问题,您不必为每个列表项元素分配一个类。您可以定位 li直接地。完全取决于哪个 <li>您尝试定位的元素,您可以增加 specificity .

你的问题是.nav li不会工作,因为这将针对任何 <li> .nav 的子元素.为了仅针对直接 child (不包括孙子),您需要使用 child combinator ( > ) ,与 .nav > li .

最后,恐怕 StackOverflow 是一个问答网站,而不是与其他开发人员联系的地方。如果您想联系其他程序员,没有比 StackOverflow Chat 更好的地方了。 .

希望对您有所帮助! :)

关于html - 子菜单项不断移动...如何使它们固定?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46657592/

相关文章:

javascript - 当动画 div 跨越坐标时随机重新放置一个 div 元素

html - 特定元素在 IE 和 Chrome 中正确定位,但在 Firefox 中不正确......我不明白为什么?

css - Openlayers 3 在 flexbox 列布局中调整大小?

CSS 元素宽度逐步增加

javascript - jquery中DatePicker第二次未加载

javascript - 灯箱问题和垂直对齐

javascript - 如何将内容传递到客户端 html 页面中的元素?

html - html 表格中不需要的垂直填充

css - 网页游戏的定位和边距

javascript - 如何在圆形进度条的路径中放置动画?