为什么我的按钮下拉菜单没有我直接悬停在它上面就被激活了?

Why is my button dropdown activated without me directly hovering on it?

我基本上创建了一个网格,并在其中一个网格元素内放置了一个按钮,每当我将鼠标悬停在网格中时该按钮就会激活。我对网格布局和一般的 Web 开发还很陌生,我不完全理解它们是如何工作的。

我考虑过的一个想法是将网格分成更小的部分,但我正在努力加载这些部分,因为 grid-template-areas 的某些组合不起作用。在解决这个问题之前,我是否应该下定决心使用 flexbox 来解决这个问题?

另外,网格的意义不在于一个盒子里有多个元素吗?这似乎是很自然的做法。

相关代码如下:

.item1 {
  grid-area: header;
}

.item2 {
  grid-area: menu;
}

.item3 {
  grid-area: main;
}

.item4 {
  grid-area: right;
}

.item5 {
  grid-area: footer;
}

.item6 {
  grid-area: footer2;
}

.item7 {
  grid-area: footer3;
}

.grid-container {
  display: grid;
  grid-template-areas: 'header header header header header header' 'menu main main main right right' 'menu footer footer footer footer footer' 'menu footer2 footer2 footer2 footer2 footer2' 'menu footer3 footer3 footer3 footer3 footer3';
  grid-gap: 20px;
  background-color: #2196F3;
  padding: 20px;
  padding-bottom: 250px;
  margin-bottom: 120px;
}

.grid-container>div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}


/* Style The Dropdown Button */

.dropbtn {
  margin-right: 1700px;
  display: block;
  background-color: rgb(20, 149, 255);
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}


/* Dropdown button */

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


/* Dropdown Content (Hidden by Default) */

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 80px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}


/* Links inside the dropdown */

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


/* Change color of dropdown links on hover */

.dropdown-content a:hover {
  background-color: #f1f1f1
}


/* 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 {
  background-color: rgb(20, 149, 255);
}


/* Dropdown button ends here */
<div class="header">
  <h1 class="titleText">Shopping Project</h1>
  <div class="topnav">
    <form class="example" action="/action_page.php">
      <input type="text" placeholder="Search.." name="search">
      <button type="submit"><i class="fa fa-search"></i></button>
    </form>
  </div>
</div>
<br>
<br>
<div class="grid-container">
  <div class="item1">
    <div class="dropdown">
      <button class="dropbtn">Dropdown</button>
      <div class="dropdown-content">
        <a href="#">Link 1</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
    </div>
  </div>
  <div class="item2">Menu</div>
  <div class="item3">Main</div>
  <div class="item4">Right</div>
  <div class="item5">Footer</div>
  <div class="item6">Footer</div>
  <div class="item7">Footer</div>
</div>

让我告诉你错误。如果您检查开发工具中的元素,您可以看到您的 .dropdown 几乎占据了它的 div 全宽

因此悬停功能正常运行。所以我在这里所做的只是为 .dropdown 添加宽度并将其浮动到左侧。

.item1 {grid-area: header;}
.item2 {grid-area: menu;}
.item3 {grid-area: main;}
.item4 {grid-area: right;}
.item5 {grid-area: footer;}
.item6 {grid-area: footer2;}
.item7 {grid-area: footer3;}

.grid-container{
  display: grid;
  grid-template-areas:
    'header header header header header header'
    'menu main main main right right'
    'menu footer footer footer footer footer'
    'menu footer2 footer2 footer2 footer2 footer2'
    'menu footer3 footer3 footer3 footer3 footer3';
  grid-gap: 20px;
  background-color: #2196F3;
  padding: 20px;
  padding-bottom: 250px;
  margin-bottom: 120px;
}

.grid-container > div{
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}

/* Style The Dropdown Button */
.dropbtn {
  margin-right: 1700px;
  display:block;
  background-color: rgb(20, 149, 255);
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}

/* Dropdown button */
.dropdown {
  position: relative;
  display: inline-block;
//Adding these two css properties to fix the issue
  float:left;
  width:150px; 
}

/* Dropdown Content (Hidden by Default) */
.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 80px;
  box-shadow: 0px 8px 16px 0px rgba(0,0,0,0.2);
  z-index: 1;
}

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

/* Change color of dropdown links on hover */
.dropdown-content a:hover {background-color: #f1f1f1}

/* 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 {
  background-color: rgb(20, 149, 255);
}

/* Dropdown button ends here */
<div class="header">
          <h1 class="titleText">Shopping Project</h1>
          <div class="topnav">
              <form class="example" action="/action_page.php">
                <input type="text" placeholder="Search.." name="search">
                <button type="submit"><i class="fa fa-search"></i></button>
              </form>
          </div> 
        </div> 
        <br>
        <br>
        <div class="grid-container">
          <div class="item1">
            <div class="dropdown">
              <button class="dropbtn">Dropdown</button>
              <div class="dropdown-content">
                <a href="#">Link 1</a>
                <a href="#">Link 2</a>
                <a href="#">Link 3</a>
              </div>
            </div> 
          </div>
          <div class="item2">Menu</div>
          <div class="item3">Main</div>  
          <div class="item4">Right</div>
          <div class="item5">Footer</div>
          <div class="item6">Footer</div>
          <div class="item7">Footer</div>
        </div>

检查 .dropdown 和 .dropbtn 样式。

.item1 {
  grid-area: header;
}

.item2 {
  grid-area: menu;
}

.item3 {
  grid-area: main;
}

.item4 {
  grid-area: right;
}

.item5 {
  grid-area: footer;
}

.item6 {
  grid-area: footer2;
}

.item7 {
  grid-area: footer3;
}

.grid-container {
  display: grid;
  grid-template-areas: 'header header header header header header' 'menu main main main right right' 'menu footer footer footer footer footer' 'menu footer2 footer2 footer2 footer2 footer2' 'menu footer3 footer3 footer3 footer3 footer3';
  grid-gap: 20px;
  background-color: #2196F3;
  padding: 20px;
  padding-bottom: 250px;
  margin-bottom: 120px;
}

.grid-container>div {
  background-color: rgba(255, 255, 255, 0.8);
  text-align: center;
  padding: 20px 0;
  font-size: 30px;
}


/* Style The Dropdown Button */

.dropbtn {
  display: block;
  background-color: rgb(20, 149, 255);
  color: white;
  padding: 16px;
  font-size: 16px;
  border: none;
  cursor: pointer;
}


/* Dropdown button */

.dropdown {
  position: relative;
  float: left;
  margin-left: 20px;
}


/* Dropdown Content (Hidden by Default) */

.dropdown-content {
  display: none;
  position: absolute;
  background-color: #f9f9f9;
  min-width: 80px;
  box-shadow: 0px 8px 16px 0px rgba(0, 0, 0, 0.2);
  z-index: 1;
}


/* Links inside the dropdown */

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


/* Change color of dropdown links on hover */

.dropdown-content a:hover {
  background-color: #f1f1f1
}


/* 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 {
  background-color: rgb(20, 149, 255);
}


/* Dropdown button ends here */
<div class="header">
  <h1 class="titleText">Shopping Project</h1>
  <div class="topnav">
    <form class="example" action="/action_page.php">
      <input type="text" placeholder="Search.." name="search">
      <button type="submit"><i class="fa fa-search"></i></button>
    </form>
  </div>
</div>
<br>
<br>
<div class="grid-container">
  <div class="item1">
    <div class="dropdown">
      <button class="dropbtn">Dropdown</button>
      <div class="dropdown-content">
        <a href="#">Link 1</a>
        <a href="#">Link 2</a>
        <a href="#">Link 3</a>
      </div>
    </div>
  </div>
  <div class="item2">Menu</div>
  <div class="item3">Main</div>
  <div class="item4">Right</div>
  <div class="item5">Footer</div>
  <div class="item6">Footer</div>
  <div class="item7">Footer</div>
</div>

您需要在按钮上添加悬停而不是下拉

删除了这个

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

添加这个

button.dropbtn:hover + .dropdown-content {
   display: block;
}