Проблема вертикальной навигации CSS с Z-индексом и выпадающим списком

@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css"

@import "https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css";

@import "https://daneden.github.io/animate.css/animate.min.css";
  
@media (min-width: 768px) {
  .bootstrap-vertical-nav .collapse {
    display: block;
  }
}

/*-------------------------------*/
/*     Sidebar nav styles        */
/*-------------------------------*/
.sidebar-nav {
  list-style: none;
  margin: 0;
  padding: 0;
  position: absolute;
  top: 0;
  width: 220px;
}
.sidebar-nav li {
  display: inline-block;
  line-height: 20px;
  position: relative;
  width: 100%;
}
/* this background color doesn't trigger */
.sidebar-nav li:before {
  content: '';
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: width 0.2s ease-in;
  width: 3px;
  z-index: 0;
}
.sidebar-nav li:first-child a {
  background-color: #1a1a1a;
  color: 555;
}
.sidebar-nav li:nth-child(2):before {
  background-color: #d12525;
}
.sidebar-nav li:nth-child(3):before {
  background-color: #4c366d;
}
.sidebar-nav li:nth-child(4):before {
  background-color: #583e7e;
}
.sidebar-nav li:nth-child(5):before {
  background-color: #64468f;
}
.sidebar-nav li:nth-child(6):before {
  background-color: #704fa0;
}
.sidebar-nav li:nth-child(7):before {
  background-color: #7c5aae;
}
.sidebar-nav li:nth-child(8):before {
  background-color: #8a6cb6;
}
.sidebar-nav li:nth-child(9):before {
  background-color: #987dbf;
}
.sidebar-nav li:hover:before {
  transition: width 0.2s ease-in;
  width: 100%;
}
.sidebar-nav li a {
  background-color: #1a1a1a;
  color: #fff;
  display: block;
  padding: 10px 15px 10px 30px;
  text-decoration: none;
  z-index: -2;
}
.sidebar-nav li.open:hover before {
  transition: width 0.2s ease-in;
  width: 100%;
}
.sidebar-nav .dropdown-menu {
  background-color: #222222;
  border-radius: 0;
  border: none;
  box-shadow: none;
  margin: 0;
  padding: 0;
  position: relative;
  width: 100%;
}
.sidebar-nav li a:hover,
.sidebar-nav li a:active,
.sidebar-nav li a:focus,
.sidebar-nav li.open a:hover,
.sidebar-nav li.open a:active,
.sidebar-nav li.open a:focus {
  background-color: transparent;
  color: #fff;
  text-decoration: none;
}
.sidebar-nav > .sidebar-brand {
  font-size: 20px;
  height: 65px;
  line-height: 44px;
}
       <div class="collapse" id="collapseExample">
          <ul class="nav flex-column sidebar-nav" id="exCollapsingNavbar3">
            <li class="nav-item sidebar-brand">
              <a nav-link href="#">
                Bootstrap 4
              </a>
            </li>
            <li class="nav-item">
              <a class="nav-link active" href="#"><i class="fa fa-fw fa-home"></i>&nbsp;Home</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-folder"></i>&nbsp;Page one</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-file-o"></i>&nbsp;Second page</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-cog"></i>&nbsp;Third page</a>
            </li>
            <li class="nav-item dropdown">
              <a class="nav-item" href="#" class="dropdown-toggle" data-toggle="dropdown"><i class="fa fa-fw fa-plus"></i>&nbsp;Dropdown&nbsp;<span class="caret"></span></a>
              <ul class="dropdown-menu" role="menu">
                <li class="dropdown-header">Dropdown heading</li>
                <li><a href="#">Action</a></li>
                <li><a href="#">Another action</a></li>
                <li><a href="#">Something else here</a></li>
                <li><a href="#">Separated link</a></li>
                <li><a href="#">One more separated link</a></li>
              </ul>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-bank"></i>&nbsp;Page four</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-bank"></i>&nbsp;Page 5</a>
            </li>
            <li class="nav-item">
              <a class="nav-link" href="#"><i class="fa fa-fw fa-twitter"></i>&nbsp;Last page</a>
            </li>
            <li class="nav-item">
              <a class="nav-link disabled" href="#">Disabled</a>
            </li>

          </ul>
        </div>

Проблема 1) Я работаю над боковой панелью HTML + CSS, у меня возникли проблемы с Z-индексом, если навести курсор на элемент в боковой панели навигации, будет переход цвета слева направо. Я хочу, чтобы текст оставался сверху.

Проблема 2) Мой раскрывающийся список вообще не работает, я думал, что следовал руководство по начальной загрузке.

Весь этот проект является проектом angular2. если вы можете использовать ng-bootstrap для какой-либо функциональности, отлично! если нет, я ценю любые отзывы о том, как решить любую проблему.

ОБНОВЛЕНО: решение, вам понадобится ng-bootstrap чтобы он работал. Не знал, как добавить библиотеку в инструмент фрагмента.

@import "https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-alpha.6/css/bootstrap.min.css";
@import "https://maxcdn.bootstrapcdn.com/font-awesome/4.4.0/css/font-awesome.min.css";
@import "https://daneden.github.io/animate.css/animate.min.css";
@media (min-width: 768px) {
  .bootstrap-vertical-nav .collapse {
    display: block;
  }
}


/*-------------------------------*/


/*     Sidebar nav styles        */


/*-------------------------------*/

.sidebar-nav {
  list-style: none;
  margin: 0;
  padding: 0;
  position: absolute;
  top: 0;
  width: 220px;
}

.sidebar-nav li {
  display: inline-block;
  line-height: 20px;
  position: relative;
  width: 100%;
}

.sidebar-nav div {
  display: inline-block;
  line-height: 20px;
  position: relative;
  width: 100%;
}


/* this background color doesn't trigger */

.sidebar-nav li:before {
  content: '';
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: width 0.2s ease-in;
  width: 3px;
  z-index: -2;
}

.sidebar-nav div:before {
  content: '';
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: width 0.2s ease-in;
  width: 3px;
  z-index: -2;
}

.sidebar-nav li:first-child a {
  background-color: #1a1a1a;
  color: 555;
}

.sidebar-nav li:nth-child(n):before {
  z-index: 1;
  background-color: #b7e7ff;
}

.sidebar-nav li:nth-child(1):before {
  background-color: transparent;
}


/*
BLUE: 0085c6 and darker is: 0c78ad
YELLOW: f3c300
BLACK: 000
GREEN: 009f3d
RED: e00024
*/

.sidebar-nav li:nth-child(n) div:before {
  background-color: #0085c6;
  z-index: 1;
}

.sidebar-nav li:hover:before {
  transition: width 0.2s ease-in;
  width: 100%;
  z-index: -1;
}

.sidebar-nav li a {
  background-color: #1a1a1a;
  color: #fff;
  display: block;
  padding: 10px 15px 10px 30px;
  text-decoration: none;
}

.sidebar-nav li.open:hover before {
  transition: width 0.2s ease-in;
  width: 100%;
}

.sidebar-nav .dropdown-menu {
  background-color: #1a1a1a;
  border-radius: 0;
  border: none;
  box-shadow: none;
  margin: 0;
  padding: 0 0 0 15%;
  position: relative;
  width: 100%;
}

.sidebar-nav .dropdown-menu li:nth-child(1):before {
  background-color: #b7e7ff;
}

.sidebar-nav li a:hover,
.sidebar-nav li a:active,
.sidebar-nav li a:focus,
.sidebar-nav li.open a:hover,
.sidebar-nav li.open a:active,
.sidebar-nav li.open a:focus {
  background-color: transparent;
  color: #fff;
  text-decoration: none;
}

.sidebar-nav>.sidebar-brand {
  font-size: 20px;
  height: 65px;
  line-height: 44px;
}
<script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
<div class="container">
  <div class="row">
    <div class="col-md-4 col-lg-3">
      <!--<div id="collapseExample" [ngbCollapse]="isCollapsed">
        <div class="card">
          <div class="card-block">
            You can collapse this card by clicking Toggle
          </div>
        </div>
      </div>-->
      <div id="collapseExample" [ngbCollapse]="isCollapsed" class="bootstrap-vertical-nav">
        <div class="collapse" id="collapseExample">
          <ul class="nav flex-column sidebar-nav" id="exCollapsingNavbar3">
            <li class="nav-item sidebar-brand">
              <a nav-link href="#">
                Bootstrap 4
              </a>
            </li>
            <li class="nav-item">
              <div>
                <a class="nav-link active" href="#"><i class="fa fa-fw fa-home"></i>&nbsp;Home</a>
              </div>
            </li>
            <li class="nav-item">
              <div>
                <a class="nav-link" href="#"><i class="fa fa-fw fa-folder"></i>&nbsp;Page one</a>
              </div>
            </li>
            <li class="nav-item">
              <div>
                <a class="nav-link" href="#"><i class="fa fa-fw fa-file-o"></i>&nbsp;Second page</a>
              </div>
            </li>
            <li class="nav-item">
              <div>
                <a class="nav-link" href="#"><i class="fa fa-fw fa-cog"></i>&nbsp;Third page</a>
              </div>
            </li>
            <li class="nav-item dropdown">
              <div ngbDropdown>
                <a class="nav-item" href="#" class="dropdown-toggle" data-toggle="dropdown">
                  <i class="fa fa-fw fa-plus"></i>&nbsp;Dropdown&nbsp;<span class="caret"></span>
                </a>
                <ul class="dropdown-menu" role="menu">
                  <li><a href="#">a</a></li>
                  <li><a href="#">b</a></li>
                  <li><a href="#">c</a></li>
                  <li><a href="#">d</a></li>
                  <li><a href="#">e</a></li>
                </ul>
              </div>
            </li>
            <li class="nav-item">
              <div>
                <a class="nav-link disabled" href="#">Disabled</a>
              </div>
            </li>
          </ul>
        </div>
      </div>
    </div>
    <div class="col-md-8 col-lg-9">
      <p>
        <button type="button" class="btn btn-outline-primary" (click)="isCollapsed = !isCollapsed" [attr.aria-expanded]="!isCollapsed" aria-controls="collapseExample">
          Toggle
        </button>
      </p>
      <hr />
      <div>
        <h1>Right Pane - Bootstrap 4.0 Vertical Nav Example</h1>
      </div>
    </div>
  </div>
</div>


person JordanGS    schedule 25.05.2017    source источник


Ответы (3)


Проблема в том, что вы не можете использовать этот li:before как для отображения левой цветной полосы, так и для цветового перехода, и при этом иметь текст сверху.

Я предлагаю добавить элемент span внутри элемента списка, и этот диапазон должен представлять собой цветную полосу, которая всегда должна присутствовать:

<li class="nav-item">
   <span class="before-bar"></span>
   <a class="nav-link active" href="#"><i class="fa fa-fw fa-home"></i>&nbsp;Home</a>
</li>

.before-bar {
    position: absolute;
    height: 100%;
    width: 3px;
}

.sidebar-nav li:nth-child(2):before, 
.sidebar-nav li:nth-child(2) .before-bar {
    background-color: #d12525;
}

См. http://plnkr.co/edit/AHaTOQmBwllZV5bATFtJ?p=preview (только изменено для ссылки "Главная")

Вероятно, еще лучшим решением было бы сохранить li:before для цветовой полосы в 3 пикселя и задать интервал для цветового перехода (с более низким z-индексом).

person Oana C.    schedule 25.05.2017
comment
Спасибо за ответ, я на самом деле получил решение поздно вечером. Почему-то не обновился. В итоге мне просто пришлось добавить один z-index. Смотрите мое решение выше. - person JordanGS; 25.05.2017

Чтобы текст оставался сверху, измените z-индекс на li:before.

.sidebar-nav li:before {
  content: '';
  height: 100%;
  left: 0;
  position: absolute;
  top: 0;
  transition: width 0.2s ease-in;
  width: 3px;
  z-index: -1;
}
person Gerard    schedule 25.05.2017
comment
Спасибо за ответ! Однако при этом маленькая цветная полоса слева исчезает. - person JordanGS; 25.05.2017

Проблема 1) Я работаю над боковой панелью HTML + CSS, у меня возникли проблемы с Z-индексом, если навести курсор на элемент в боковой панели навигации, будет переход цвета слева направо. Я хочу, чтобы текст оставался сверху.

.sidebar-nav li a{
position:relative;
z-index:0;
}

Проблема 2) Мой раскрывающийся список вообще не работает, я думал, что следовал руководству по начальной загрузке.

Весь этот проект является проектом angular2. если вы можете использовать ng-bootstrap для какой-либо функциональности, отлично! если нет, я ценю любые отзывы о том, как решить любую проблему.

Попробуйте добавить bootstrape.min.js

person Irfan    schedule 25.05.2017
comment
Спасибо за ответ! Та же проблема, что и в другом ответе, но текст остается сверху. Маленькая цветная полоса слева исчезает. - person JordanGS; 25.05.2017