Рубрики
Без рубрики

Как построить отзывчивый NAVBAR с меню Toggle, используя Flexbox

Charlie Wante, как построить отзывчивую навбар с тумблерным меню, используя FlexBoxPhoto Garry Quan на Unsplashducy aide autome Project, моя команда должна была удалить все следы Bootstrap. Это означало, что чрезвычайно полезная отзывчивая навбар должен быть создан с нуля. я

Автор оригинала: FreeCodeCamp Community Member.

Чарли Оште

Во время недавнего проекта моя команда должна была удалить все следы Bootstrap. Это означало, что чрезвычайно полезная отзывчивая навбар должен быть создан с нуля. Я относительно новичок в CSS и всегда полагался на загрузку на Navbars для их простоты, поэтому я вызвался взять на себя эту задачу. Вот что я узнал и сделал на протяжении всего процесса.

В этой статье я предполагаю, что у вас есть базовые знания HTML, CSS и JavaScript – вы знаете, как связать таблицу styleshet к вашему HTML или применить стили в Le> Tag - и вы знаете, как импортировать файл JavaScript на вашу страницу.

У меня были оборонительные элиты критикуют мой способ делать вещи, особенно с меню Toggle Должность: абсолют – Если у вас есть лучшие способы сделать это, пожалуйста, ответьте ниже, и мы можем сделать это лучше для тысяч людей, читающих его!

Начиная

Во-первых, я начал с некоторых основных HTML для макета:

Вы можете использовать любую конвенцию именования для классов.

Теперь это еще не дает нам много. Это просто простой список предметов. Но с одной линейкой CSS мы видим мощность Flexbox.

.Navbar {
  display: flex;
}

Одна строка кода, и у нас уже есть наши навигационные элементы, выровненные горизонтально через верхнюю часть страницы.

Теперь давайте добавим два NAV Элементы для нашего HTML, поэтому мы можем иметь некоторые предметы слева и справа от Navbar:

И какой-то основной стайлинг на нашем Навкар Класс, который обернут все остальные элементы:

.Navbar {
  background-color: #46ACC2;
  display: flex;
  padding: 16px;
  font-family: sans-serif;
  color: white;
}

Конечно, вы можете выбрать собственную цветовую схему, шрифт и прокладки.

Теперь наша навка выглядит так:

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

Теперь наш Дисплей: Flex В .Navbar Класс больше не несет ответственности за эти предметы. Теперь он несет ответственность за их AV> Контейнеры. Мы хотим, чтобы оба были выровнены горизонтально.

Итак, мы меняем .Navbar__tems класс тоже:

.Navbar__Items {
  display:flex;
}

Теперь давайте добавим немного прокладки на наши ссылки, чтобы сделать это немного красивее:

.Navbar__Link {
  padding-right: 8px;
}

Теперь наш Nav Bar выглядит так:

Мы добираемся туда. Но мы также хотим второй AV> быть выровненным вправо. Как вы, возможно, заметили - я добавил дополнительный класс на S Эконд < NAV> Tag .navbar__ Предметы - право.

Давайте просто добавим Маржа-левый: Авто к этому классу:

.Navbar__Items--right {
  margin-left:auto;
}

Как видите, это сейчас намного лучше. У нас уже есть полностью отзывчивый навар. Но…

Что если каждый навигационный элемент был длиннее текста? Что если бы было больше предметов?

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

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

гибкий направление

С помощью элемента, дисплей которого сгибается, есть также правило для направления, которое мы хотим, чтобы элементы были сгибаться. Это по умолчанию для строки, что аккуратно выравнивает все элементы по оси X.

В нашем случае мы хотели бы небольшое вертикальное меню в верхней части нашей страницы. Попробуем изменение Flex-направление на обоих .Navbar и .Navbar__tems Для столбца – это совпадает со всеми пунктами меню на оси Y – при ширине экрана 768px или ниже.

И давайте удалим это Маржа-левый со второго AV>:

@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
  .Navbar__Items--right {
    margin-left: 0;
  }
}

Но теперь предметы навигации всегда видны, что занимает значительное количество экрана недвижимости.

В наших медиа-запросе позволяет добавить второе правило для .Navbar__tems Так что они не видны:

@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
  .Navbar__Items {
    display:none;
  }
  .Navbar__Items--right {
    margin-left:0;
  }
}

Кнопка Toggle.

Для кнопки Trggle я собираюсь использовать значок, предоставляемый Шрифт потрясающий Отказ Если вы решаете следовать исходу, просто следуйте инструкциям на их сайте, чтобы иконки интегрированы в ваш проект. Вы можете использовать любой значок, который вы хотите, или вы можете использовать простой текст, если хотите.

Теперь давайте добавим этот значок в свой HTML:

Я смело нового дополнения. Вы заметите, что этот переключатель не идет в ни один из NAV Теги, но сидит на улице с названием сайта. Имеет смысл.

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

Давайте исправим это. Давайте сделаем то, что мы сделали с .Navbar__tems На мобильном телефоне значок меню на рабочем столе:

.Navbar__Link-toggle {
  display: none;
}

Теперь давайте добавим некоторые правила в тот же класс в наших медиа-запросе:

.Navbar__Link-toggle {
  align-self: flex-end;
  display: initial;
  position: absolute;
  cursor: pointer;
}

Теперь мы в значительной степени сделаны здесь. У нас наш желаемый взгляд. Но нам нужно добавить функциональность переключения в значок меню.

В вашем JavaScript добавьте:

function classToggle() {
  const navs = document.querySelectorAll('.Navbar__Items')
  
  navs.forEach(nav => nav.classList.toggle('Navbar__ToggleShow'));
}

document.querySelector('.Navbar__Link-toggle')
  .addEventListener('click', classToggle);

Теперь, наконец, добавьте Navbar__Toggleshow С правилом Дисплей: Flex к вашему медиа-запросу.

Теперь у нас есть полностью отзывчивый Navbar с меню Toggle. С Flexbox это действительно так просто!

Последний код

HTML:

CSS:

.Navbar {
  background-color: #46ACC2;
  display: flex;
  padding: 16px;
  font-family: sans-serif;
  color: white;
}

.Navbar__Link {
  padding-right: 8px;
}

.Navbar__Items {
  display: flex;
}

.Navbar__Items--right {
  margin-left:auto;
}

.Navbar__Link-toggle {
  display: none;
}

@media only screen and (max-width: 768px) {
  .Navbar__Items,
  .Navbar {
    flex-direction: column;
  }
    
.Navbar__Items {
    display:none;
  }
    
.Navbar__Items--right {
    margin-left:0;
  }
    
.Navbar__ToggleShow {
    display: flex;
  }
    
.Navbar__Link-toggle {
    align-self: flex-end;
    display: initial;
    position: absolute;
    cursor: pointer;
   } 
}

JS:

function classToggle() {
  const navs = document.querySelectorAll('.Navbar__Items')
  
  navs.forEach(nav => nav.classList.toggle('Navbar__ToggleShow'));
}

document.querySelector('.Navbar__Link-toggle')
  .addEventListener('click', classToggle);

Узнайте больше о Flexbox по адресу:

Основные понятия Flexbox Гибкий модуль коробки, обычно называемый Flexbox, был разработан в виде одномерной модели макета, а также как …

А где я узнал основы Flexbox сами:

Я только что запустил бесплатный полноценный курс Flexbox, в котором вы можете строить проекты Interactivyifiverible Projects Interactivy Bucky The CSS Course Course, который я запустил с FreeCodeCamp в декабре (более 14 000 студентов до сих пор!) Я …

Следуй за мной на Twitter или Github Отказ