水平导航菜单,有多项下拉项时使用

87 阅读1分钟

仅供记录

水平导航菜单的实现,鼠标悬停触发下拉菜单,下拉菜单可以横向分类

image.png

image.png

<template>
  <div class="header">
    <div class="title">
      <div class="title-logo"></div> 
      <div class="title-text"></div> 
    </div>
    <ul class="nav">
      <li
        class="nav-item"
        @mouseenter="openDropdown"
        @mouseleave="closeDropdown"
      >
        <span class="label">XXXX</span>
        <div class="dropdown">
          <ul class="dropdown-column">
            <span class=" column-title no-border"> XX</span>
            <li>XXX</li>
            <li>XXX</li>
            <li>XXX</li>
            <li>XXX</li>
            <li>XXX</li>
            <li>XXX</li>
          </ul>
          <ul class="dropdown-column">
            <span class="column-title"> XXX</span>
            <li>XXX</li>
            <li>XX</li>
            <li>XX</li>
          </ul>
          <ul class="dropdown-column">
            <span class=" column-title"> XXXX</span>
            <li>XX</li>
            <li>XX</li>
          </ul>
        </div>
      </li>
      <li class="nav-item">XXX</li>
    </ul>
  </div>
</template>

<script>
export default {
  data() {
    return {};
  },
  methods: {
    openDropdown(e) {
      e.target.lastElementChild.style.display = "flex";
    },
    closeDropdown(e) {
      e.target.lastElementChild.style.display = "none";
    }
  },
  mounted() {},
};
</script>

<style scoped>
.header {
  width: 100%;
  height: 70px;
  box-sizing: border-box;
  background-image: url("../../assets/image/header/header-bg.png");
  background-color: #173147;
  background-size: 100% 100%;
  background-repeat: no-repeat;
  position: fixed;
  display: flex;
  top: 0;
  left: 0;
}
.title {
  width: 460px;
  height: 70px;
  background-image: url("../../assets/image/header/title-bg.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;
  color: #fff;
}
.title-logo {
  width: 70px;
  height: 70px;
  box-sizing: border-box;
  margin-left: 44px;
  display: inline-block;
  background: url("../../assets/image/header/header-logo.png");
  background-size: 65% 65%;
  background-repeat: no-repeat;
  background-position: center;
}
.title-text {
  font-size: 26px;
  display: inline-block;
  letter-spacing: 1px;
  line-height: 70px;
  font-weight: 500;
  vertical-align: top;
}
.nav {
  height: 100%;
  display: flex;
}
.nav > .nav-item {
  height: 70px;
  width: 130px;
  text-align: center;
  line-height: 70px;
  font-size: 18px;
  color: #fff;
  position: relative;
}
.nav-item:hover {
  background-image: url("../../assets/image/header/menu-hover.png");
  background-size: 100% 100%;
  background-repeat: no-repeat;
}
.nav-item .label {
  display: block;
  width: 100%;
  height: 100%;
  cursor: pointer;
}
.nav-item .dropdown {
  display: flex;
  position: absolute;
  top: 70px;
  left: 0;
  margin: 0;
  padding-bottom: 5px;
  display: none;
  border-bottom: 2px solid #008aff70;
  border-left: 2px solid #008aff70;
  border-right: 2px solid #008aff70;
  background: linear-gradient(to left, #cdcdcd, #cdcdcd) left bottom no-repeat,
    linear-gradient(to bottom, #cdcdcd, #cdcdcd) left bottom no-repeat,
    linear-gradient(to left, #cdcdcd, #cdcdcd) right bottom no-repeat,
    linear-gradient(to left, #cdcdcd, #cdcdcd) right bottom no-repeat;
  background-size: 1px 10px, 10px 1px, 1px 10px, 10px 1px;
  background-color: #173147cc;
}
.nav-item .dropdown-column > span {
  display: block;
  width: 160px;
  height: 40px;
  text-align: center;
  line-height: 40px;
  font-size: 18px;
}
.nav-item .dropdown-column > li {
  width: 160px;
  height: 40px;
  text-align: center;
  line-height: 40px;
  font-size: 14px;
  cursor: pointer;
}
.nav-item .dropdown-column > li:hover {
  background: linear-gradient(
    90deg,
    rgba(0, 138, 255, 0) 0%,
    rgba(0, 138, 255, 0.58) 53%,
    rgba(0, 138, 255, 0.02) 100%
  );
}
.dropdown-column span {
  background-color: #0f3453;
}
.dropdown-column .column-title:not(.no-border) {
  background-image: url("../../assets/image/header/bg1.png");
  background-repeat: no-repeat;
  background-size: 20px 60px;
  background-position: 0 -10px;
}
</style>