Строка направления движения не работает: она все еще отображается в виде столбца

У меня есть навигационная панель, которую я хочу отображать в виде столбца на маленьких экранах и в виде строки на экранах рабочего стола. Моя проблема в том, что я не знаю, почему "flex-direction: row;" не меняет панель навигации, чтобы соответствовать бок о бок.

HTML:

<div class="top-nav">
  <nav>
    <ul>
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

CSS:

.top-nav li {
  list-style-type: none;
  font-size: 22px;
  border: 2px solid #333;
  width: 80%;
  padding: 0;
  margin-top: 10px;
  margin-left: auto;
  margin-right: auto;
  box-shadow: 2px 2px 2px #333;
}

.top-nav {
  display: flex;
  flex-direction: column;
  text-align: center;
  justify-content: center;
}

.top-nav ul {
  padding: 0;
  margin: 0;
}

@media (min-width: 750px) {

  /* top nav */

  .top-nav {
    flex-direction: row;
  }

  .top-nav li {
    margin: 0;
    width: auto;
  }

6 ответов

Проблема в вашей области селектора. Ваш flex не работает вообще, чтобы управлять вашим расположением элементов навигации. Вы применяете CSS контейнер навигации, а не контейнер пункта меню. Даже если он отображается в виде столбца, это также не заслуга flex недвижимость здесь. Смотрите ниже, это может помочь вам:

Ключевая часть:

.top-nav ul {
  display: flex;
  flex-direction: row;
}

.top-nav li {
  list-style-type: none;
  font-size: 22px;
  border: 2px solid #333;
  width: 80%;
  padding: 0;
  margin-top: 10px;
  margin-left: auto;
  margin-right: auto;
  box-shadow: 2px 2px 2px #333;
}

.top-nav {
  display: flex;
  flex-direction: column;
  text-align: center;
  justify-content: center;
}

.top-nav ul {
  padding: 0;
  margin: 0;
}

@media (min-width: 750px) {

  /* top nav */

  .top-nav {
    flex-direction: row;
  }
  
  .top-nav ul {
  display: flex;
    flex-direction: row;
  }

  .top-nav li {
    margin: 0;
    width: auto;
  }
<div class="top-nav">
  <nav>
    <ul>
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

Следующие изменения в вашем CSS для решения

.top-nav li {
  list-style-type: none;
  font-size: 22px;
  border: 2px solid #333;
  width: 80%;
  padding: 0;
  margin-top: 10px;
  margin-left: auto;
  margin-right: auto;
  box-shadow: 2px 2px 2px #333;
}

.top-nav {
 text-align: center;
  justify-content: center;
}

.top-nav ul 
{
    padding: 0;
    margin: 0;
    display: flex;
}

@media screen and (max-width: 480px) 
{

.top-nav ul 
{

   flex-direction:column;
}

  
  .top-nav li
  {
    margin: 0;
    width: auto;
  }
  


}
<div class="top-nav">
  <nav>
    <ul>
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

Попробуйте этот код Надеюсь, это будет работать для вас!

.top-nav li {
  list-style-type: none;
  font-size: 22px;
  border: 2px solid #333;
  width: 80%;
  padding: 0;
  margin-top: 10px;
  margin-left: auto;
  margin-right: auto;
  box-shadow: 2px 2px 2px #333;
}
.top-nav ul{
  display: flex;
  flex-direction: row;
  text-align: center;
  align-items: center;
  justify-content: center;
}
.top-nav {
  padding: 0;
  margin: 0;
}

@media only screen and (max-width: 750px) {
  /* top nav */
.top-nav ul { flex-direction: column; }
}
/* .top-nav li {
    margin: 0;
    width: auto;
  }
} */
<div class="top-nav">
  <nav>
    <ul>
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

Вы должны сделать свой <li>дети display: flex Родитель. Переместить ваш top-nav класс к <ul> и это должно сделать это.

<div>
  <nav>
    <ul class="top-nav">
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

Вот мой любимый чит-лист flexbox: https://yoksel.github.io/flex-cheatsheet/

Вы должны подать заявку flex-direction: row в ul

Теперь flex-direction:column; работа в максимальной ширине 750px и flex-direction: работа строки после 750px;

посмотрите пример js fiddle здесь

.top-nav li {
  list-style-type: none;
  font-size: 22px;
  border: 2px solid #333;
  width: 80%;
  padding: 0;
  margin-top: 10px;
  margin-left: auto;
  margin-right: auto;
  box-shadow: 2px 2px 2px #333;
}

.top-nav {
  
}

.top-nav ul {
  display: flex;
  flex-direction: row;
  text-align: center;
  justify-content: center;
  padding: 0;
  margin: 0;
}

@media (max-width: 750px) {

  /* top nav */

  .top-nav ul{
    flex-direction: column;
  }

  .top-nav li {
    margin: 0;
    width: auto;
  }
  }
<div class="top-nav">
  <nav>
    <ul>
      <li><a>Home</a></li>
      <li><a>Category</a></li>
      <li><a>Recent</a></li>
      <li><a>All recipes</a></li>
    </ul>
  </nav>
</div>

Другие вопросы по тегам