Узнаем Bootstrap 4 за 30 минут, создавая лендинг

Stas Bagretsov
12 min readApr 28, 2018

--

🥳 Подписывайтесь на мой Twitter! ↪️ @stassonmars — теперь там ещё больше из мира фронтенда, да и вообще поговорим. 🪀Подписывайтесь, скоро будет много нового и ещё больше интересного ✨

Есть много версий Bootstrap, но 4 пока что является самой последней. В этой статье будем делать сайт лендинг с использованием Bootstrap 4.

Перевод статьи Learn Bootstrap 4 in 30 minutes by building a landing page website

Что нужно знать?

Перед началом вам нужно убедиться в том, что вы владеете кое-какими умениями, для того, чтобы изучить и начать использовать такой фреймворк как Bootstrap:

Основы HTML

Простые знания CSS

И немного простого Jquery

Содержание

Мы заденем следующие темы, во время разработки сайта

Скачиваем и устанавливаем Bootstrap 4

Новый функционал в Bootstrap 4

Система сеток в Bootstrap

Панель навигации

Шапка

Секция информации

Секция портфолио

Секция блога

Карточки

Секция команды

Форма обратной связи

Шрифты

Эффекты скролла

Завершение и выводы

Скачиваем и устанавливаем Bootstrap 4

Есть три способа установки и внедрения Bootstrap 4 в ваш проект.

1. Использование npm

Вы можете установить Bootstrap 4 запустив команду npm install bootstrap

2. Использование CDN

Вставьте эту ссылку в ваш проект между тегами <head></head>

<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0/css/bootstrap.min.css" integrity="sha384-Gn5384xqQ1aoWXA+058RXPxPg6fy4IWvTNh0E263XmFcJlSAwiGgFAW/dAiS6JXm" crossorigin="anonymous">

3. Скачивание библиотеки Bootstrap 4 и ее локальное использование

Структура нашего проекта должна выглядеть так

Новый функционал в Bootstrap 4

Чего нового в Bootstrap 4? И в чем разница между Bootstrap 3 и 4?

Четвертая версия идет в поставке с некоторыми отличными функциями, которых нет в третьей. А именно:

Bootstrap 4 написан на Flexbox Grid, то есть на флексах, в то время как Bootstrap 3 был написан с использованием флоатов.

Если вы новичок во флексах, то вот подробное руководство об этом функционале.

Bootstrap 4 использует rem CSS единицы, в то время как Bootstrap 3 использует пиксели.

Панели, миниатюрки и велсы были полностью убраны.

Без углубления в детали, давайте перейдем к другим важным вещам.

Система сеток в Bootstrap

Система сеток в Bootstrap помогает вам создать шаблон и легко сделать адаптивный сайт. Тут нет каких-либо изменений в названиях классов, кроме .xs класса, который больше не существует в Bootstrap 4.

Советую почитать статью — Сетка в Bootstrap 4. Подробное руководство

Сетка разделена на 12 столбцов, следовательно, ваш шаблон будет основываться на этом факте.

Чтобы использовать систему сеток, вам придется добавить класс .row к главному диву.

col-lg-2 // класс используется для больших устройств, таких как ноутбукиcol-md-2 // класс используется для средних по размерам устройств, таких как планшетыcol-sm-2 // этот класс используется для маленьких устройств, таких как мобильные телефоны.

Панель навигации

Панель навигации

Обертка для панели навигации в Bootstrap 4 довольно крута. Она очень удобна, когда надо сделать адаптивный navbar.

Для этого, мы добавим класс navbar нашему index.html файлу.

<!-- navbar -->  
<nav class="navbar navbar-expand-lg fixed-top ">
<a class="navbar-brand" href="#">Home</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse " id="navbarSupportedContent"> <ul class="navbar-nav mr-4">
<li class="nav-item">
<a class="nav-link" data-value="about" href="#">About</a> </li>
<li class="nav-item">
<a class="nav-link " data-value="portfolio"href="#">Portfolio</a>
</li>
<li class="nav-item">
<a class="nav-link " data-value="blog" href="#">Blog</a> </li>
<li class="nav-item">
<a class="nav-link " data-value="team" href="#"> Team</a> </li>
<li class="nav-item">
<a class="nav-link " data-value="contact" href="#">Contact</a> </li>
</ul>
</div></nav>

Создайте и подключите main.css файл, чтобы вы могли кастомизировать CSS стиль.

Вставьте его в head тег вашего index.html файла:

<link rel="stylesheet" type="text/css" href="css/main.css">

Добавьте цветов панели навигации:

.navbar{ background:#F97300;}.nav-link , .navbar-brand{ color: #f4f4f4; cursor: pointer;}.nav-link{ margin-right: 1em !important;}.nav-link:hover{ background: #f4f4f4; color: #f97300; }.navbar-collapse{ justify-content: flex-end;}.navbar-toggler{  background:#fff !important;}

Новая сетка построена на флексах, так что выравнивание вам нужно уже делать с помощью Flexbox свойств. Для примера, чтобы разместить меню навигации справа, нам надо добавить свойство justify-content и выставить ему flex-end.

.navbar-collapse{
justify-content: flex-end;
}

Добавьте .fixed-top класс в панель навигации, чтобы сделать её фиксированной.

Чтобы сделать фоновый цвет ярким, добавьте .bg-light. Для темного фона, добавьте .bg-dark, а для светло голубого фона, добавьте класс .bg-primary.

.bg-dark{
background-color:#343a40!important
}
.bg-primary{
background-color:#007bff!important
}

Шапка

<header class="header">

</header>

Давайте попробуем создать разметку для шапки.

Тут мы хотим сделать так, что шапка забирала всю высоту окна, следовательно нам понадобится немного JQuery.

Для начала создадим файл под названием main.js и вставим его в index.html перед закрывающим тегом body.

<script type="text/javascript" src='js/main.js'></script>

В main.js вставим немного кода JQuery.

$(document).ready(function(){
$('.header').height($(window).height());
})

Было бы круто, если бы мы выставили фон для шапки.

/*Стиль хедера*/
.header{
background-image: url('../images/headerback.jpg');
background-attachment: fixed;
background-size: cover;
background-position: center;
}

Давайте добавим наложение, чтобы шапка выглядела покруче.

Добавьте этот код в ваш index.html файл.

<header class="header">
<div class="overlay"></div>
</header>

Далее добавьте это в ваш main.css файл.

.overlay{
position: absolute;
min-height: 100%;
min-width: 100%;
left: 0;
top: 0;
background: rgba(244, 244, 244, 0.79);
}

Теперь нам надо добавить описание в шапку.

Чтобы обернуть наше описание, нам сначала надо создать <div> и выдать ему класс .container.

.container это класс в Bootstrap, который поможет вам обернуть ваш контент и сделает ваш шаблон более адаптивным.

<header class="header">
<div class="overlay"></div>
<div class="container">

</div>

</header>

Далее добавьте еще один div, который будет влючать в себя описание.

<div class="description">
<h1> Hello ,Welcome To My official Website
<p> cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
<button class="btn btn-outline-secondary btn-lg">See more</button> </h1>
</div>

Мы выставим ему класс .description и добавим .text-center, чтобы убедиться в том, что контент размещён в центре страницы.

Кнопки

Добавьте класс .btn btn-outline-secondary к элементу button. Вообще есть много других классов для кнопок. Вот несколько примеров.

Вот как выглядит стилизация для .description в main.css файле.

.description{
position: absolute;
top: 30%;
margin: auto;
padding: 2em;
}
.description h1{
color:#F97300 ;
}
.description p{
color:#666;
font-size: 20px;
width: 50%;
line-height: 1.5;
}
.description button{
border:1px solid #F97300;
background:#F97300;
color:#fff;
}

После всего этого, наша шапка будет выглядеть таким образом.

Секция информации

В этой секции мы будем использовать сетку Bootstrap, что бы разделить секцию на две части.

Чтобы начать сетку, мы выставим класс .row родителю div.

<div class="row"></div>

Первая секция будет по левую сторону и будет содержать изображение, а вторая секция будет по правую сторону и будет включать в себя описание.

Каждый div будет брать по 6 колонок — это означает, что они возьмут по половине секции. Помните, что сетка делится на 12 колонок.

В первом div по левую сторону:

<div class="row"> 
// левая сторона
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/team-3.jpg" class="img-fluid">
<span class="text-justify">S.Web Developer</span>
</div>
</div>

После добавления HTML элементов на правую сторону, структура нашего кода выглядеть следующим образом:

<div class="row">
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/team-3.jpg" class="img-fluid">
<span class="text-justify">S.Web Developer</span>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 desc">

<h3>D.John</h3>
<p>
ipsum dolor sit amet, consectetur adipisicing elit, sed do eiusmod
tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam,
quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo
consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non
proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
</div>

А вот и сам CSS:

.about{
margin: 4em 0;
padding: 1em;
position: relative;
}
.about h1{
color:#F97300;
margin: 2em;
}
.about img{
height: 100%;
width: 100%;
border-radius: 50%
}
.about span{
display: block;
color: #888;
position: absolute;
left: 115px;
}
.about .desc{
padding: 2em;
border-left:4px solid #10828C;
}
.about .desc h3{
color: #10828C;
}
.about .desc p{
line-height:2;
color:#888;
}

Секция портфолио

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

Структура нашего HTML кода для секции порфолио выглядит так.

<!-- portfolio -->
<div class="portfolio">
<h1 class="text-center">Portfolio</h1>
<div class="container">
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port13.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port1.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port6.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port3.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port11.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/electric.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/Classic.jpg" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port1.png" class="img-fluid">
</div>
<div class="col-lg-4 col-md-4 col-sm-12">
<img src="images/portfolio/port8.png" class="img-fluid">
</div>
</div>
</div>
</div>

Добавляя .img-fluid каждому изображению, мы делаем их адаптивными.

Каждый элемент в нашей галерее будет забирать себе четыре колонки, помните, что col-md-4 это для средних расширений экранов, а col-lg-4 для больших экранов. Это равносильно 33.33333% на больших экранах, таких как десктопы или большие планшеты. А маленькие девайсы получат 12 колонок, то есть iPhone и другие мобильные устройства будут забирать по 100% контейнера.

Давайте добавим немного стилизации нашей галерее.

/*Portfolio*/
.portfolio{
margin: 4em 0;
position: relative;
}
.portfolio h1{
color:#F97300;
margin: 2em;
}
.portfolio img{
height: 15rem;
width: 100%;
margin: 1em;
}

Секция блога

Карточки

Карточки в Bootstrap 4 делают дизайн блога куда проще. В особенности, карточки хорошо подходят статей и постов.

Чтобы создать карточку, мы используем класс .card и назначаем его div элементу. Сам класс карточки содержит много функций:

.card-header определяет карточку шапки

.card-body для карточки основного контента

.card-title заголовок карточки

.card-footer определяет подвал карточки

.card-image для изображения карточки

Таким образом, HTML код нашего сайта должен сейчас выглядеть таким образом:

<!-- Posts section -->
<div class="blog">
<div class="container">
<h1 class="text-center">Blog</h1>
<div class="row">
<div class="col-md-4 col-lg-4 col-sm-12">
<div class="card">
<div class="card-img">
<img src="images/posts/polit.jpg" class="img-fluid">
</div>

<div class="card-body">
<h4 class="card-title">Post Title</h4>
<p class="card-text">

proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
<div class="card-footer">
<a href="" class="card-link">Read more</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-sm-12">
<div class="card">
<div class="card-img">
<img src="images/posts/images.jpg" class="img-fluid">
</div>

<div class="card-body">
<h4 class="card-title">Post Title</h4>
<p class="card-text">

proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
<div class="card-footer">
<a href="" class="card-link">Read more</a>
</div>
</div>
</div>
<div class="col-md-4 col-lg-4 col-sm-12">
<div class="card">
<div class="card-img">
<img src="images/posts/imag2.jpg" class="img-fluid">
</div>

<div class="card-body">
<h4 class="card-title">Post Title</h4>
<p class="card-text">

proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
</p>
</div>
<div class="card-footer">
<a href="" class="card-link">Read more</a>
</div>
</div>
</div>
</div>
</div>
</div>

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

.blog{
margin: 4em 0;
position: relative;
}
.blog h1{
color:#F97300;
margin: 2em;
}
.blog .card{
box-shadow: 0 0 20px #ccc;
}
.blog .card img{
width: 100%;
height: 12em;
}
.blog .card-title{
color:#F97300;

}
.blog .card-body{
padding: 1em;
}

После добавления секции блога на наш сайт, дизайн должен выглядеть примерно таким образом:

круто, да?

Секция команды

В этой секции мы будем применять систему сеток для равного распределения места между изображениями. Каждое наше изображение занимает .col-md-3 контейнера, что равно 25% общего места. Вот наша HTML структура:

<!-- Team section -->
<div class="team">
<div class="container">
<h1 class="text-center">Our Team</h1>
<div class="row">
<div class="col-lg-3 col-md-3 col-sm-12 item">
<img src="images/team-2.jpg" class="img-fluid" alt="team">
<div class="des">
Sara
</div>
<span class="text-muted">Manager</span>
</div>
<div class="col-lg-3 col-md-3 col-sm-12 item">
<img src="images/team-3.jpg" class="img-fluid" alt="team">
<div class="des">
Chris
</div>
<span class="text-muted">S.enginner</span>
</div>
<div class="col-lg-3 col-md-3 col-sm-12 item">
<img src="images/team-2.jpg" class="img-fluid" alt="team">
<div class="des">
Layla
</div>
<span class="text-muted">Front End Developer</span>
</div>
<div class="col-lg-3 col-md-3 col-sm-12 item">
<img src="images/team-3.jpg" class="img-fluid" alt="team">
<div class="des">
J.Jirard
</div>
<span class="text-muted">Team Manger</span>
</div>
</div>
</div>
</div>

И давайте добавим немного стилей:

.team{
margin: 4em 0;
position: relative;
}
.team h1{
color:#F97300;
margin: 2em;
}
.team .item{
position: relative;
}
.team .des{
background: #F97300;
color: #fff;
text-align: center;
border-bottom-left-radius: 93%;
transition:.3s ease-in-out;
}

Было бы неплохо добавить анимированное наложение при наведении на изображение.

Чтобы применить этот эффект, добавим стили как показано ниже в наш main.css файл:

.team .item:hover .des{
height: 100%;
background:#f973007d;
position: absolute;
width: 89%;
padding: 5em;
top: 0;
border-bottom-left-radius: 0;
}

Супер круто!

Форма связи

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

Эта секция будет содеражть форму, через которую посетители смогут отправить вам письмо или отзыв. И конечно же мы применим несколько классов Bootstrap, чтобы сделать дизайн красивым и адаптивным.

Как и Bootstrap 3, Bootstrap 4 также использует .form-control класс для полей input, но в 4-й версии появился новый функционал, такой как — переход с устаревшего .input-group-addon на .input-group-prepend, чтобы использовать иконки как лейблы.

Вообще посмотрите полную документацию на Bootstrap 4 по этому поводу. В нашей форме обратной связи мы обернем каждый input в div, который имеет класс .form-group.

Теперь наш index.html выглядит примерно так.

<!-- Contact form -->
<div class="contact-form">
<div class="container">
<form>
<div class="row">
<div class="col-lg-4 col-md-4 col-sm-12">
<h1>Get in Touch</h1>
</div>
<div class="col-lg-8 col-md-8 col-sm-12 right">
<div class="form-group">
<input type="text" class="form-control form-control-lg" placeholder="Your Name" name="">
</div>
<div class="form-group">
<input type="email" class="form-control form-control-lg" placeholder="YourEmail@email.com" name="email">
</div>
<div class="form-group">
<textarea class="form-control form-control-lg">

</textarea>
</div>
<input type="submit" class="btn btn-secondary btn-block" value="Send" name="">
</div>
</div>
</form>
</div>
</div>

А вот стили для секции обратной связи:

main.css

.contact-form{
margin: 6em 0;
position: relative;
}
.contact-form h1{
padding:2em 1px;
color: #F97300;
}
.contact-form .right{
max-width: 600px;
}
.contact-form .right .btn-secondary{
background: #F97300;
color: #fff;
border:0;
}
.contact-form .right .form-control::placeholder{
color: #888;
font-size: 16px;
}

Шрифты

Я считаю, что стандартные шрифты ужасны, по-этому нам надо подключить Google Font API и мы уже там выберем Raleway шрифт, который очень хорошо подойдет к нашему шаблону.

Давайте добавим ссылку в наш main.css файл:

@import url(‘https://fonts.googleapis.com/css?family=Raleway');

и выставите глобальный стиль для HTML тегов шапки:

html,h1,h2,h3,h4,h5,h6,a{
font-family: "Raleway";
}

Эффект скролла

Последнее, что нам нужно сделать это добавить эффект скролла. Тут мы снова применим JQuery. Не переживайте, если вы незнакомы с ним, просто добавьте этот код в ваш main.js файл.

$(".navbar a").click(function(){
$("body,html").animate({
scrollTop:$("#" + $(this).data('value')).offset().top
},1000)

})

И добавьте атрибут data-value каждой ссылке в панели навигации:

<li class="nav-item">
<a class="nav-link" data-value="about" href="#">About</a>
</li>
<li class="nav-item">
<a class="nav-link " data-value="portfolio" href="#">Portfolio</a>
</li>
<li class="nav-item">
<a class="nav-link " data-value="blog" href="#">Blog</a>
</li>
<li class="nav-item">
<a class="nav-link " data-value="team" href="#">
Team</a>
</li>
<li class="nav-item">
<a class="nav-link " data-value="contact" href="#">Contact</a>
</li>

Выставите id атрибут для каждой секции.

Примите во внимание, id должен быть идентичен data-value атрибуту в ссылке панели навигации. Это нужно, чтобы скролл работал должным образом.

<div class="about" id="about"></div>

Завершение и выводы

Bootstrap 4 это отличный вариант для создания вашего веб приложения. Он предоставляет высококачественные элементы UI и его легко настраивать, интегрировать и использовать. Он также помогает вам внедрять адаптивность на сайт, следовательно с его помощью вы предоставите пользователям премиальный опыт взаимодействия с вашим сайтом.

--

--

Stas Bagretsov

Надеюсь верую вовеки не придет ко мне позорное благоразумие. webdev/sports/books