Пространственно-равномерный селектор Flexbox для пробелов элемента? - PullRequest
0 голосов
/ 16 апреля 2020

enter image description here

Привет, у меня есть панель навигации, созданная с помощью flex box. Предметы расположены равномерно в пространстве. Мне нужно заполнить пробелы вокруг элемента с тем же синим цветом. А также после того, как цвет при наведении изменится, поэтому мне нужно выбрать элементы li и пробелы, есть ли способ их выбора?.

#menu{
   display: flex;
   margin-top: 0;
   padding: 0;
   justify-content: space-evenly;
}

#menu li {
   height: 100%;
   list-style-type: none;
   background:rgba(5, 151, 242, 1);
}

#menu li a{
   color:white;
   text-decoration: none;
   text-transform: uppercase;
   line-height: 6.5;
   width: 100%;
   height: 100%;
}
<ul id="menu">
   <li><a href="page.php">Link 1</a></li>
   <li><a href="page.php">Link 2</a></li>
   <li><a href="page.php">Longer Link 3</a></li>
   <li><a href="page.php">Link 4</a></li>
</ul>

Ответы [ 2 ]

2 голосов
/ 16 апреля 2020

Ваша проблема в том, что вы думаете о сложном. вам не нужен justify-content: space-evenly;, но вы должны позволить li-элементам расти с: flex-grow: 1;

Также вам не нужно использовать rgba, если вы не используете прозрачность Вы можете использовать rgb

#menu{
   display: flex;
   margin-top: 0;
   padding: 0;
}

#menu li {
   height: 100%;
   list-style-type: none;
   background:rgb(5, 151, 242);
   flex-grow: 1;
   text-align: center;
}

#menu li:hover {
   background:rgba(155, 5, 242);
}

#menu li a{
   color:white;
   text-decoration: none;
   text-transform: uppercase;
   line-height: 6.5;
   width: 100%;
   height: 100%;
   display: block;
}
<ul id="menu">
   <li><a href="page.php">Link 1</a></li>
   <li><a href="page.php">Link 2</a></li>
   <li><a href="page.php">Longer Link 3</a></li>
   <li><a href="page.php">Link 4</a></li>
</ul>

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

Я сделал весь блок кликабельным по запросу дополнительно. Это делается путем добавления display: block; к a -элементам. Ссылка, как правило, является встроенным элементом, поэтому она переключается так, чтобы вести себя как элемент блока, который слушает настройки ширины / высоты, уже присутствующие в вопросе.

2 голосов
/ 16 апреля 2020

Вместо использования justify-content: space-evenly вы можете использовать flex: 1 для каждого <li>. Вы можете центрировать текст, используя text-align: center.
Затем вы создаете свой эффект наведения для каждого элемента.

#menu{
  display: flex;
  margin-top: 0;
  padding: 0;
}

#menu li {
  height: 100%;
  list-style-type: none;
  background:rgba(5, 151, 242, 1);
  flex: 1;
  text-align: center;
  transition: 0.3s;
}

#menu li a {
  border-left: 1px solid red;
  border-right: 1px solid red;
  color: white;
  text-decoration: none;
  text-transform: uppercase;
  line-height: 6.5;
  height: 100%;
  display: inline-block;
}

#menu li:hover {
  background: rgba(5, 151, 242, 0.8);
}
<ul id="menu">
  <li><a href="page.php">Link 1</a></li>
  <li><a href="page.php">Link 2</a></li>
  <li><a href="page.php">Link 3</a></li>
  <li><a href="page.php">Link 4</a></li>
</ul>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...