Уроки по фреймворку Bootstrap 4
Автор учебного курса: Саакян Артак Арамович, студент гр. ИТк-401 ФГАОУ ВО «РГППУ.
Скачать Notepad++ Portable
Скачать материалы к учебному курсу - папка kurs_bootstrap.zip (1 Мб)
Теория 3. Модальное окно и карусель (слайдер)
После прочтения темы перейдите к выполнению урока 4 и урока 5
Модальное окно
Модальное окно предназначено для отображения на веб-странице некоторого контента в формате всплывающего окна. Это окно визуально отображается над остальным содержимым страницы. При этом весь контент страницы кроме модального окна затемняется и делается не доступным для взаимодействия с ним (рисунок 1).
Модальное окно на веб-странице может применяться для решения большого круга задач. Например, он может использоваться для отображения регистрационной формы пользователю, изображения в увеличенном масштабе, какого-то важного события, произошедшего на сайте или чего-то другого.
Что нужно знать перед тем, как переходить к созданию модальных окон?
- Модальные окна построены с использованием HTML, CSS и JavaScript. Они визуально располагаются над всем остальным содержимым документа и убирают из него прокрутку. Теперь прокрутка работает не по <body>, а по содержимому модального окна.
- Нажатие на область страницы вне модального окна автоматически приведёт его к закрытию.
- Bootstrap позволяет отображать в некоторый момент времени только одно модальное окно. Вложенные модальные окна не поддерживаются, т.е. у вас на странице не могут быть открыты сразу несколько окон одновременно.
- Рекомендация к размещению разметки (HTML кода) модального окна. Позиционирование модального окна осуществляется через position: fixed. Этот способ позиционирования имеет некоторые особенности при отрисовке. Поэтому верстку модального окна желательно располагать, когда это возможно, непосредственно в элементе <body> или как можно ближе к нему по иерархии. Это действие позволит избежать влияния на него других элементов. Например, вы можете столкнутся с проблемами, если .modal поместите внутрь другого фиксированного элемента.
- Использование на мобильных устройствах. В некоторых старых версиях браузеров на мобильных устройствах (iOS и Android) имеется ошибка. Он связана с тем, что при прокручивании содержимого модального окна вверх или вниз, прокручивается также содержимое элемента <body>. Происходило это из-за того, что поддержка overflow: hidden на <body> в этих версиях браузеров была весьма ограниченной.
Модальному окну Bootstrap Вы не можете установить фокус элементу посредством добавления к нему HTML-атрибута autofocus, это добавит к нему только семантическую ценность.
$('#myModal').on('shown.bs.modal', function() { //#myInput - id элемента, которому необходимо установить фокус $('#myInput').focus(); })
Создание модального окна и управление модальным окном в Twitter Bootstrap 3 и 4 осуществляется с помощью классов CSS, атрибутов data- и методов JavaScript.
Начинается создание модального окна с его разметки.
Процесс проектирования структуры модального окна выполняется с помощью следующих строительных кирпичиков:
- • каркас - 3 блока div, имеющие классы .modal, .modal-dialog и .modal-content.
- • header (заголовок) - блок div, имеющий класс .modal-header.
- • body (основное содержимое) - блок div с классом .modal-body.
- • footer (футер) - блок div с классом .modal-footer (рисунок 2).
Из всех кирпичиков модального окна обязательными являются только каркас и блок div с классом .modal-body.
После этого переходят к реализации того как модальное окно должно вызываться. В большинстве случаев вызов модального окна обычно осуществляется при наступлении какого-то события, например, при нажатии кнопки на странице или через некоторое время после загрузки страницы. Осуществить вызов модального окна в Bootstrap можно либо с помощью атрибутов data-, либо с помощью JavaScript.
В качестве примера рассмотрим создание модального окна, имеющего заголовок (header), основное содержимое (body) и футер (footer) (рисунок 3).
<!-- Модальное окно --> <div class="modal fade" id="exampleModal" tabindex="-1" aria-labelledby="exampleModalLabel" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="exampleModalLabel">Заголовок модального окна</h5> <button type="button" class="close" data-dismiss="modal" aria-label="Close"> <span aria-hidden="true">×</span> </button> </div> <div class="modal-body"> <p>Здесь основной текст модального окна</p> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-dismiss="modal">Закрыть</button> <button type="button" class="btn btn-primary">Сохранить изменения</button> </div> </div> </div> </div>
В Bootstrap 4 вызов модального окна можно привязать к кнопке или ссылке вообще без написания кода на языке JavaScript. Осуществляется это с помощью атрибутов data-toggle и data-target. Первый атрибут должен содержать значение modal (data-toggle="modal"), которое будет говорить о том, что содержимое, которое будет вызвать этот элемент, является модальным окном. Второй параметр указывает на элемент (data-target="#myModal" или href="#myModal"), а точнее содержит селектор (идентификатор), с помощью которого выбирается контейнер div, который содержит HTML код модального окна (рисунок 4).
<!-- Кнопка-триггер модального окна --> <button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal"> Запустить демонстрацию модального окна </button>
Карусель (Слайдер)
Carousel (карусель) – это элемент интерфейса для демонстрации на сайте серии изображений (слайдов). Каждое изображение (слайд) демонстрируется обычно несколько секунд, пока не сменится следующим. Смена изображения (слайда) может осуществляться как автоматически через равные промежутки времени, так и вручную.
Слайд в Bootstrap карусели может быть представлен не только изображением, но и текстовым контентом. Кроме этого при создании слайда можно использовать разметку.
В Bootstrap компонент Carousel построен с помощью технологии CSS 3D Transforms и кода JavaScript.
Карусель в Bootstrap реализована с использованием Page Visibilty API. Это означает, что если браузер поддерживает этот API, то карусель не будет осуществлять автоматическую смену слайдов до тех пор, пока она не будет видна пользователю. Например, до тех пор, пока вкладка, содержащая карусель, будет находиться в не активном или свёрнутом состоянии.
Фреймворк Boostrap 4 не позволяет создавать вложенные карусели.
Карусель без элементов управления
Компонент Carousel автоматически не нормализует размеры изображений (слайдов). Таким образом, могут потребоваться дополнительные утилиты или стили, чтобы привести содержимое к необходимому размеру.
Класс active необходимо добавить к одному из слайдов. Если это не выполнить, то карусель не будет отображаться (рисунок 5).
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> </div> </div>
Атрибут data-ride="carousel" запускает автоматическую смену слайдов карусели после загрузки страницы. Если инициализация карусели выполняется с помощью JavaScript, то этот атрибут не нужно использовать.
Карусель с элементами управления
Карусель с элементами управления и (или) с индикаторами слайдов должна иметь id. А элементы управления и индикаторы слайдов должны иметь атрибут data-target (или href для ссылок), значение которого должно указывать на карусель (т.е. состоять из # и id).
HTML разметка карусели с элементами управления для перехода к предыдущему и следующему слайду (рисунок 6):
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel"> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> </div> <a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Предыдущий</span> </a> <a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Следующий</span> </a> </div>
Поведение кнопок «Предыдущий» и «Следующий» определяется в карусели с помощью атрибута data-slide.
Значение prev данного атрибута связывает с кнопкой определённые действия, с помощью которых она будет осуществлять смену текущего слайда на предыдущий. Значение next связывает с кнопкой соответственно другие действия, которые будут выполнять смену текущего слайда на следующий.
Карусель с индикаторами слайдов
К карусели с элементами управления, также можно ещё добавить индикаторы слайдов. (рисунок 7)
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li> <li data-target="#carouselExampleIndicators" data-slide-to="1"></li> <li data-target="#carouselExampleIndicators" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> </div> </div> <a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Предыдущий</span> </a> <a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Следующий</span> </a> </div>
Атрибут data-slide-to добавляет к карусели возможность дополнительной навигации по слайдам с помощью индикаторов. Атрибут data-slide-to в качестве значения содержит порядковый номер (индекс) слайда. Отсчёт слайдов в карусели ведётся с нуля. Если необходимо чтобы при клике на индикатор пользователь перешёл, на третий слайд, то к индикатору необходимо добавить атрибут data-slide-to со значением 2.
Добавление надписей к слайдам карусели
К слайдам можно добавить надписи. Осуществляется это посредством добавления к каждому слайду, некоторого элемента, например, div, с классом carousel-caption. При необходимости эти надписи можно с помощью классов display отображать на одних экранах и скрывать на других. (рисунок 8)
<div id="carouselExampleCaptions" class="carousel slide" data-ride="carousel"> <ol class="carousel-indicators"> <li data-target="#carouselExampleCaptions" data-slide-to="0" class="active"></li> <li data-target="#carouselExampleCaptions" data-slide-to="1"></li> <li data-target="#carouselExampleCaptions" data-slide-to="2"></li> </ol> <div class="carousel-inner"> <div class="carousel-item active"> <img src="..." class="d-block w-100" alt="..."> <div class="carousel-caption d-none d-md-block"> <h5>Метка первого слайда</h5> <p>Некоторый репрезентативный заполнитель для первого слайда.</p> </div> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> <div class="carousel-caption d-none d-md-block"> <h5>Метка второго слайда</h5> <p>Некоторый репрезентативный заполнитель для второго слайда.</p> </div> </div> <div class="carousel-item"> <img src="..." class="d-block w-100" alt="..."> <div class="carousel-caption d-none d-md-block"> <h5>Метка третьего слайда</h5> <p>Некоторый репрезентативный заполнитель для третьего слайда.</p> </div> </div> </div> <a class="carousel-control-prev" href="#carouselExampleCaptions" role="button" data-slide="prev"> <span class="carousel-control-prev-icon" aria-hidden="true"></span> <span class="sr-only">Предыдущий</span> </a> <a class="carousel-control-next" href="#carouselExampleCaptions" role="button" data-slide="next"> <span class="carousel-control-next-icon" aria-hidden="true"></span> <span class="sr-only">Следующий</span> </a> </div>
Контрольные вопросы
- Что такое модальное окно?
- Из чего построены модальные окна в Bootstrap?
- Что произойдет, если нажать за пределами модального окна?
- Из скольких блоков состоит модальное окно?
- Какой класс нужно использовать для шапки модального окна?
- Что такое карусель (слайдер)?
- Может ли быть слайдер текстовой информацией, а не изображением?
- Что произойдет, если нажать за пределами модального окна?
- На чем реализована Bootstrap карусель?
- Можно ли в Bootstrap 4 создать вложенные карусели?
После прочтения темы перейдите к выполнению урока 4 и урока 5