Изменить направление подменю (выпадающее меню) с вертикального на горизонтальное - PullRequest
0 голосов
/ 05 сентября 2018

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

enter image description here Я хочу изменить раскрывающееся меню, чтобы они отображались в горизонтальном направлении, предпочтительно по центру пункта меню:

enter image description here Я использую div (.dropdown, .dropdown-content)

.dropdown {
    float: left;
    overflow: hidden;
}

.dropdown .dropbtn {
    font-size: 16px;    
    outline: none;
    background-image: linear-gradient(#F1F1F1, #E5E5E5);
    font-family: inherit;
    margin: 0;
    width: 150px;
    height: 160px;
    border: 1px solid white;
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
}

.dropdown-content {
    display: none;
    position: absolute;
    background-image: linear-gradient(#F1F1F1, #E5E5E5);
    border: 1px solid white;
    width: 150px;
    height: auto;
    border-bottom-left-radius: 5px;
    border-bottom-right-radius: 5px;
    border-top-left-radius: 5px;
    border-top-right-radius: 5px;
    padding-bottom: 10px;
}

Как я могу изменить направление и выравнивание?

<div class="dropdown">
    <button class="dropbtn" data-showdiv="CO">
        <div class="titleh2">Title</div>
        <img class="orga" src="picture.png"> 
        <div class="titleh1">Name</div>
        <i class="fa fa-caret-down"></i>
    </button>
    <div class="dropdown-content">
        <a href="#" class="firstImage">
            <img class="orga" src="\untitled.png" />
        </a>
        <div class="titleh2">Title</div><br>
        <div class="titleh3">Name</div>
        <hr class="horizontal">
        <a href="#">
            <img class="orga" src="\untitled.png">
        </a>
        <div class="titleh2">Title</div><br>
        <div class="titleh3">Name</div>
        <hr class="horizontal">
        <a href="#">
            <img class="orga" src="\untitled.png">
        </a>
        <div class="titleh2">Title</div><br>
        <div class="titleh3">Name</div>
    </div>
</div> 

1 Ответ

0 голосов
/ 05 сентября 2018

Вы можете использовать FlexBox для достижения желаемого результата. Имейте в виду, что flexbox является совершенно новым и не поддерживается в старых браузерах.

Что я сделал:

Измените настройку дисплея с dropdown-content на display:flex; и добавьте flex-direction: row, чтобы выровнять их по горизонтали.

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

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  outline: none;
  background-image: linear-gradient(#F1F1F1, #E5E5E5);
  font-family: inherit;
  margin: 0;
  width: 150px;
  height: 160px;
  border: 1px solid white;
  border-radius: 5px;

}

.dropdown-content {
  /*display: none; //Change this to display flex, with the flex-direction to align the items horizontally*/
  display: flex;
  flex-direction: row;
  position: absolute;
  background-image: linear-gradient(#F1F1F1, #E5E5E5);
  border: 1px solid white;
  height: auto;
  border-radius: 5px;
  padding-bottom: 10px;
}

.dropdown-content-element{
  margin: 2px 5px;
  padding: 5px;
}
<div class="dropdown">
  <button class="dropbtn" data-showdiv="CO">
        <div class="titleh2">Title</div>
        <img class="orga" src="picture.png"> 
        <div class="titleh1">Name</div>
        <i class="fa fa-caret-down"></i>
    </button>
  <div class="dropdown-content">
    <div class="dropdown-content-element">
      <a href="#" class="firstImage">
        <img class="orga" src="\untitled.png" />
      </a>
      <div class="titleh2">Title</div>
      <div class="titleh3">Name</div>
    </div>
    <div class="dropdown-content-element">
      <a href="#">
        <img class="orga" src="\untitled.png">
      </a>
      <div class="titleh2">Title</div>
      <div class="titleh3">Name</div>
    </div>
    <div class="dropdown-content-element">
      <a href="#">
        <img class="orga" src="\untitled.png">
      </a>
      <div class="titleh2">Title</div>
      <div class="titleh3">Name</div>
    </div>
  </div>
</div>

А вот небольшая шпаргалка, с которой можно начать FlexBox .

EDIT: Это работает, но не в центре выбранного элемента супермену. Но ты сам добьешься этого, я верю в тебя!

Да, и между прочим: Вы можете суммировать свои правила радиуса границы с border-radius: 5px;, если все они одинаковы. Экономит место и улучшает читаемость.

РЕДАКТИРОВАТЬ 2:

Вот пример использования ul и li для достижения аналогичного результата. Этот метод был предложен @Moose в одном из его комментариев.

.dropdown {
  float: left;
  overflow: hidden;
}

.dropdown .dropbtn {
  font-size: 16px;
  outline: none;
  background-image: linear-gradient(#F1F1F1, #E5E5E5);
  font-family: inherit;
  margin: 0;
  width: 150px;
  height: 160px;
  border: 1px solid white;
  border-radius: 5px;
}

.dropdown-content {
  /*display: none;*/
  position: absolute;
  background-image: linear-gradient(#F1F1F1, #E5E5E5);
  border: 1px solid white;
  height: auto;
  border-radius: 5px;
  padding-bottom: 10px;
}

.dropdown-list {
  list-style: none;
}

.dropdown-list>li {
  display: inline-block;
}
<div class="dropdown">
  <button class="dropbtn" data-showdiv="CO">
        <div class="titleh2">Title</div>
        <img class="orga" src="picture.png"> 
        <div class="titleh1">Name</div>
        <i class="fa fa-caret-down"></i>
    </button>
  <div class="dropdown-content">
    <ul class="dropdown-list">
      <li>
        <a href="#" class="firstImage">
          <img class="orga" src="\untitled.png" />
        </a>
        <div class="titleh2">Title</div>
        <div class="titleh3">Name</div>
      </li>
      <li>
        <a href="#">
          <img class="orga" src="\untitled.png">
        </a>
        <div class="titleh2">Title</div>
        <div class="titleh3">Name</div>
      </li>
      <li>
        <a href="#">
          <img class="orga" src="\untitled.png">
        </a>
        <div class="titleh2">Title</div>
        <div class="titleh3">Name</div>
      </li>
    </ul>
  </div>
</div>
...