L'effet de survol des éléments de menu couvre toute la hauteur de la page
P粉029327711
P粉029327711 2024-02-04 00:36:46
0
2
316

Je développe la navigation à gauche. Je veux que la barre rouge apparaisse avant l'élément de menu en survol. Cela fonctionne pour l'élément "Accueil" et ses sous-éléments, mais d'autres éléments racine provoquent une barre rouge au survol qui s'étend sur toute la largeur de la page de haut en bas.

$(document).foundation();
.vertical.dropdown.menu [href] > i {
  display: block;
}

.vertical.dropdown.menu [href] {
  display: block;
  text-align: center;
}

.left-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 150px;
  height: 100%;
  color: #333;
  background: #FFFFFF;
}

.left-bar .vertical.menu.nested {
  padding: 0;
}

.left-bar [href] > i {
  display: block;
}

.left-bar [href] {
  display: block;
  text-align: left;
  padding: 0;
  color: #333;
}

.left-bar [href]:hover {
  background: #9B9B9BFF;
}

.left-bar .vertical.menu > li {
  position: relative;
  background: #FFFFFF;
  color: #333;
  border: 0;
}


.left-bar .top-level-item [href]:hover::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 5px;
  background-color: red;
}
<link href="https://cdnjs.cloudflare.com/ajax/libs/material-design-iconic-font/2.2.0/css/material-design-iconic-font.min.css" rel="stylesheet"/>
<link href="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.5.0/css/foundation.min.css" rel="stylesheet"/>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/foundation/6.5.1/js/foundation.min.js"></script>
<ul class="vertical dropdown menu left-bar" data-dropdown-menu>
  <li class="top-level-item">
    <a href="#">
      <i class="zmdi zmdi-home zmdi-hc-3x"></i>
      <span>Home</span>
    </a>
    <ul class="vertical menu nested">
      <li><a href="#"><i class="zmdi zmdi-list zmdi-hc-3x"></i> Sub Item 1</a></li>
      <li><a href="#"><i class="zmdi zmdi-list zmdi-hc-3x"></i> Sub Item 2</a></li>
      <!-- ... -->
    </ul>
  </li>
  <li class="top-level-item">
    <a href="#">
      <i class="zmdi zmdi-account zmdi-hc-3x"></i>
      <span>Account</span>
    </a>
  </li>
  <li class="top-level-item">
    <a href="#">
      <i class="zmdi zmdi-settings zmdi-hc-3x"></i>
      <span>Settings</span>
    </a>
  </li>
  <li class="top-level-item">
    <a href="#">
      <i class="zmdi zmdi-help-outline zmdi-hc-3x"></i>
      <span>Help</span>
    </a>
  </li>
  <!-- ... -->
</ul>

Comment faire pour que la barre rouge ne s'étende que sur la hauteur de l'élément de menu ?

P粉029327711
P粉029327711

répondre à tous(2)
P粉798010441

J'ai apporté des modifications au CSS et y ai ajouté des commentaires. Il y a un problème avec les sélecteurs CSS basés sur la structure DOM

.left-bar.vertical.menu li 而不是 .left-bar .vertical.menu > li ,我删除了空格和 > ,以便所有 li Désormais, tous ont des positions relatives

$(document).foundation();
.vertical.dropdown.menu [href] > i {
  display: block;
}

.vertical.dropdown.menu [href] {
  display: block;
  text-align: center;
}

.left-bar {
  position: fixed;
  top: 0;
  left: 0;
  width: 150px;
  height: 100%;
  color: #333;
  background: #FFFFFF;
}

.left-bar .vertical.menu.nested {
  padding: 0;
}

.left-bar [href] > i {
  display: block;
}

.left-bar [href] {
  display: block;
  text-align: left;
  padding: 0;
  color: #333;
}

.left-bar [href]:hover {
  background: #9B9B9BFF;
}

/* I made a change here */
.left-bar.vertical.menu  li {
  position: relative;
  background: #FFFFFF;
  color: #333;
  border: 0;
}


.left-bar .top-level-item [href]:hover::before {
  content: "";
  position: absolute;
  left: 0;
  top: 0;
  bottom: 0;
  width: 5px;
  background-color: red;
}


sssccc
sssccc
P粉899950720

J'ai laissé une bordure pour le rouge initialement définie sur le blanc.

J'ai apporté des modifications :

  • Supprimez tous les CSS inutiles, y compris tous les CSS liés à la position des trucs
  • Utiliser des cours à la place de certains [href] que je considère comme "fragiles"
  • Changé en spécifique background-color pour plus de clarté
  • Définissez 0 bordure, puis ajoutez les détails de la bordure gauche
  • Utilisez rem 而不是 px ,因为典型的浏览器使用 16px = 1rem base de taille ; vous pouvez forcer le soutien pour ceux qui ne le font pas si nécessaire.

Si vous souhaitez que le conteneur continue à avoir une bordure et fasse quelque chose en rapport avec cela en utilisant CSS, vous pouvez choisir l'enfant comme ceci : Comment styliser l'élément parent lorsque l'enfant est survolé ? Ou peut-être utilisez un simple JavaScript pour vous aider.

$(document).foundation();
.nav-item {
  width: 10rem;
  background-color: #FFFFFF;
  text-align: center;
  color: #333;
  border: 0;
  border-left-width: 0.25rem;
  border-left-style: solid;
  border-left-color: #FFFFFF;
}

.nav-item:hover {
  border-left-color: #FF0000;
}

.nav-item .nav-link:hover {
  background-color: #9B9B9BFF;
}

.nav-link {
  color: #333333;
}

.nav-link * {
  display: block;
}


sssccc
sssccc
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal