Граница внизу под меню не занимает всю ширину - PullRequest
0 голосов
/ 20 ноября 2018

Я хочу иметь меню с некоторыми пунктами, каждый элемент должен иметь рамку справа, а также должен быть контур снизу, но занимающий всю ширину.Проблема в том, что нижняя граница занимает только контейнер, а не всю ширину.Класс контейнера должен быть необходим, потому что текст категорий должен занимать только ширину контейнера.

Кроме того, когда пользователь наводит курсор на каждый элемент, он должен появиться на границе под элементом, и его работа возникает, когдапользователь наводит курсор на каждый элемент, текст элемента немного перемещается, вы знаете, почему?

Знаете ли вы, как решить эти проблемы?

Код с проблемами: http://jsfiddle.net/pjgt1q35/

HTML

<div class="jumbotron p-0 m-0">
  <div class="container">
    <div class="row align-items-center">
      <div class="col-7">
        <h1 class="display-5 font-weight-bold text-dark">Title</h1>
        <p class="lead text-light">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Incidunt voluptatum consequatur deserunt vel dicta voluptatibus sit asperiores minus dolore quidem assumenda amet officiis sequi facere harum accusamus, possimus omnis reiciendis.</p>
      </div>

      <div class="col-5">
        <img src="https://via.placeholder.com/490" width="490" height="300">
      </div>
    </div>
  </div>
</div>

<div class="container">
  <div class="col p-0 m-0">
    <ul class="categories_menu">
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 1</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 2</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 3</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 4</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 5</a>
      </li>
      <li><a data-toggle="modal" id="" data-target="" href="">More
        <i class="fa fa-caret-down" aria-hidden="true"></i></a></li>
    </ul>

  </div>
</div>

CSS

.categories_menu {
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  transition: all 100ms ease-out;

  li {
    -moz-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    border-bottom: 5px solid transparent;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;
    -moz-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    height: 59px;
    -moz-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    padding: 10px 0 5px 0;
    border-left: 1px solid red;
    border-bottom: 1px solid red;

    &:first-child {
      border-left: 0;
    }

    &:hover {
      border-bottom: 5px solid red;
      color: #000;
      cursor: pointer;
      text-decoration: none
    }
    a {
      color: #414e5f;
      font-size: 18px;
      font-weight: bold;
    }
    &.active {
      border-bottom: 5px solid red;

    }

  }
}

Ответы [ 3 ]

0 голосов
/ 21 ноября 2018

Для создания контейнера полной ширины вы можете использовать container-flex вместо container.Создайте row внутри контейнера и поместите туда col.

<div class="container-flex">
<div class="menu-row row">
<div class="col p-0 m-0">
    <ul class="categories_menu">
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 1</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 2</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 3</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 4</a>
      </li>
      <li class="list-item--hidden">
        <a href="javascript:void(0)" name="category" id="">Item 5</a>
      </li>
      <li><a data-toggle="modal" id="" data-target="" href="">More
        <i class="fa fa-caret-down" aria-hidden="true"></i></a></li>
    </ul>

  </div>
</div>

И используйте этот стиль:

.menu-row {
    border-bottom: 1px solid red;
}
.menu-row ul {
    margin-bottom: 0;
}

Чтобы избежать проблем с перемещением при наведении <li>, используйтеэтот стиль:

a {
    color: #414e5f;
    font-size: 18px;
    font-weight: bold;
    border-bottom: 5px solid transparent;
}
&.active {
    border-bottom: 5px solid red;

}

.categories_menu {
  display: -moz-box;
  display: -ms-flexbox;
  display: flex;
  width: 100%;
  -moz-box-pack: justify;
  -ms-flex-pack: justify;
  justify-content: space-between;
  transition: all 100ms ease-out;
}

li {
    -moz-box-align: center;
    -ms-flex-align: center;
    align-items: center;
    border-bottom: 5px solid transparent;
    -moz-box-sizing: border-box;
    box-sizing: border-box;
    display: -moz-box;
    display: -ms-flexbox;
    display: flex;
    -moz-box-flex: 1;
    -ms-flex: 1 1 auto;
    flex: 1 1 auto;
    height: 59px;
    -moz-box-pack: center;
    -ms-flex-pack: center;
    justify-content: center;
    padding: 10px 0 5px 0;
    border-left: 1px solid red;
}

    li:first-child {
      border-left: 0;
    }

    li:hover {
      border-bottom: 5px solid red;
      color: #000;
      cursor: pointer;
      text-decoration: none
    }
    a {
      color: #414e5f;
      font-size: 18px;
      font-weight: bold;
      border-bottom: 5px solid transparent;
    }
    &.active {
      border-bottom: 5px solid red;

    }

.menu-row {
  border-bottom: 1px solid red;
}
    
.menu-row ul {
  margin-bottom: 0;
}
    
<!DOCTYPE html>
<html>
<head>
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css" integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO" crossorigin="anonymous">
</head>
<body>

    <div class="container-flex">
    <div class="menu-row row">
    <div class="col p-0 m-0">
        <ul class="categories_menu">
          <li class="list-item--hidden">
            <a href="javascript:void(0)" name="category" id="">Item 1</a>
          </li>
          <li class="list-item--hidden">
            <a href="javascript:void(0)" name="category" id="">Item 2</a>
          </li>
          <li class="list-item--hidden">
            <a href="javascript:void(0)" name="category" id="">Item 3</a>
          </li>
          <li class="list-item--hidden">
            <a href="javascript:void(0)" name="category" id="">Item 4</a>
          </li>
          <li class="list-item--hidden">
            <a href="javascript:void(0)" name="category" id="">Item 5</a>
          </li>
          <li><a data-toggle="modal" id="" data-target="" href="">More
            <i class="fa fa-caret-down" aria-hidden="true"></i></a></li>
        </ul>
      </div>
    </div>
</div>
</body>
</html>
0 голосов
/ 21 ноября 2018

Слева от меню есть отступы

.categories_menu {
    padding-left:0;
}

Причина, по которой элемент меню перемещается при наведении курсора, заключается в следующем:

Наведение

border-bottom: 5px solid red

Non-hover

border-bottom: 1px solid red;

Между парением и non-hover есть пространство в 4px, поэтому элемент будет перемещаться на 4px вниз при наведении.

Вы должны добавить границу к <a> при зависании вместо <li>

0 голосов
/ 21 ноября 2018

РЕДАКТИРОВАТЬ: я видел ваш комментарий выше.Можете ли вы создать новый div?

<div class="bottom-bordered-div">
    ....your entire code starting with the containing container div
</div>

Просто дайте ему нижнюю границу, и он обернет ваш контейнер, чтобы ваше меню оставалось в ширине контейнера.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...