easy

Собираем сайт-портфолио для фотографа

Используем CSS Grid.

Переходим от теории к практике — собираем свой первый сайт-портфолио на сетке CSS Grid.

Если вы здесь, но не знаете, что такое сетка и как с ней работать, почитайте предыдущие выпуски:

Легенда

Допустим, к нам обратился заказчик — это фотограф, которому нужно портфолио. После общения мы выяснили его требования к сайту:

  • сверху должны идти его имя и контакты, просто в строчку;
  • ниже — узкая полоса на всю ширину макета с одной фотографией;
  • под ней — название раздела: «Природа»;
  • ещё ниже идут фотографии, заполняя всю ширину макета. Какие-то фотографии больше, какие-то меньше;
  • в будущем под ним мы добавим раздел «Техника», где всё повторяется (фото пока не готовы, сейчас не делаем).

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

Подготовка

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

<!DOCTYPE html>
<html>

<head>
  <title>Grid</title>
  <style>

    body{
      /*настраиваем шрифт*/
      font-family: Arial, Helvetica, sans-serif;
    }

    /*общие настройки сетки*/
    .grid {
      /*подключаем сетку*/
      display: grid;
    } 

    /*внешний вид ячеек*/
    .grid > * {
      /*скругление углов*/
      border-radius: 5px;
      /*расстояние от одной границы ячейки до другой*/
      margin: 1px;
    }

  </style>
</head>

<body>
  <!-- создаём контейнер, который будет отвечать за нашу сетку -->
  <div class="grid">
   </div>
</body>
</html>

Мы уже выяснили заранее количество фотографий, которое нужно показать в портфолио, и поняли, что нам нужна сетка из 20 строк и 5 колонок:

/*формируем строки и столбцы*/
grid-template-rows: 50px repeat(20, 250px);
grid-template-columns: repeat(5, 250px);

Первое значение 50 пикселей в строках нам нужно для шапки сайта — там будут имя и контакты фотографа.

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

grid-auto-flow: dense;

Он отвечает за плотную укладку содержимого в сетке — если нужно, передвинет соседние ячейки в другое место, чтобы не было дыр в макете.

Имя и контакты

В этом разделе нам нужно написать имя и фамилию фотографа и поставить три ссылки для связи — почту, телеграм и инстаграм. Имя с фамилией поставим в первых двух ячейках этой строки, а остальные ссылки — в оставшихся.

Сделаем отдельные области для каждого элемента шапки:

.name {
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 1;   
  grid-column-end: 3; 
  font-size: 34px;
  font-weight: 900;

}

.email {
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 3;   
  grid-column-end: 4; 
}

.tg {
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 4;   
  grid-column-end: 5; 
}

 .inst {
  grid-row-start: 1; 
  grid-row-end: 2; 
  grid-column-start: 5;   
  grid-column-end: 6; 
}

По умолчанию текст внутри блока <div> прижимается к верхнему краю. Чтобы опустить текст вниз, добавим в последние три области команды, которые зададут отдельные правила для содержимого этих ячеек:

display: flex;
align-items: flex-end;
padding-bottom: 8px;

Добавляем HTML-код в страницу:

<div class="name">Михаил Максимов</div>
<div class="email"><a href="mailto:mikhail.maximov@ya.ru">mikhail.maximov@ya.ru</a></div>
<div class="tg"><a href="https://t.me/thecodemedia">Телеграм</a></div>
<div class="inst"><a href="https://www.instagram.com/thecodemedia/">Инстаграм</a></div>

Длинная картинка на всю ширину

Чтобы отделить шапку от основного контента, сделаем новую область:

.upper {
      grid-row-start: 2; 
      grid-row-end: 3; 
      grid-column-start: 1;   
      grid-column-end: 6;
    }

Сразу же пропишем стили для картинок, чтобы они сами масштабировались под размер области, — возьмём стиль из статьи про работу с ячейками:

img{
border-radius: 5px;
width: 100%;
height: 100%;
object-fit: cover;
}

Добавим новый блок в сетку и посмотрим на результат:

<div class="upper"> <img src="https://images.unsplash.com/photo-1566047973053-6678927ced4c?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8Nnx8bmF0dXJlfGVufDB8MnwwfA%3D%3D&auto=format&fit=crop&w=600&q=60"></div>

Заголовок раздела

Сделаем так: выделим под заголовок тоже целую строку, сделаем шрифт покрупнее и поставим надпись в центре:

.zag-1 {
  grid-row-start: 3; 
  grid-row-end: 4; 
  grid-column-start: 1;   
  grid-column-end: 6;
  text-align: center;
  display: flex ; 
  justify-content: center;
  align-items: center;
  font-size: 80px;
}

Мы добавили сюда три дополнительные команды:

  • display:flex позволяет нам гибко управлять содержимым блока;
  • justify-content: center — ставит наш текст по центру ширины макета;
  • align-items: center — ставит содержимое блока в центр по вертикали.

Добавляем HTML-код и смотрим результат:

Расставляем фото по сетке

Заполним сетку фотографиями так:

  • на старте будет большая фотография 3 × 4 ячейки;
  • где-то в середине разместим одно фото 2 × 3 и два  фото 1 × 2  ячейки;
  • остальные фотографии — каждая в своей ячейке.

Зададим области для больших фотографий и сразу выберем для них место в макете:

 .img34{
      grid-row-start: 4; 
      grid-row-end: 7; 
      grid-column-start: 1;   
      grid-column-end: 5;
    }

    .img23{
      grid-row-start: 10; 
      grid-row-end: 12; 
      grid-column-start: 1;   
      grid-column-end: 4;
    }

    .img12-1{
      grid-row-start: 7; 
      grid-row-end: 8; 
      grid-column-start: 2;   
      grid-column-end: 4;
    }

    .img12-2{
      grid-row-start: 9; 
      grid-row-end: 10; 
      grid-column-start: 4;   
      grid-column-end: 6;
    }

Применим эти классы к первым четырём блокам с изображениями, а остальные фотографии просто поместим в div-блоки:

<div class="img34"><img src="https://images.unsplash.com/photo-1588650944142-c9160fd45802?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MTV8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div class="img23"><img src="https://images.unsplash.com/photo-1559150842-1b402cfd3931?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MjN8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div class="img12-1"><img src="https://images.unsplash.com/photo-1568429838920-de3a3aa8cf1c?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MjV8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div class="img12-2"><img src="https://images.unsplash.com/photo-1574758505490-717eb3ad97f5?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mjh8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  
  <div><img src="https://images.unsplash.com/photo-1580834195694-0e333ca41f3d?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MzB8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1559244673-9cee88d551f6?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MzN8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1584470457230-0fc019eb4ff6?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8MzV8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1529300546587-05b516fc461f?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mzl8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1560649558-10d69907f96b?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8OTV8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1562059392-096320bccc7e?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8ODl8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1578953600642-0b88f8aeb66a?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8ODV8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1573616420487-df5d87ba9594?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8ODN8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1570327920356-9d2cdf21020f?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NzZ8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1564256939897-e28e64d51642?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NzJ8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1565651454302-e263192bad3a?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NjZ8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1561810239-137bbfbecb2d?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NjF8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1559626627-cb31b201e27f?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NTh8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1559140508-eef7299ddb96?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NTd8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1576704972320-a094db203211?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NTJ8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1581701545134-c627459217a7?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NDh8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/photo-1562796472-065ac45f2e80?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8NDR8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>
  <div><img src="https://images.unsplash.com/flagged/photo-1564292284432-2950d95f1892?ixlib=rb-1.2.1&ixid=MXwxMjA3fDB8MHxzZWFyY2h8Mzh8fG5hdHVyZXxlbnwwfDJ8MHw%3D&auto=format&fit=crop&w=600&q=60"></div>

Что дальше

У нас получился сайт-портфолио для фотографа, но здесь много ещё над чем нужно работать:

  • поменять местами некоторые фото, чтобы они сочетались друг с другом по цветам;
  • сделать их кликабельными — увеличивать и уменьшать фото по клику;
  • сделать форму обратной связи без перезагрузки страницы, чтобы фотограф мог перезвонить заказчику;
  • сделать сайт адаптивным, чтобы он хорошо смотрелся на любых экранах.

Мы это сделаем, но не всё сразу. Подпишитесь, чтобы не пропустить вторую часть.

Текст, иллюстрации и редактура

Михаил Полянин

Редактор

Максим Ильяхов

Обложка

Даня Берковский

Вёрстка

Мария Дронова

Корректор

Ирина Михеева

Соцсети

Олег Вешкурцев

Во имя красоты и дизайна.

Получите ИТ-профессию
В «Яндекс Практикуме» можно стать разработчиком, тестировщиком, аналитиком и менеджером цифровых продуктов. Первая часть обучения всегда бесплатная, чтобы попробовать и найти то, что вам по душе. Дальше — программы трудоустройства.
Начать карьеру в ИТ
Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию Получите ИТ-профессию
Еще по теме
Как парень из Томска руководит бэкенд-разработкой в Практикуме
Как парень из Томска руководит бэкенд-разработкой в Практикуме

О CTF-турнирах и пути в Яндекс.

easy
Зарплата 180 000. Что нужно уметь разработчику
Зарплата 180 000. Что нужно уметь разработчику

Кто готов платить эти деньги и за что.

easy
Как защитить ваши важные файлы
Как защитить ваши важные файлы

5 способов, от простых до сложных.

medium
Начинающим программистам: что такое фреймворки и библиотеки
Начинающим программистам: что такое фреймворки и библиотеки
medium
ООП для новичков: инкапсуляция, наследование и полиморфизм
ООП для новичков: инкапсуляция, наследование и полиморфизм

Объясняем без машин

easy
Selectel: как работает российский провайдер инфраструктуры и облаков
Selectel: как работает российский провайдер инфраструктуры и облаков

Чем занимается инфраструктурный провайдер, можно ли в него устроиться и как там с импортозамещением

easy
Кто такая Unity и почему она всем нравится
Кто такая Unity и почему она всем нравится

Бесплатный движок с классной графикой, реалистичной физикой и понятным интерфейсом.

easy
Функции. Зачем они нужны и как их писать, чтобы вас уважали программисты
Функции. Зачем они нужны и как их писать, чтобы вас уважали программисты

Сложная важная статья для тех, кто хочет стать крутым программистом.

medium
Myspace потеряла архивы за 12 лет. Как не потерять свои
Myspace потеряла архивы за 12 лет. Как не потерять свои

Почему так сложно сберечь важные данные и как с этим быть вообще.

easy
easy
[anycomment]
Exit mobile version