1
votes

Comment puis-je rendre la couleur d'arrière-plan active pour deux éléments dans le menu de navigation

J'ai un menu de barre de navigation verticale avec 2 blocs. Le premier est la navigation avec des icônes, le second est le texte du menu. Ils ont des couleurs de fond différentes. Comment puis-je créer une couleur d'arrière-plan pour deux blocs de navigation actifs? conception du menu

<div class="menu__icons">
  <ul class="menu__list">
    <li>
      <a class="menu__item" href="#"><img src="http://via.placeholder.com/50" alt=""></a>
    </li>
    <li>
      <a class="menu__item" href="#"><img src="http://via.placeholder.com/50" alt=""></a>
    </li>
    <li>
      <a class="menu__item" href="#"><img src="http://via.placeholder.com/50" alt=""></a>
    </li>
    <li>
      <a class="menu__item" href="#"><img src="http://via.placeholder.com/50" alt=""></a>
    </li>
  </ul>
</div>
<div class="menu__text">
  <ul class="menu__list">
    <li><a class="menu__item" href="#">First</a></li>
    <li><a class="menu__item" href="#">Second</a></li>
    <li><a class="menu__item" href="#">Third</a></li>
    <li><a class="menu__item" href="#">Fourth</a></li>
  </ul>
</div>
</div>

https://jsfiddle.net/levan563/1g5ucmwq/2/ a>


4 commentaires

Pouvez-vous s'il vous plaît coller tout votre code HTML ici. Votre problème n'est pas encore bien défini.


@ibnelaiq a ajouté, mais je ne sais toujours pas si cette bonne solution est ou non


Voulez-vous définir les deux arrière-plans sur la même couleur ou voulez-vous que ce soit comme dans l'image? Votre problème n'est pas clair


@Screenload pour être comme dans l'image. Lorsque l'élément est actif, l'icône et le texte doivent avoir une couleur d'arrière-plan


3 Réponses :


0
votes

D'après ce que je comprends, prenez la classe active pour les deux blocs li et essayez d'utiliser une police, une icône svg ou des images d'arrière-plan transparentes au lieu d'images de bloc

<div class="menu__icons">
    <ul class="menu__list">
        <li><a class="menu__item active" href="#">
          <img src="https://img.icons8.com/material/24/000000/tailoring-for-men.png">
          </a></li>
    </ul>
</div>
<div class="menu__text">
    <ul class="menu__list">
        <li><a class="menu__item active" href="#">First</a></li>
    </ul>
</div>
.menu__list .active {
   background-color: red;
}


0 commentaires

0
votes

C'est faisable en utilisant jQuery.

En supposant que vous ayez le même nombre d'éléments de liste dans les deux blocs,

.active{
/**your style**/
}
.active > a{

}

.active img{

}

ajoute également la classe .active en css et donne le style nécessaire à éléments li aussi

$(function(){
 $('.menu__list li').on('click', function() {
  var idx = $(this).index();
  $('.menu__list li').removeClass('active');
  $('.menu__list li:nth-child(' + idx + ')').addClass('active');
});
});


0 commentaires

1
votes

En gros, si vous voulez basculer .active et que vous ne voulez pas deux balises distinctes de liste.

Notez que font-awesome est à des fins de démonstration uniquement.

<link href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/5.9.0/css/all.min.css" rel="stylesheet"/>
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" rel="stylesheet"/>
<nav class="navigation-menu">
  <ul class="menu__list list-unstyled">
    <li class="menu__item active">
      <a href="#">
        <div class="menu__icon">
          <i class="fa fa-tachometer-alt"></i>
        </div>
        <div class="menu__title">Main Dashboard</div>
      </a>
    </li>
    <li class="menu__item">
      <a href="#">
        <div class="menu__icon">
          <i class="fa fa-user"></i>
        </div>
        <div class="menu__title">Profile</div>
      </a>
    </li>
    <li class="menu__item">
      <a href="#">
        <div class="menu__icon">
          <i class="fa fa-bell"></i>
        </div>
        <div class="menu__title">Finances</div>
      </a>
    </li>
    <li class="menu__item">
      <a href="#">
        <div class="menu__icon">
          <i class="fa fa-calendar"></i>
        </div>
        <div class="menu__title">Titles</div>
      </a>
    </li>
  </ul>
</nav>
.menu__item {
  width: 250px;
  height: 50px;
  text-align: left;
}

.menu__item.active {
  background-color: #e9ebfd;
}

.menu__item.active .menu__icon {
  background-color: #e9ebfd;
  border-left: 4px solid #2c39ec;
}

.menu__item.active .menu__title {
  background-color: #e9ebfd;
}

.menu__item a:hover {
  text-decoration: none;
}

.menu__icon {
  display: inline-flex;
  align-items: center;
  justify-content: center;
  width: 50px;
  height: 50px;
  background-color: #fafafa;
  color: #2c39ec;
}

.menu__title {
  display: inline-block;
  padding-left: 20px;
  color: #777777;
}

Violon associé https://jsfiddle.net/mhrabiee/dojL9get/28/


1 commentaires

Je t'en prie. juste attention aux unités (par exemple largeur: 250px) est uniquement pour la démo. dans votre projet, c'est peut-être autre chose. Vous pouvez également remplacer vos propres icônes de conception par une police géniale.