将鼠标悬停在未占用 header 的全部高度的列表项上

hover over a list item not taking the full height of the header

大家好我正在使用 CSS grid 和 flexbox 一起创建一个 header。但是我在社交 class 上遇到了一个问题,将鼠标悬停在三个社交图标(Facebook、Twitter、Instagram)上时,我希望背景颜色为蓝色并占据 header.目前我猜它只占用了 flexbox 的高度。我该如何解决这个问题,背后的原因是什么?谁能帮我解决这个问题?

我想要悬停效果是这样的 但我得到这个:

这是我的 HTML:

<header class="head-container">
        <div class="head-info">
            <div class="contact">
                <ul>
                    <li>
                        <i class="fas fa-envelope"></i> Email:
                        <a href="#"> support@assignmentClassMate.com</a>
                    </li>
                    <li><i class="fas fa-phone"></i> Phone: +61-730-407-305</li>
                </ul>
            </div>
            <div class="social">
                <ul>
                    <li>
                        <a href="#"><b>My Account</b> </a>
                    </li>
                    <li>
                        Follow Us On:
                        <a href="#"><i class="fab fa-facebook"></i></a>
                    </li>
                    <li>
                        <a href="#"><i class="fab fa-twitter"></i></a>
                    </li>
                    <li>
                        <a href="#"><i class="fab fa-instagram"></i></a>
                    </li>
                </ul>
            </div>
        </div>
    </header>

这是我的 CSS 文件:

.head-container {
  padding: 15px 100px;
  background-color: #9e0b0b;
  color: #fff;
  font-family: sans-serif;
  font-size: 12px;
}

.head-container .head-info {
  display: -ms-grid;
  display: grid;
  -ms-grid-columns: auto auto;
      grid-template-columns: auto auto;
  padding: 5px;
}

.head-container .head-info .contact ul {
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
}

.head-container .head-info .social {
  height: 100%;
}

.head-container .head-info .social ul {
  height: 100%;
  display: -webkit-box;
  display: -ms-flexbox;
  display: flex;
  -webkit-box-pack: end;
      -ms-flex-pack: end;
          justify-content: end;
  text-align: center;
  -webkit-box-align: center;
      -ms-flex-align: center;
          align-items: center;
}

.head-container .head-info .social ul li a {
  margin: 0 5px;
}

.head-container .head-info .social ul li a i {
  font-size: 15px;
}

.head-container .head-info .social ul li a:hover {
  background-color: blue;
}

.head-container li {
  padding: 0 5px;
}

.head-container a {
  color: #fff;
}

* {
  -webkit-box-sizing: border-box;
          box-sizing: border-box;
  padding: 0;
  margin: 0;
}

ul {
  list-style-type: none;
}

li a {
  text-decoration: none;
}

我认为您不应该为实际的 a 标签设置样式,而应为 li 元素提供背景颜色。您需要添加以下样式。

.head-container .head-info .social ul li {
  height: 100%;
}

.head-container .head-info .social ul li:hover {
  background-color: blue;
}

如果你只是想要图标的悬停功能,那么你可以这样做:

.head-container .head-info .social ul li.icon {
  height: 100%;
}

.head-container .head-info .social ul li.icon:hover {
  background-color: blue;
}

<div class="social">
  <ul>
    <li>
      <a href="#"><b>My Account</b> </a>
    </li>
    <li>
      Follow Us On:
    </li>
    <li class="icon">
      <a href="#"><i class="fab fa-facebook"></i></a>
    </li>
    <li class="icon">
      <a href="#"><i class="fab fa-twitter"></i></a>
    </li>
    <li class="icon">
      <a href="#"><i class="fab fa-instagram"></i></a>
    </li>
  </ul>
</div>

如果这不能回答您的问题,请告诉我。

问题是,您给了 .head-container 一个填充。通过此填充,不可能与任何内部元素重叠 .head-container 的背景色。

您可以轻松地为容器内的元素提供填充,而不是给 .head-container 填充。 当您删除 .head-container.head-container .head-info 的填充并添加一些到 .head-container .head-info .social ul li a

.head-container .head-info .social ul li a {
    margin: 0 5px;
    display: block;
    padding: 10px;
}

你得到了你想要的结果。

(注意,将显示设置为块很重要,否则填充将无法正确影响元素)

当然你必须给 .head-container .head-info .contact 一些填充或使用一些 flexbox 属性以便文本居中。

要在左右 border/edge 之间接收一些 space,您可以像这样给 .head-container.head-info 一些填充:padding: 0px, 100px, 0px 100px;。重要的是不要在这些 类 的顶部或底部设置任何填充。否则您将收到与您描述的相同的问题。