Позиционирование элементов в Bootstrap
Позиционирование элементов
Последнее обновление: 31.10.2015
При использовании Bootstrap очень удобно позиционировать интерфейс в виде таблицы или сетки, используя строки и столбцы. Так, если мы посмотрим в браузере на стандартное представление Index.cshtml, которое идет по умолчанию, то мы увидим подобное позиционирование: элементы под заголовком расположены как бы в три столбца и составляют одну строку:
Если мы откроем код представления, то мы можем увидеть использование классов bootstrap:
<div> <div> <h3>Getting started</h3> <p>.............</p> </div> <div> <h3>Get more libraries</h3> <p>.............</p> </div> <div> <h3>Web Hosting</h3> <p>.............</p> </div> </div>
Для создания отдельного столбца строки используется класс col-md-4
. col
, как ясно из названия, обозначает столбец.
Дальше идет md
— идентификатор устройства. Как мы увидели в прошлой теме, bootstrap делит все устройства условно на четыре группы в зависимости от
ширины экрана. md, в частности, соотносится со средними устройствами (то есть которые имеют ширину от 992 пикселя и выше). А число 4 указывает, сколько условных
единиц в строке будет занимать данный блок. Таким образом, получается, что класс col-md-4
означает, что данный блок будет занимать 4 условных единицы из 12 в строке, то есть треть ширины
экрана устройства с экраном шириной от 992 пикселей.
И поскольку у нас есть четыре группы, то для каждой группы имеются свои классы. Например, для очень маленьких устройств с экраном меньше 768 пикселей (то есть мобильных телефонов), подобный класс мог бы быть таким col-xs-4.
Все типы классов:
col-xs-*: для устройств с шириной экрана меньше 768 пикселей
col-sm-*: для устройств с шириной экрана от 768 пикселей и выше
col-md-*: для устройств с шириной экрана от 992 пикселя и выше
col-lg-*: для устройств с шириной экрана от 1200 пикселей и выше
Хотя даже на мобильных устройствах блок с классом col-md-4
будет выглядеть вполне неплохо, но мы можем установить сразу два класса,
чтобы еще больше детализировать отображение на различных устройствах, например:
<div>
И хотя в представлении Index.cshtml по умолчанию все три блока имеют относительную ширину в 4 единицы, составляя в целом 12 единиц, мы можем задать любую другую ширину, позиционируя их по собственному усмотрению. Например:
Отступы
Специальные классы col-md(sm|lg)-offset-*
позволяют задать смещение относительно левого блока или начала строки в условных единицах.
Например, у нас есть такая строка:
<div> <div> <h3>Левый блок</h3> <p>................</p> </div> <div> <h3>Правый блок</h3> <p>................</p> </div> </div>
Класс col-md-offset-4
будет смещать правый блок на 4 условных единицы вправо:
Некоторые примеры по использованию смещения:
Порядок столбцов
С помощью классов col-md(sm|lg)-push-*
и col-md(sm|lg)-pull-*
мы можем переопределить порядок блоков в строке.
Например, класс col-md-push-4
сдвигает блок на четыре единицы вправо от текущего положения. И наоборот, класс col-md-pull-4
сдвигает блок влево от текущей позиции. Так, предыдущий пример со смещением мы могли бы переписать следующим образом:
<div> <div> <h3>Левый блок</h3> <p>................</p> </div> <div> <h3>Правый блок</h3> <p>................</p> </div> </div>
И у нас был бы тот же эффект. Но мы можем также полностью переупорядочить порядок следования блоков:
<div> <div> <h3>Левый блок</h3> <p>................</p> </div> <div> <h3>Правый блок</h3> <p>................</p> </div> </div>
Теперь правый блок сместится влево на четыре единицы, а левый блок — вправо на 8 единиц:
Таким образом, используя класс row и классы столбцов, мы можем задать общее расположение элементов, а адаптивность bootstrap гарантирует, что на любых устройствах подобная сетка элементов будет выглядеть вполне нормально. Теперь рассмотрим некоторые компоненты, которые предлагает нам Bootstrap.
metanit.com
Bootstrap 3 и 4 позиционирование, выравнивание элементов
При работе с bootstrap 3 я использую позиционирование сеткой (таблицей), об этом в начале статьи.
А в bootstrap 4 используется новый режим flexbox, но основные приёмы работы с сеткой остались с небольшими изменениями об этом в середине статьи.
Код скрина выше выглядит следующим образом:
<div> <div> <div> <div> <h5>DESIGN</h5> <p>…</p> </div> </div> <div> <div> <h5>REENGINEERING</h5> <p>…</p> </div> </div> </div> <div> <div> <div> <h5>SUPPORT</h5> <p>…</p> </div> </div> <div> <div> <h5>INSTRUMENTS</h5> <p>…</p> </div> </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 |
<div> <div> <div> <div> <h5>DESIGN</h5> <p>…</p> </div> </div> <div> <div> <h5>REENGINEERING</h5> <p>…</p> </div> </div> </div> <div> <div> <div> <h5>SUPPORT</h5> <p>…</p> </div> </div> <div> <div> <h5>INSTRUMENTS</h5> <p>…</p> </div> </div> </div> </div> |
- Класс row
- Строка в bootstrap содержит максимум 12 столбцов;
- Класс col-ml-4 задает столбец строки, где
- col (column) — столбец строки;
- md — идентификатор устройства, bootstrap разделил все устройства на 4 группы в зависимости от ширины экрана;
- 4 — количество условных единиц(столбцов) ширины будет занимать блок, из 12. То есть div с классом col-ml-4 займет 1/3 ширины экрана устройства шириной от 992 пикселей;
Типы классов устройств
- col-xs-*: для устройств с шириной экрана меньше 768 пикселей;
- col-sm-*: для устройств с шириной экрана от 768 пикселей и выше;
- col-md-*: для устройств с шириной экрана от 992 пикселя и выше;
- col-lg-*: для устройств с шириной экрана от 1200 пикселей и выше;
Как видно из примера выше я использовал сразу три класса одновременно для более детального отображения на различных устройствах
<div>
<div> |
Так же как видно из кода я использовал разные значения столбцов для разных устройств — главное что бы в общем было 12 единиц. Мы можем задавать любую другую ширину для каждого устройства:
Отступы
Классы col-md(sm|lg)-offset-* задают смещение относительно левого блока или начала строки в условных единицах
<div> <div> <h3>Левый блок</h3> <p>…</p> </div> <div> <h3>Правый блок</h3> <p>…</p> </div> </div>
<div> <div> <h3>Левый блок</h3> <p>…</p> </div> <div> <h3>Правый блок</h3> <p>…</p> </div> </div> |
Класс col-md-offset-4 будет смещать правый блок на 4 условных единицы вправо:
Некоторые примеры по использованию смещения:
Порядок столбцов
С помощью классов col-md(sm|lg)-push-* и col-md(sm|lg)-pull-* мы можем переопределить порядок блоков в строке. Например, класс col-md-push-4 сдвигает блок на четыре единицы вправо от текущего положения. И наоборот, класс col-md-pull-4 сдвигает блок влево от текущей позиции. Так, предыдущий пример со смещением мы могли бы переписать таким способом:
<div> <div> <h3>Левый блок</h3> <p>…………….</p> </div> <div> <h3>Правый блок</h3> <p>…………….</p> </div> </div>
<div> <div> <h3>Левый блок</h3> <p>…………….</p> </div> <div> <h3>Правый блок</h3> <p>…………….</p> </div> </div> |
Либо изменить порядок следования блоков и получить тот же результат
<div> <div> <h3>Левый блок</h3> <p>…………….</p> </div> <div> <h3>Правый блок</h3> <p>…………….</p> </div> </div>
<div> <div> <h3>Левый блок</h3> <p>…………….</p> </div> <div> <h3>Правый блок</h3> <p>…………….</p> </div> </div> |
в последнем примере правый блок сместится влево на четыре единицы, а левый блок — вправо на 8 единиц.
Режим flexbox позволяет макету автоматически вычислять размер каждой колонки.
<div> <div> <div> половина </div> <div> половина </div> </div> <div> <div> Одна третья </div> <div> Одна третья </div> <div> Одна третья </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 |
<div> <div> <div> половина </div> <div> половина </div> </div>
<div> <div> Одна третья </div> <div> Одна третья </div> <div> Одна третья </div> </div> </div> |
Безразмерные колонки в сетке flexbox будут поровну делить доступное пространство, всегда заполняя весь ряд.
Можно указать размер для одной колонки, а остальные колонки равномерно распределят оставшееся пространство между собой. Укажем размер у среднего блока. Остальные распределятся поровну.
<div> <div> <div> (12 — 6) / 2 = 3 </div> <div> 6 колонок </div> <div> (12 — 6) / 2 = 3 </div> </div> <div> <div> </div> <div> 5 колонок </div> <div> </div> </div> <div> <div> </div> <div> 4 колонки </div> <div> </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<div> <div> <div> (12 — 6) / 2 = 3 </div> <div> 6 колонок </div> <div> (12 — 6) / 2 = 3 </div> </div>
<div> <div>
</div> <div> 5 колонок </div> <div>
</div> </div>
<div> <div>
</div> <div> 4 колонки </div> <div>
</div> </div> </div> |
Используя классы col-{breakpoint}-auto, можно создать блок, размер которого будет определяться его содержимым. Также для блока можно задать классы горизонтального выравнивания. В этом случае общий ряд будет сжат до необходимых размеров.
<div> <div> <div> 1 of 3 </div> <div> Слово </div> <div> 3 of 3 </div> </div> <div> <div> 1 of 3 </div> <div> Два слова </div> <div> 3 of 3 </div> </div> <div> <div> 1 of 3 </div> <div> Здесь три слова </div> <div> 3 of 3 </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 |
<div> <div> <div> 1 of 3 </div> <div> Слово </div> <div> 3 of 3 </div> </div>
<div> <div> 1 of 3 </div> <div> Два слова </div> <div> 3 of 3 </div> </div>
<div> <div> 1 of 3 </div> <div> Здесь три слова </div> <div> 3 of 3 </div> </div> </div> |
Можно оставить стандартное поведение, не сжимая общую ширину.
<div> <div> <div> 1 of 3 </div> <div> Два слова </div> <div> 3 of 3 </div> </div> </div>
<div> <div> <div> 1 of 3 </div> <div> Два слова </div> <div> 3 of 3 </div> </div> </div> |
Вы можете использовать опорные точки для точного задания размеров колонок. В остальных случаях можно ограничиться классами col и col-*.
<div> <div>col</div> <div>col</div> <div>col</div> <div>col</div> </div> <div> <div>col-8</div> <div>col-4</div> </div>
<div> <div>col</div> <div>col</div> <div>col</div> <div>col</div> </div> <div> <div>col-8</div> <div>col-4</div> </div> |
Из стопки в ряд
Используя классы col-sm-*, вы можете создать базовую сеточную систему, которая разместит блоки в виде стопки на телефонах, а затем будет выводить блоки в один ряд.
<div> <div>col-sm-8</div> <div>col-sm-4</div> </div> <div> <div>col-sm</div> <div>col-sm</div> <div>col-sm</div> </div>
<div> <div>col-sm-8</div> <div>col-sm-4</div> </div> <div> <div>col-sm</div> <div>col-sm</div> <div>col-sm</div> </div> |
Смешиваем все классы
Можете комбинировать все классы, как вам нужно.
<!— Stack the columns on mobile by making one full-width and the other half-width —> <div> <div>.col .col-md-8</div> <div>.col-6 .col-md-4</div> </div> <!— Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop —> <div> <div>.col-6 .col-md-4</div> <div>.col-6 .col-md-4</div> <div>.col-6 .col-md-4</div> </div> <!— Columns are always 50% wide, on mobile and desktop —> <div> <div>.col-6</div> <div>.col-6</div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
<!— Stack the columns on mobile by making one full-width and the other half-width —> <div> <div>.col .col-md-8</div> <div>.col-6 .col-md-4</div> </div>
<!— Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop —> <div> <div>.col-6 .col-md-4</div> <div>.col-6 .col-md-4</div> <div>.col-6 .col-md-4</div> </div>
<!— Columns are always 50% wide, on mobile and desktop —> <div> <div>.col-6</div> <div>.col-6</div> </div> |
Вертикальное выравнивание
Flexbox дает два способа вертикального позиционирования колонок.
Выравниваем колонки внутри ряда относительно верха, середины, низа, если позволяет высота. Указываем у row классы flex-items-xs-start, flex-items-xs-center, flex-items-xs-end.
<div> <div> <div> По верху </div> <div> По верху </div> <div> По верху </div> </div> <div> <div> По центру </div> <div> По центру </div> <div> По центру </div> </div> <div> <div> По низу </div> <div> По низу </div> <div> По низу </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 |
<div> <div> <div> По верху </div> <div> По верху </div> <div> По верху </div> </div> <div> <div> По центру </div> <div> По центру </div> <div> По центру </div> </div> <div> <div> По низу </div> <div> По низу </div> <div> По низу </div> </div> </div> |
Также можно выровнять колонки внутри одного ряда относительно друг друга, если колонки будут использовать классы align-self-start, align-self-center, align-self-end.
<div> <div> <div> One of three columns </div> <div> One of three columns </div> <div> One of three columns </div> </div> </div>
<div> <div> <div> One of three columns </div> <div> One of three columns </div> <div> One of three columns </div> </div> </div> |
Горизонтальное выравнивание
Создаём блоки, размер которых меньше 12 колонок. Дальше управляем их выравниванием из-за свободного места, указывая у ряда row классы justify-content-start, justify-content-center, justify-content-end. Также обратите внимание на классы justify-content-around, justify-content-between, которые окружают свободно место.
<div> <div> <div> По левому краю </div> <div> По левому краю </div> </div> <div> <div> По центру </div> <div> По центру </div> </div> <div> <div> По правому краю </div> <div> По правому краю </div> </div> <div> <div> Around </div> <div> Around </div> </div> <div> <div> Between </div> <div> Between </div> </div> </div>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
<div> <div> <div> По левому краю </div> <div> По левому краю </div> </div>
<div> <div> По центру </div> <div> По центру </div> </div>
<div> <div> По правому краю </div> <div> По правому краю </div> </div>
<div> <div> Around </div> <div> Around </div> </div>
<div> <div> Between </div> <div> Between </div> </div> </div> |
Промежутки
Используйте класс .no-gutters, чтобы убрать промежутки между блоками. Класс удаляет отрицательные margins из .row и горизонтальные padding из всех дочерних колонок.
Сортировка колонок
В обычной системе сеток, если нам необходимо поменять порядок колонок, нам нужно использовать push и pull.
Разработчики Bootstrap реализовали встроенное свойство flexbox order на основе трех классов сортировки, которые применим к колонкам col:
- .flex-first – отображается первым
- .flex-last – отображается последним
- .flex-unordered – отображается между первым и последним
<div> <div> <div> Первый, но не первый и не последний </div> <div> Второй, но последний </div> <div> Третий, но первый </div> </div> </div>
<div> <div> <div> Первый, но не первый и не последний </div> <div> Второй, но последний </div> <div> Третий, но первый </div> </div> </div> |
Смещение колонок
Для сдвига колонок вправо используйте .offset-md-*, которые увеличивают левый отступ на * колонок. Например, .offset-md-4 сдвигает на четыре колонки.
<div> <div> <div>.col-md-4</div> <div>.col-md-4 .offset-md-4</div> </div> <div> <div>.col-md-3 .offset-md-3</div> <div>.col-md-3 .offset-md-3</div> </div> <div> <div>.col-md-6 .offset-md-3</div> </div> </div>
leodev.ru
css — Как использовать позиционирование в процентах для позиционирования в Bootstrap?
Stack Overflow на русскомLoading…
- 0
- +0
- Тур Начните с этой страницы, чтобы быстро ознакомиться с сайтом
- Справка Подробные ответы на любые возможные вопросы
- Мета Обсудить принципы работы и политику сайта
- О нас Узнать больше о компании Stack Overflow
- Бизнес Узнать больше о поиске разработчиков или рекламе на сайте
- Войти Регистрация
-
текущее сообщество
- Stack Overflow на русском справка чат
- Stack Overflow на русском Meta
ru.stackoverflow.com
Stack Overflow на русском
Loading…
- 0
- +0
- Тур Начните с этой страницы, чтобы быстро ознакомиться с сайтом
- Справка Подробные ответы на любые возможные вопросы
- Мета Обсудить принципы работы и политику сайта
- О нас Узнать больше о компании Stack Overflow
- Бизнес Узнать больше о поиске разработчиков или рекламе на сайте
- Войти Регистрация
-
текущее сообщество
ru.stackoverflow.com
Bootstrap центрирование – всевозможные способы выравнивания на сайте
Приветствую всех желающих досконально изучить Bootstrap 3! В текущей публикации я затрону тему, касающуюся выравнивания объектов и текста в соответствии с вашими потребностями. Другое ее название – это Bootstrap центрирование.
Данная тематика востребована при верстке сайтов и, следовательно, очень важно разбираться в этой области. Поэтому я расскажу вам, как производится центрирование по вертикали, горизонтали, каким способом можно выровнять изображения в блоках и переместить панель меню. Вперед за обучение!
Горизонтальное центрирования
Начнем с самого простого – горизонтального выравнивания контента. Для этого во фреймворке были предусмотрены специальные встроенные классы, благодаря которым можно указывать тип выравнивания объектов. Все они перечислены в таблице, прикрепленной ниже.
Класс | Тип размещения |
.text-left | Все элементы ровняются по левому краю. |
.text-right | Весь контент выравнивается по правому боку. |
.text-center | Содержимое сайта располагается по центру веб-страницы. |
.text-justify | Выравнивание производится по ширине контейнера или блока. |
.text-nowrap | Все объекты сервиса распределяются без отступов. |
Для сравнения работы названных классов выполните пример.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 | <!DOCTYPE html> <html lang="en"> <head> <title>Bootstrap Example</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script> <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script> <style> p{ color: blue; font-size: 27px;} </style> </head> <body> <div> <p>Абрикосы</p> <p>Мандарины</p> <p>Апельсины</p> <p>Арбузы</p> <p>Персики</p> </div> </body> </html> |
<!DOCTYPE html> <html lang=»en»> <head> <title>Bootstrap Example</title> <meta charset=»utf-8″> <meta name=»viewport» content=»width=device-width, initial-scale=1″> <link rel=»stylesheet» href=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css»> <script src=»https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js»></script> <script src=»https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js»></script> <style> p{ color: blue; font-size: 27px;} </style> </head> <body> <div> <p>Абрикосы</p> <p>Мандарины</p> <p>Апельсины</p> <p>Арбузы</p> <p>Персики</p> </div> </body> </html>
Также существуют и другие элементы для описываемого вида выравнивания. Это pull-left и pull-right. Их работу можно сравнить со свойством float в каскадных таблицах стилей css.
Помимо этого, можно воспользоваться знакомой вам системой сеток. Эта технология очень гибкая и востребованная. Так что думаю вы уже знакомы с ней (если нет, то можете прочитать соответствующие статьи на моем блоге). Используя ее, у разработчика появляется возможность без лишних усилий располагать текст, видео, img внутри колонок с любой стороны.
Вертикальное центрирование
Реализация такого вида выравнивая выполняется несколько сложнее, чем предыдущего, так как ни в языке html, ни в Бутстрапе нет готовых встроенных механизмов. Поэтому девелоперы используют персональные решения проблемы. Однако на сегодняшний день существует несколько наиболее популярных вариантов, которые мы с вами и обсудим.
Grid System и padding
Начну с очевидного – Grid System и указание внутренних отступов. Это наиболее простой и легкий способ решения вертикального центрирования информации. Таким образом выравнивать можно предложения, видео и фото. Для лучшего понимания проанализируйте пример. В нем я создал блок посреди страницы и выровнял его содержимое.
1 2 3 4 5 6 7 8 | <div> <div> <div> <h3 >Третье чудо света!</h3> <img src="http://www.votpusk.ru/story/edit/foto/large/32086.jpg" alt="Photo"> </div> </div> </div> |
<div> <div> <div> <h3 >Третье чудо света!</h3> <img src=»http://www.votpusk.ru/story/edit/foto/large/32086.jpg» alt=»Photo»> </div> </div> </div>
А теперь добавьте в хедере документа описание стилей css:
<style>
.main {
background-color: #A52A2A;
padding: 35px;
}
</style>
Табличное представление
Второй популярный вариант центрирования по вертикали – это использование табличных представлений. Только не думайте, что я предлагаю вам сейчас создать простую таблицу и внести в нее информацию! Данный механизм достигается при помощи свойств стилевых таблиц.
Для этого вам нужно родительскому элементу прописать тип отображения display: table. А дочерние объекты поместить в ячейки этой таблицы, т.е. указать им значение одноименного свойства равным table- cell. И теперь после проделанных махинаций появляется возможность использовать такой параметр, как vertical-align. Пропишите его вместе со значением «middle».
Итак, код внутри тега <body> будет выглядеть следующим образом:
1 2 3 4 5 6 | <div> <div> <h3 >Третье чудо света!</h3> <p><img src="http://www.votpusk.ru/story/edit/foto/large/32086.jpg" alt="Photo"></p> </div> </div> |
<div> <div> <h3 >Третье чудо света!</h3> <p><img src=»http://www.votpusk.ru/story/edit/foto/large/32086.jpg» alt=»Photo»></p> </div> </div>
А для стилевого оформления укажите:
1 2 3 4 5 6 7 8 9 10 11 12 13 | <style> .parent { height: 560px; background-color: #A52A2A; width:100%; display: table; } .child { display: table-cell; vertical-align: middle; } img { width: 690px; height: auto;} </style> |
<style> .parent { height: 560px; background-color: #A52A2A; width:100%; display: table; } .child { display: table-cell; vertical-align: middle; } img { width: 690px; height: auto;} </style>
Редактирование отображения навигации
И напоследок, как и обещал, разберем, как перемещать панель меню.
Для структурированного размещения навигационной панели в основном используется, не поверите, опять система сеток. Если вам нужно, чтобы меню располагалось в шапке сайта, то и в коде этот элемент располагается первым.
Однако бывают такие ситуации, когда вкладки меню находятся под, к примеру, баннером. Для этого изначально создают разметку рекламы, а после вставляют код навигации. Таким образом, вы можете разместить Navbar в любом месте веб-страницы.
Другой вариант – использование внешних (margin) и внутренних (padding) отступов.
Однако есть и встроенные классы выравнивания описываемого объекта. Это .navbar-fixed-top и .navbar-fixed-bottom, которые закрепляют навигационный блок сверху или снизу страницы соответственно. А также есть класс .navbar-right, который выравнивает пункты меню по правой стороне. Напомню, что по умолчанию они размещаются слева.
Спасибо за ваше внимание. Если вам понравилась публикация, то подписывайтесь на обновления моего блога и рассказывайте о нем друзьям. Пока-пока!
С уважением, Роман Чуешов
Загрузка…Прочитано: 648 раз
romanchueshov.ru
Навигационная панель. Компоненты · Bootstrap
Документация и примеры для мощного и отзывчивого навигационного заголовка Bootstrap и навигационной панели. Включает поддержку брендинга, навигации и прочего, включая поддержку нашего плагина для сворачивания.
Как это работает
Вот что вам надо знать перед использованием навбара:
- Навбары требуют «обертки» из классов
.navbar
и.navbar-expand{-sm|-md|-lg|-xl}
для отзывчивости при «складывании»и классы , а также классы цветовых схем. - Навбары и их содержимое по умолчанию занимают 100% ширины. Используйте опциональные контейнеры для ограничения их горизонтальной ширины.
- Используйте наши классы отступов и «флекс» для контроля над пространством и выравниванием внутри навбаров.
- Навбары отзывчивы по умолчанию, но вы можете легко изменить это. Отзывчивое поведение зависит от нашего «плагина свертывания» JavaScript.
- Навбары скрыты по умолчанию при печати. Сделайте их печатаемыми, добавив класс
.d-print
в.navbar
. Смотри класс отображения. - Придайте им доступность использованием элемента
<nav>
, или, если используется менее специфический элемент – например<div>
: добавьтеrole="navigation"
в каждый навбар для придания ему большей доступности для пользователей вспомогательных технологий.
Далее вы увидите примеры и список поддерживаемых под-компонентов.
Поддерживаемые типы содержимого
В навбарах присутствуют встроенная поддержка многих суб-компонентов. Выбирайте нужный:
.navbar-brand
для названия вашей компании, продукта или имени проекта..navbar-nav
для навигации полной высоты (включая выпадающие элементы)..navbar-toggler
для использования с нашим JS-«плагином свертывания» и других изменяющихся состояний навигации..form-inline
для любых органов контроля форм и действий с ними..navbar-text
для добавления вертикально центрированных строк текста..collapse.navbar-collapse
для группирования и скрытия содержимого навбара на определенном брейкпойнте родителя.
Вот пример всех суб-компонентов, которые включены в отзывчивый светлый навбар с автоматическим сворачиванием на брейкпойнте lg
(большой).
<nav>
<a href="#">Navbar</a>
<button type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" role="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</a>
<div aria-labelledby="navbarDropdown">
<a href="#">Action</a>
<a href="#">Another action</a>
<div></div>
<a href="#">Something else here</a>
</div>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
<form>
<input type="search" placeholder="Search" aria-label="Search">
<button type="submit">Search</button>
</form>
</div>
</nav>
В этом примере использованы классы цвета bg-light
и спейсинга my-2
, my-lg-0
, mr-sm-0
, my-sm-0
.
Бренд
.navbar-brand
можно применять к большинству элементов, но лучше всего – к ссылке, т.к. некоторые элементы могут потребовать классы или стили.
<!-- As a link -->
<nav>
<a href="#">Navbar</a>
</nav>
<!-- As a heading -->
<nav>
<span>Navbar</span>
</nav>
Добавление изображений к .navbar-brand
почти всегда потребует дополнительной стилизации CSS и классов.
<!-- Just an image -->
<nav>
<a href="#">
<img src="/docs/4.3.1/assets/brand/bootstrap-solid.svg" alt="">
</a>
</nav>
<!-- Image and text -->
<nav>
<a href="#">
<img src="/docs/4.3.1/assets/brand/bootstrap-solid.svg" alt="">
Bootstrap
</a>
</nav>
Навбар
Ссылки в навигации навбара сделаны на параметрах класса .nav
, с их собственными классами-модификаторами; и требуют использования классов тогглера для правильного «отзывчивого» поведения. Навигация в навбарах также займет максимально возможное количество горизонтального места, для правильного выравнивания элементов навбара.
Активные состояния – с классом .active
– нужны для индикации возможности применения текущей страницы напрямую к .nav-link
или их непосредственному «родителю» .nav-item
.
<nav>
<a href="#">Navbar</a>
<button type="button" data-toggle="collapse" data-target="#navbarNav" aria-controls="navbarNav" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Features</a>
</li>
<li>
<a href="#">Pricing</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
</div>
</nav>
И т.к. мы используем классы в наших навбарах, вы можете избегать «списочного» подхода к разметке, если вам надо.
<nav>
<a href="#">Navbar</a>
<button type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup" aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<div>
<a href="#">Home <span>(current)</span></a>
<a href="#">Features</a>
<a href="#">Pricing</a>
<a href="#">Disabled</a>
</div>
</div>
</nav>
Выпадающие меню требуют оборачивающего элемента для позиционирования, так что удостоверьтесь в использовании раздельных и вложенных элементов для .nav-item
и .nav-link
, как в примере ниже.
<nav>
<a href="#">Navbar</a>
<button type="button" data-toggle="collapse" data-target="#navbarNavDropdown" aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Features</a>
</li>
<li>
<a href="#">Pricing</a>
</li>
<li>
<a href="#" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown link
</a>
<div aria-labelledby="navbarDropdownMenuLink">
<a href="#">Action</a>
<a href="#">Another action</a>
<a href="#">Something else here</a>
</div>
</li>
</ul>
</div>
</nav>
Формы
Размещайте внутри навбара различные элементы контроля форм и компоненты, добавив в них класс .form-inline
.
<nav>
<form>
<input type="search" placeholder="Search" aria-label="Search">
<button type="submit">Search</button>
</form>
</nav>
Непосредственные дочерние элементы в .navbar
используют гибкую компоновку и по умолчанию имеют значение justify-content: between
. Используйте дополнительные гибкие утилиты, необходимые для настройки их поведения.
<nav>
<a>Navbar</a>
<form>
<input type="search" placeholder="Search" aria-label="Search">
<button type="submit">Search</button>
</form>
</nav>
Работают и формы ввода, также:
<nav>
<form>
<div>
<div>
<span>@</span>
</div>
<input type="text" placeholder="Username" aria-label="Username" aria-describedby="basic-addon1">
</div>
</form>
</nav>
Разные кнопки поддерживаются как часть этих форм в навбарах. Это также хорошее напоминание о том, что утилиты вертикального выравнивания можно использовать для выравнивания элементов различных размеров.
Main button Smaller button
<nav>
<form>
<button type="button">Main button</button>
<button type="button">Smaller button</button>
</form>
</nav>
Текст
Благодаря классу .navbar-text
навбары могут содержать «крупицы» текста. Этот класс придает строкам текста вертикальное выравнивание и горизонтальный спейсинг.
Navbar text with an inline element
<nav>
<span>
Navbar text with an inline element
</span>
</nav>
Смешивайте и добивайтесь необходимого соответствия с другими компонентами и утилитами, как вам надо.
<nav>
<a href="#">Navbar w/ text</a>
<button type="button" data-toggle="collapse" data-target="#navbarText" aria-controls="navbarText" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Features</a>
</li>
<li>
<a href="#">Pricing</a>
</li>
</ul>
<span>
Navbar text with an inline element
</span>
</div>
</nav>
Цветовые схемы
Настройка оформления навбаров в BS4 стала столь легкой благодаря сочетанию классов оформления и утилит background-color
. Выбирайте .navbar-light
для навбара со светлым фоном, или .navbar-dark
для навбара с темным фоном. Далее настраивайте их классами .bg-*
.
<nav>
<!-- Navbar content -->
</nav>
<nav>
<!-- Navbar content -->
</nav>
<nav>
<!-- Navbar content -->
</nav>
Контейнеры
Хотя это и не требуется, вы можете обернуть навбар в .container
для центрирования навбара на странице или добавить один навбар в .container
лишь для центрирования содержимого навбара с фиксированной позицией “top”.
<div>
<nav>
<a href="#">Navbar</a>
</nav>
</div>
Когда контейнер внутри вашего навбара, его горизонтальный паддинг удаляется на брейкпойнтах, меньших чем заданный вами .navbar-expand{-sm|-md|-lg|-xl}
. Это гарантирует, что не произойдет ненужного удвоения паддинга на меньших вьюпортах, когда ваш навбар свернут.
<nav>
<div>
<a href="#">Navbar</a>
</div>
</nav>
Размещение
Используйте наши утилиты позиционирования для размещения навбаров в нестатичных позициях. Выбирайте из фиксированного наверху, внизу или «приклеивающегося» (прокручивается со страницей, пока не достигнет верха, и остается там). Фиксированные навбары используют position: fixed
, поэтому они «исключены» из нормального строения DOM и могут потребовать добавления CSS (например, padding-top
в <body>
).
Также обратите внимание, что .sticky-top
использует position: sticky
, которая не поддерживается полностью в каждом браузере.
<nav>
<a href="#">Default</a>
</nav>
<nav>
<a href="#">Fixed top</a>
</nav>
<nav>
<a href="#">Fixed bottom</a>
</nav>
<nav>
<a href="#">Sticky top</a>
</nav>
Отзывчивое поведение
Навбары могут использовать классы .navbar-toggler
, .navbar-collapse
и .navbar-expand{-sm|-md|-lg|-xl}
для изменения, когда их содержимое «схлапывается» по нажатию кнопки. В сочетании с другими классами вы можете легко выбрать, когда показать или скрыть некие элементы.
Для навбаров, которые не скрываются, добавьте в навбар класс .navbar-expand
. Для навбаров, которые всегда скрываются, не добавляйте его.
Тогглер (кнопка разворачивания меню)
Тогглеры по умолчанию выровнены по левому краю, но если они идут за дочерними элементами как .navbar-brand
– они автоматически выровняются по правому краю. Зеркальное отражение вашей разметки переставит и тогглер.
Без показанного элемента класса .navbar-brand
, на самых маленьких брейкпойнтах:
<nav>
<button type="button" data-toggle="collapse" data-target="#navbarTogglerDemo01" aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<a href="#">Hidden brand</a>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form>
<input type="search" placeholder="Search" aria-label="Search">
<button type="submit">Search</button>
</form>
</div>
</nav>
С «брендом», показанный слева, и тогглером — справа:
<nav>
<a href="#">Navbar</a>
<button type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02" aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form>
<input type="search" placeholder="Search">
<button type="submit">Search</button>
</form>
</div>
</nav>
С тогглером слева и «брендом» справа:
<nav>
<button type="button" data-toggle="collapse" data-target="#navbarTogglerDemo03" aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
<a href="#">Navbar</a>
<div>
<ul>
<li>
<a href="#">Home <span>(current)</span></a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
<form>
<input type="search" placeholder="Search" aria-label="Search">
<button type="submit">Search</button>
</form>
</div>
</nav>
Внешнее содержимое
Иногда надо использовать плагин коллапса для запуска скрытого содержимого на странице. Т.к. наш плагин работает через id
и data-target
– вам будет легко это сделать!
Collapsed content
Toggleable via the navbar brand.<div>
<div>
<div>
<h5>Collapsed content</h5>
<span>Toggleable via the navbar brand.</span>
</div>
</div>
<nav>
<button type="button" data-toggle="collapse" data-target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false" aria-label="Toggle navigation">
<span></span>
</button>
</nav>
</div>
bootstrap-4.ru
Навигация. Компоненты · Bootstrap
Документация и примеры использования навигационных компонентов Bootstrap.
Основы
Навигация в Bootstrap имеет общую для подобного типа элементов разметку, от базового класса .nav
до активных и «выключенных» состояний. Заменяйте классы-модификаторы для переключения между стилями.
Базовый компонент класса .nav
создан на флексбоксе, что обеспечивает хорошую базу для создания всех типов навигационных компонентов. В него входят несколько стилей, которые «перебивают» остальные (для работы со списками), добавлены паддинги ссылок для увеличения «зоны клика», и базовые стили «выключенных» состояний.
В базовый компонент класса .nav
не включено какое-либо состояние .active
. Следующие примеры включают класс, главным образом для демонстрации, что данный конкретный класс не подключает какие-либо специальные стили.
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Классы используются везде, так что ваша разметка может быть сверх-гибкой. Используйте <ul>
как показано выше, или создайте свои; скажем, на основе элемента <nav>
. Из-за того, что .nav
использует display: flex
, ссылки в навигационной панели ведут себя, как если бы были элементами такой же панели, но с меньшим количеством кода.
<nav>
<a href="#">Active</a>
<a href="#">Link</a>
<a href="#">Link</a>
<a href="#">Disabled</a>
</nav>
Доступные стили
Изменяйте стиль компонентов .nav
классами-модификаторами и обычными классами. Смешивайте их и настраивайте как надо, или создайте свои.
Горизонтальное выравнивание
Изменяйте горизонтальное выравнивание вашего навигационного элемента с утилитами флексбокса. По умолчанию навигационные панели выровнены по левому краю, но вы можете легко это изменить на центр или правый край.
Центрировано классом .justify-content-center
:
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
По правому краю классом .justify-content-end
:
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Вертикально
Располагайте вашу навигацию по вертикали, изменяя направление элемента flex классом .flex-column
. Надо расположить ее вертикально лишь на некоторых брейкпойнтах? Используйте отзывчивые версии (например .flex-sm-column
).
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Как всегда – вертикальная навигация доступна и без <ul>
.
<nav>
<a href="#">Active</a>
<a href="#">Link</a>
<a href="#">Link</a>
<a href="#">Disabled</a>
</nav>
Вкладки
«Забирает» базовый элемент навигации с верха и добавляет класс .nav-tabs
для создания «вкладочного» интерфейса, Используйте их для создания зоны с поддержкой содержимого в виде вкладок с плагином JavaScript.
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Подушки
На том же коде HTML, но с используйте класс .nav-pills
:
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Наполняйте и выравнивайте по центру
Заставьте содержимое вашего .nav
расширяться на полную доступную ширину с помощью одного-двух классов-модификаторов. Для пропорционального заполнения всего доступного пространства элементами класса .nav-item
, используйте класс nav-fill. Заметьте, что всё горизонтальное место занято, но не каждый элемент навигационной панели имеет одинаковую ширину.
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Much longer nav link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
Используя навигацию на основе <nav>
, удостоверьтесь, что включаете .nav-item
в ссылки.
<nav>
<a href="#">Active</a>
<a href="#">Much longer nav link</a>
<a href="#">Link</a>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</nav>
Для создания элементов равной ширины используйте класс .nav-justified
. Всё горизонтальное пространство будет занято ссылками навигационной панели, но, в отличие от примера с .nav-fill
выше, каждый элемент навигационной панели будет одинаковой ширины.
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a href="#">Much longer nav link</a>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
По аналогии с примером с .nav-fill
, где использована навигация на основе <nav>
, удостоверьтесь, что включили класс .nav-item
в ссылки.
<nav>
<a href="#">Active</a>
<a href="#">Link</a>
<a href="#">Link</a>
<a href="#">Disabled</a>
</nav>
Работа с гибкими классами
Если вам нужна «отзывчивая» навигационная панель, рассмотрите использование классов флексбокса. Более подробные в спецификации, они предлагают более широкую настройку по отзывчивым брейкпойнтам. В примере ниже наша навигационная панель будет расположена по вертикали на самом маленьком брейкпойнте, затем обретет горизонтальную разметку, которая, начиная с большего брейкпойнта, займет всю доступную ширину.
<nav>
<a href="#">Active</a>
<a href="#">Longer nav link</a>
<a href="#">Link</a>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</nav>
Доступность
Если вы пользуетесь навигационными элементами для создания навигационной панели, добавьте role="navigation"
в наиболее подходящий для этого родительский контейнер <ul>
, или оберните элементом <nav>
всю навигацию. Не добавляйте атрибут role
в сам <ul>
, т.к. это может помешать вспомогательным технологиям распознать этот элемент как список.
Заметьте, что навигационные панели, даже если они стилизованы как вкладки классами .nav-tabs
, не должны содержать role="tablist"
, role="tab"
или role="tabpanel"
. Это атрибуты подходят лишь для динамических интерфейсов вкладок, как описано в WAI ARIA Authoring Practices. Смотрите, например, про поведение JavaScript c динамическими интерфейсами вкладок в этой секции.
Выпадающие элементы
Добавляйте меню с выпадающими элементами, используя совсем немного HTML и плагин выпадающих элементов JavaScript.
Вкладки с выпадающими элементами
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div>
<a href="#">Action</a>
<a href="#">Another action</a>
<a href="#">Something else here</a>
<div></div>
<a href="#">Separated link</a>
</div>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#">Disabled</a>
</li>
</ul>
Подушки с выпадающими элементами
<ul>
<li>
<a href="#">Active</a>
</li>
<li>
<a data-toggle="dropdown" href="#" role="button" aria-haspopup="true" aria-expanded="false">Dropdown</a>
<div>
<a href="#">Action</a>
<a href="#">Another action</a>
<a href="#">Something else here</a>
<div></div>
<a href="#">Separated link</a>
</div>
</li>
<li>
<a href="#">Link</a>
</li>
<li>
<a href="#" tabindex="-1" aria-disabled="true">Disabled</a>
</li>
</ul>
Поведение JavaScript
Используйте плагин JavaScript вкладок — подключите его индивидуально или через компилированный bootstrap.js
— для расширения наших навигационных вкладок и «подушек» и создания вкладочных панелей локального содержимого, или даже выпадающие меню.
Если вы подключаете наши файлы JS, вам потребуется util.js
.
Интерфейсы динамически переключаемых вкладок, как описано в WAI ARIA Authoring Practices, требуют атрибутов role="tablist"
, role="tab"
, role="tabpanel"
и дополнительного атрибута aria-
для возможности передачи их структуры, функциональности и текущего состояния юзерам вспомогательных технологий (таких как экранные читалки).
Заметьте, что интерфейсы динамически переключаемых вкладок не должны содержать выпадающие меню, т.к. это вызовет проблемы с usability и доступностью. С точки зрения удобства для пользователя тот факт, что триггер-элемент текущей отображаемой вкладки не виден немедленно (т.к. он находится внутри закрытого выпадающего меню), может вызвать неудобство. С точки зрения доступности пока еще не существует проверенного способа обозначить и передать такой тип элементов в паттерне стандарте WAI ARIA, что означает, что этот тип элементов нельзя сделать доступным для юзеров вспомогательных технологий.
Raw denim you probably haven’t heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.
Food truck fixie locavore, accusamus mcsweeney’s marfa nulla single-origin coffee squid. Exercitation +1 labore velit, blog sartorial PBR leggings next level wes anderson artisan four loko farm-to-table craft beer twee. Qui photo booth letterpress, commodo enim craft beer mlkshk aliquip jean shorts ullamco ad vinyl cillum PBR. Homo nostrud organic, assumenda labore aesthetic magna delectus mollit. Keytar helvetica VHS salvia yr, vero magna velit sapiente labore stumptown. Vegan fanny pack odio cillum wes anderson 8-bit, sustainable jean shorts beard ut DIY ethical culpa terry richardson biodiesel. Art party scenester stumptown, tumblr butcher vero sint qui sapiente accusamus tattooed echo park.
<ul role="tablist">
<li>
<a data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
</li>
<li>
<a data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
</li>
<li>
<a data-toggle="tab" href="#contact" role="tab" aria-controls="contact" aria-selected="false">Contact</a>
</li>
</ul>
<div>
<div role="tabpanel" aria-labelledby="home-tab">...</div>
<div role="tabpanel" aria-labelledby="profile-tab">...</div>
<div role="tabpanel" aria-labelledby="contact-tab">...</div>
</div>
Если вам необходимо, то можно работать с разметкой на основе <ul>
, как показано выше, или с любой произвольной «рулоной собственной» разметкой. Обратите внимание, что если вы используете <nav>
, вам не следует добавлять к ней role="tablist"
, так как это переопределит собственную роль элемента в качестве ориентира навигации. Вместо этого переключитесь на альтернативный элемент (в приведенном ниже примере, простой <div>
) и оберните вокруг него <nav>
.
Et et consectetur ipsum labore excepteur est proident excepteur ad velit occaecat qui minim occaecat veniam. Fugiat veniam incididunt anim aliqua enim pariatur veniam sunt est aute sit dolor anim. Velit non irure adipisicing aliqua ullamco irure incididunt irure non esse consectetur nostrud minim non minim occaecat. Amet duis do nisi duis veniam non est eiusmod tempor incididunt tempor dolor ipsum in qui sit. Exercitation mollit sit culpa nisi culpa non adipisicing reprehenderit do dolore. Duis reprehenderit occaecat anim ullamco ad duis occaecat ex.
Nulla est ullamco ut irure incididunt nulla Lorem Lorem minim irure officia enim reprehenderit. Magna duis labore cillum sint adipisicing exercitation ipsum. Nostrud ut anim non exercitation velit laboris fugiat cupidatat. Commodo esse dolore fugiat sint velit ullamco magna consequat voluptate minim amet aliquip ipsum aute laboris nisi. Labore labore veniam irure irure ipsum pariatur mollit magna in cupidatat dolore magna irure esse tempor ad mollit. Dolore commodo nulla minim amet ipsum officia consectetur amet ullamco voluptate nisi commodo ea sit eu.
<nav>
<div role="tablist">
<a data-toggle="tab" href="#nav-home" role="tab" aria-controls="nav-home" aria-selected="true">Home</a>
<a data-toggle="tab" href="#nav-profile" role="tab" aria-controls="nav-profile" aria-selected="false">Profile</a>
<a data-toggle="tab" href="#nav-contact" role="tab" aria-controls="nav-contact" aria-selected="false">Contact</a>
</div>
</nav>
<div>
<div role="tabpanel" aria-labelledby="nav-home-tab">...</div>
<div role="tabpanel" aria-labelledby="nav-profile-tab">...</div>
<div role="tabpanel" aria-labelledby="nav-contact-tab">...</div>
</div>
Плагин вкладок работает также с «подушками».
Consequat occaecat ullamco amet non eiusmod nostrud dolore irure incididunt est duis anim sunt officia. Fugiat velit proident aliquip nisi incididunt nostrud exercitation proident est nisi. Irure magna elit commodo anim ex veniam culpa eiusmod id nostrud sit cupidatat in veniam ad. Eiusmod consequat eu adipisicing minim anim aliquip cupidatat culpa excepteur quis. Occaecat sit eu exercitation irure Lorem incididunt nostrud.
Ad pariatur nostrud pariatur exercitation ipsum ipsum culpa mollit commodo mollit ex. Aute sunt incididunt amet commodo est sint nisi deserunt pariatur do. Aliquip ex eiusmod voluptate exercitation cillum id incididunt elit sunt. Qui minim sit magna Lorem id et dolore velit Lorem amet exercitation duis deserunt. Anim id labore elit adipisicing ut in id occaecat pariatur ut ullamco ea tempor duis.
<ul role="tablist">
<li>
<a data-toggle="pill" href="#pills-home" role="tab" aria-controls="pills-home" aria-selected="true">Home</a>
</li>
<li>
<a data-toggle="pill" href="#pills-profile" role="tab" aria-controls="pills-profile" aria-selected="false">Profile</a>
</li>
<li>
<a data-toggle="pill" href="#pills-contact" role="tab" aria-controls="pills-contact" aria-selected="false">Contact</a>
</li>
</ul>
<div>
<div role="tabpanel" aria-labelledby="pills-home-tab">...</div>
<div role="tabpanel" aria-labelledby="pills-profile-tab">...</div>
<div role="tabpanel" aria-labelledby="pills-contact-tab">...</div>
</div>
И с вертикальными «подушками».
Cillum ad ut irure tempor velit nostrud occaecat ullamco aliqua anim Lorem sint. Veniam sint duis incididunt do esse magna mollit excepteur laborum qui. Id id reprehenderit sit est eu aliqua occaecat quis et velit excepteur laborum mollit dolore eiusmod. Ipsum dolor in occaecat commodo et voluptate minim reprehenderit mollit pariatur. Deserunt non laborum enim et cillum eu deserunt excepteur ea incididunt minim occaecat.
Culpa dolor voluptate do laboris laboris irure reprehenderit id incididunt duis pariatur mollit aute magna pariatur consectetur. Eu veniam duis non ut dolor deserunt commodo et minim in quis laboris ipsum velit id veniam. Quis ut consectetur adipisicing officia excepteur non sit. Ut et elit aliquip labore Lorem enim eu. Ullamco mollit occaecat dolore ipsum id officia mollit qui esse anim eiusmod do sint minim consectetur qui.
Fugiat id quis dolor culpa eiusmod anim velit excepteur proident dolor aute qui magna. Ad proident laboris ullamco esse anim Lorem Lorem veniam quis Lorem irure occaecat velit nostrud magna nulla. Velit et et proident Lorem do ea tempor officia dolor. Reprehenderit Lorem aliquip labore est magna commodo est ea veniam consectetur.
Eu dolore ea ullamco dolore Lorem id cupidatat excepteur reprehenderit consectetur elit id dolor proident in cupidatat officia. Voluptate excepteur commodo labore nisi cillum duis aliqua do. Aliqua amet qui mollit consectetur nulla mollit velit aliqua veniam nisi id do Lorem deserunt amet. Culpa ullamco sit adipisicing labore officia magna elit nisi in aute tempor commodo eiusmod.
<div>
<div>
<div role="tablist" aria-orientation="vertical">
<a data-toggle="pill" href="#v-pills-home" role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
<a data-toggle="pill" href="#v-pills-profile" role="tab" aria-controls="v-pills-profile" aria-selected="false">Profile</a>
<a data-toggle="pill" href="#v-pills-messages" role="tab" aria-controls="v-pills-messages" aria-selected="false">Messages</a>
<a data-toggle="pill" href="#v-pills-settings" role="tab" aria-controls="v-pills-settings" aria-selected="false">Settings</a>
</div>
</div>
<div>
<div>
<div role="tabpanel" aria-labelledby="v-pills-home-tab">...</div>
<div role="tabpanel" aria-labelledby="v-pills-profile-tab">...</div>
<div role="tabpanel" aria-labelledby="v-pills-messages-tab">...</div>
<div role="tabpanel" aria-labelledby="v-pills-settings-tab">...</div>
</div>
</div>
</div>
Используя атрибуты
Вы можете задействовать навигацию по вкладке или «подушке» без JavaScript, а просто добавив data-toggle="tab"
или data-toggle="pill"
к элементу. Используйте эти атрибуты в .nav-tabs
или .nav-pills
.
<!-- Nav tabs -->
<ul role="tablist">
<li>
<a data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
</li>
<li>
<a data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
</li>
<li>
<a data-toggle="tab" href="#messages" role="tab" aria-controls="messages" aria-selected="false">Messages</a>
</li>
<li>
<a data-toggle="tab" href="#settings" role="tab" aria-controls="settings" aria-selected="false">Settings</a>
</li>
</ul>
<!-- Tab panes -->
<div>
<div role="tabpanel" aria-labelledby="home-tab">...</div>
<div role="tabpanel" aria-labelledby="profile-tab">...</div>
<div role="tabpanel" aria-labelledby="messages-tab">...</div>
<div role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
Через JavaScript
Задействуйте переключаемые вкладки через JavaScript (каждая вкладка задействуется индивидуально):
$('#myTab a').on('click', function (e) {
e.preventDefault()
$(this).tab('show')
})
Их можно активировать несколькими методами:
$('#myTab a[href="#profile"]').tab('show') // Select tab by name
$('#myTab li:first-child a').tab('show') // Select first tab
$('#myTab li:last-child a').tab('show') // Select last tab
$('#myTab li:nth-child(3) a').tab('show') // Select third tab
Эффект появления
Чтобы вкладки постепенно появлялись, добавьте класс .fade
в каждый элемент класса .tab-pane
. Первая вкладка .tab-pane
также должна иметь класс .show
, чтобы первоначальный контент был видимым.
<div>
<div role="tabpanel" aria-labelledby="home-tab">...</div>
<div role="tabpanel" aria-labelledby="profile-tab">...</div>
<div role="tabpanel" aria-labelledby="messages-tab">...</div>
<div role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
Методы
Асинхронные методы и переходы
Все методы API асинхронны и запускают переход. Они возвращаются функции, вызвавшей их, с началом перехода, но до его конца. Плюс, вызов метода к компоненту, выполняющему переход, будет проигнорирован.
Смотрите документацию.
$().tab
Активирует вкладку и контейнер содержимого. Вкладка должна иметь data-target
или href
, «нацеленные» на контейнер-узел в DOM.
<ul role="tablist">
<li>
<a data-toggle="tab" href="#home" role="tab" aria-controls="home" aria-selected="true">Home</a>
</li>
<li>
<a data-toggle="tab" href="#profile" role="tab" aria-controls="profile" aria-selected="false">Profile</a>
</li>
<li>
<a data-toggle="tab" href="#messages" role="tab" aria-controls="messages" aria-selected="false">Messages</a>
</li>
<li>
<a data-toggle="tab" href="#settings" role="tab" aria-controls="settings" aria-selected="false">Settings</a>
</li>
</ul>
<div>
<div role="tabpanel" aria-labelledby="home-tab">...</div>
<div role="tabpanel" aria-labelledby="profile-tab">...</div>
<div role="tabpanel" aria-labelledby="messages-tab">...</div>
<div role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
<script>
$(function () {
$('#myTab li:last-child a').tab('show')
})
</script>
.tab(‘show’)
Выбирает данную вкладку и показывает связанную с ней «подушку». Любая другая вкладка, которая была выбрана до этого, становится «невыбранной» и ее «подушка» прячется. Возвращается к функции-вызову до того, как модальный элемент показан или скрыт (т.е. до того, как произойдет событие shown.bs.tab
).
$('#someTab').tab('show')
.tab(‘dispose’)
Уничтожает вкладку элемента.
События
При показе новой вкладки события запускаются в такой порядке:
hide.bs.tab
(на текущей активной вкладке)show.bs.tab
(на той, которая вот-вот покажется)hidden.bs.tab
(на предыдущей активной вкладке, как для событияhide.bs.tab
)shown.bs.tab
(на вкладке, только что ставшей активной и только что показанной, такое же как для событияshow.bs.tab
)
Если ни одна вкладка не была активна, события hide.bs.tab
и hidden.bs.tab
не произойдут.
Тип события | Описание |
---|---|
show.bs.tab | Это событие запускается при показе вкладки, но до того, как новая вкладка показана. Используйте event.target и event.relatedTarget для «нацеливания» на активную вкладку и предыдущую активную вкладку (если доступно) соответственно. |
shown.bs.tab | Это событие запускается при показе вкладки после того, как новая вкладка показана. Используйте event.target и event.relatedTarget для «нацеливания» на активную вкладку и предыдущую активную вкладку (если доступно) соответственно. |
hide.bs.tab | Это событие запускается, когда новая вкладка вот-вот покажется (и т.о. – предыдущая активная вкладка вот-вот скроется). Используйте event.target и event.relatedTarget для «нацеливания» на текущую активную вкладку и следующую активную вкладку соответственно. |
hidden.bs.tab | Это событие запускается, когда новая вкладка показана (и т.о. предыдущая активная вкладка скрыта). Используйте event.target и event.relatedTarget для «нацеливания» на предыдущую активную вкладку и новую активную вкладку соответственно. |
$('a[data-toggle="tab"]').on('shown.bs.tab', function (e) {
e.target // newly activated tab
e.relatedTarget // previous active tab
})
bootstrap-4.ru