Как написать адаптивный сайт

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

Содержание

  1. Как сделать сайт адаптивным на все экраны?
  2. Что менять в HTML и CSS коде?
  3. Адаптивное меню
  4. Адаптивная шапка сайта
  5. Гибкие изображения и видео
  6. Как сделать адаптивный фон
  7. Адаптивный сайт на Тильде
  8. Работа с Adobe Muse
  9. Проверка адаптивности сайта

Как сделать сайт адаптивным на все экраны?

Чтобы сделать сайт адаптивным на мобильное или стационарное устройство, нужно иметь представление о HTML5, CSS3 и JavaScript. Кроме общих знаний, требуется понимать основные принципы адаптивности.

Только с ними можно начинать делать верстку сайта:

  1. Поточность — принцип отсутствия смещения информационных блоков во время просмотра сайта с мобильного устройства.
  2. Относительность в измерении — принцип использования относительных единиц для установки размеров и координат верхней и нижней границы блока экрана ПК и дисплея смартфона.
  3. Применение контрольных точек — принцип расположения элементов для разных экранов во избежание сдвига содержимого страниц сайта.
  4. Принцип грамотного использования минимальных и максимальных значений. К примеру, если экран имеет ширину меньше 1000 пикселей, то контент размещают на весь экран. Иначе максимум ширина будет достигать 1000 пикселей.
  5. Принцип вложенности объектов для предотвращения сложностей контроля за разными элементами сайта. Можно вложить их в один контейнер. Требуется для тех блоков, которые не нужно адаптировать под экран — кнопки с логотипами и др.
  6. Использование одинаковых шрифтов во избежание перегрузки сайта.
  7. Правильное применение растровой с векторной графикой. К примеру, если картинка состоит из множества деталей, следует делать ее в растровом формате и, наоборот, если она одна, то лучше использовать векторный формат. Однако стоит помнить о сжатии. Каждая картинка должна быть оптимизирована под новые браузеры.
  8. Соблюдение макетных размеров и общих стандартов верстки сайта. Стандартными принято считать следующие разрешения, при которых не происходит смена дизайна и неправильное отображение сайта:
    • для мобильных устройств – 320px, 480 px;
    • для планшетных компьютеров – 768px;
    • для нетбуков с некоторыми планшетами – 1024px;
    • для ПК – 1280px и больше.

Видео инструкция: Как сделать адаптивный сайт в фотошопе.

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

Адаптивную верстку начинают с создания контейнера для упаковки картинки. Выглядит это следующим образом:

Как сделать адаптивный сайт

Затем по ширине созданного контейнера задают ширину картинки, благодаря чему при увеличении или уменьшении экрана она будет также сужаться или увеличиваться. Таким образом создается поверхность для любого разрешения:

Как сделать адаптивный сайт

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

Как сделать адаптивный сайт

В целом получаем готовый шаблон для одной картинки на сайт. Чтобы сделать мини-галерею прописываем следующие коды в HTML структуру:

Как сделать адаптивный сайт

Так загрузили четыре картинки на сайт. В следующем шаблоне придадим картинкам адаптивность с небольшим отступом:

Как сделать адаптивный сайт

Таким образом, сделали миниатюрную галерею на сайт. Точно так же можно поступать с текстом. Главное – задавать параметры загружаемых файлов под максимальное и минимальное разрешение.

Адаптивное меню

Чтобы сделать адаптивное меню, вначале нужно добавить мега тег meta viewport в раздел шапки. Этот тег нужен, чтобы меню корректно отображалось на любом экране.

Как сделать адаптивный сайт

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

Как сделать адаптивный сайт

Дополнительная седьмая ссылка меню нужна для адаптации сайта под любое мобильное устройство. Далее добавляются стили в body. Это только для декоративных целей. Цвет можно использовать любой. Для примера возьмем бежевое меню. Под body добавляется тег nav. Он позволит сделать навигацию сайта. В этом теге размещаем основные ссылки меню.

Как сделать адаптивный сайт

Поскольку основных ссылок – 6 штук, то контейнер будет обладать шириной в 600 пикселей, а каждая ссылка – по 100 пикселей. Смотрите ниже.

Как сделать адаптивный сайт

На данном этапе были созданы стили меню. Однако, чтобы оно выводилось на каждом устройстве правильно, нужно откорректировать медиа-запрос. Он требуется для определения изменения стилей в определенных точках при видоизменении экрана. Поскольку вначале в навигации была использована ширина в 600 пикселей, пропишем следующие значения:

Как сделать адаптивный сайт

Когда экран станет меньше (при открытии сайта через смартфон), меню будет показано вертикально сверху вниз. В целом, адаптивность готова. Остается только сделать эффект показа меню при нажатии на ссылку. Сделать его можно, прописав следующее body:

Как сделать адаптивный сайт

Адаптивная шапка сайта

Создать адаптивную шапку на сайт достаточно сложно. До прихода CSS технологии, приходилось использовать обтекание с другими трюками для грамотной верстки страницы. Сегодня все делается просто. Вначале нужно прописать следующий код шапки, состоящий из трех блоков div html кода:

Как сделать адаптивный сайт

Далее нужно расписать CSS код. Он выполняет всю основную работу и состоит из пары строчек и служит, чтобы расположить элементы шапки в требуемых участках. Выглядит это все примерно так:

Как сделать адаптивный сайт

В конце нужно сделать созданную шапку сайта адаптивной. Для этого нужно применить свойства justify-content со значением space-between.

Как сделать адаптивный сайт

В целом, работа окончена. Проверить итог работы можно через удобный сервис Google Mobile Friendly.

Гибкие изображения и видео

Сделать изображения с видео гибкими и адаптивными можно с помощью разных способов. Чтобы не использовать сложный атрибут srcset, рассмотрим примеры настройки картинок и видео через CSS. Для базового расположения одиночных картинок с записями или видео, нужно прописать следующую html и css структуру. Здесь элемент обозначения картинки уже будет адаптивным.

Как сделать адаптивный сайт

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

Как сделать адаптивный сайт

Что касается трехколоночного макета, структура кодов остается такой же. Следует только выбрать ширину сформированного базового контейнера не трех изображениях или видео. Для этого нужно поставить показатели ширины картинок примерно 1/3 ширины контейнера:

Как сделать адаптивный сайт

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

Чтобы реализовать задуманное, нужно только расставить в body медиа-запросы и указать тип носителя, для которого будут они применяться. Выглядит все следующим образом:

Как сделать адаптивный сайт

Последний шаблон позволяет сделать широкоформатные адаптивные картинки и видео, заполняющие всю поверхность окна. Реализовать идею можно удалением свойства максимальной ширины контейнера и установки ширины в 100%.

Как сделать адаптивный сайт

Как сделать адаптивный фон

Чтобы установить адаптивный фон, следует проделать ряд простых шагов:

  1. Сделать подборку подходящего качественного изображения с высоким разрешением, и пропорциональным образом сделать его меньше с помощью любого графического редактора. Затем загрузить его на сервер в папку картинок.
  2. Создать body стилей и между тегами и вставить стили, прописав в них метатег viewport, чтобы превратить изображение в фоновое.
  3. Прописать путь к папке стилей и его полное название.
  4. Проверить результат, делая больше и меньше размеры окон.

Адаптивный сайт на Тильде

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

Как сделать адаптивный сайтПодробнее про адаптивность и отзывчивость дизайна сайта.

Преимущества Тильды заключаются в следующем:

  1. Интуитивно понятный интерфейс для новичков и профессионалов.
  2. Быстрое и простое редактирование текста (нужно кликнуть на него два раза).
  3. Быстрая загрузка любого изображения или видео.
  4. Множество заранее созданных шаблонов дизайна сайта на любой вкус.
  5. Быстрая работа стандартных блоков, позволяющих редактировать и добавлять информацию, изображения или видео так, как захочется. Причем можно загрузить как обложки с цитатами, так и тарифы с этапами работ.
  6. Широкий типографический ассортимент и огромная коллекция шрифтов с пятью настройками жирности текста.
  7. Большое количество адаптированных блоков под мобильные устройства, в том числе и таблиц.
  8. Простая и быстрая настройка отступов между картинками, таблицами и другими объектами.
  9. Возможность без сложностей настроить seo-оптимизацию на сайт, чтобы любой поисковик смог правильно индексировать страницу.
  10. Круглосуточная работа справочного центра, техподдержки и колл-центра.

Также через Тильду можно добавить на сайт прелоадер (устройство, которое уберет шрифты во время загрузки страницы), эффект печатной машинки, эффект презентации и типографа. Единственный минус – с помощью нее нельзя сделать сайт с более 500 страницами.

Работа с Adobe Muse

Как и Тильда, Adobe Muse является еще одним удобным и современным конструктором начинающего и опытного вебмастера. Он позволяет сэкономить много времени на адаптивности. Все, что требуется от вебмастера, – поработать в редакторе с интерфейсом, а коды сгенерирует система.

Преимущества работы с Adobe Muse следующие:

  1. Возможность сделать шаблон сайта без сложностей;
  2. Упрощенное создание адаптивного сайта (стандартный сайт можно сделать за 2 часа);
  3. Широкий функционал интерфейса;
  4. Понятная и быстрая работа с HTML5 и CSS3.

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

Проверка адаптивности сайта

Чтобы проверить настройку адаптивности сайта и его правильного отображения на всех устройствах, можно воспользоваться браузером или специальным сервисом Google Mobile Friendly (Google Search Console).

проверка адаптивности сайта

Браузером Google проверку можно сделать, зажав F12 и выбрав в меню «Дополнительные инструменты» и «Инструменты разработчика». Через Mozilla Firefox сделать это можно также: F12 -> Меню -> Разработка -> Адаптивный дизайн.

Через сервис Google можно проверить адаптивность по ссылке https://search.google.com/test/mobile-friendly.

В целом, сделать адаптивным сайт несложно. Главное – понимать принципы адаптивности и уметь правильно выставлять базовые интернет-настройки для ее создания.

Время для нового проекта! Сегодня мы сделаем основу для адаптивного сайта. В результате получится веб-страница с котиками, а в следующий раз сделаем вашу адаптивную личную страницу на HTML. Но пока — котики. 

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

В начале двухтысячных сайты были неадаптивными: они были свёрстаны под большие экраны, и если бы вы сейчас попробовали их открыть на мобильнике, вы бы удивились, как там всё неудобно. Текст мелкий, строки широкие, в интерфейс нужно «зумиться». Это не адаптивность.

Если бы вы открыли Яндекс в 1999 году с мобилки, пришлось бы зумиться

Вместе с появлением Айфонов появилась идея адаптировать сайты под узкие экраны мобильников. Текст должен читаться, картинки должны помещаться, а чтобы пользоваться сайтом, не нужно никуда зумиться.

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

Адаптивность реализуется с помощью CSS: это набор команд, которые говорят браузеру, как оформлять содержимое страницы. В том числе с помощью CSS можно описать, как страница должна выглядеть на разных размерах экрана.

Вы можете вручную прописать правила адаптивности для своего сайта. Поищите в Яндексе css media-queries, там нет ничего сложного, просто муторно: таких правил нужны десятки.

Другой способ — воспользоваться готовым набором инструментов для создания адаптивных сайтов. Их много разных, но мы в этой статье воспользуемся фреймворком Bootstrap. О фреймворках мы недавно писали: в нашем случае это будет как бы фундамент нашего сайта.

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

Что такое Bootstrap

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

Самое полезное для нас сейчас — адаптивная многоколоночная вёрстка Бутстрапа. Что она нам даёт: 

  • Можно красиво сверстать сайт, чтобы слева было меню, по центру основная колонка, справа ещё поле для рекламы. Или сделать сайт из трёх, четырёх, шести колонок — как Pinterest. 
  • Можно научить колонки сайта скрываться или менять размер в зависимости от размера экрана. Например, на большом экране выводить боковые колонки, а на маленьком — нет. 
  • Можно не особо думать о шрифтах, размерах и отступах: даже стандартная настройка Бутстрапа уже работает довольно неплохо. 
  • Не нужно думать, как всё это будет вести себя на мобильных устройствах, — всё адаптируется само.

Как его подключить к сайту

Чтобы использовать Бутстрап на странице, нужно написать такую команду, её рекомендует использовать официальный сайт движка:

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">

Эта команда загружает базовую версию Бутстрапа со внешнего сервера, где этот код официально хранится. Можно, конечно, скачать собственную версию Бутстрапа и поселить на свой сайт, но пользоваться внешним сайтом в нашем случае удобнее. Команду нужно вставить в разделе <head>, например, после мета-свойств. Общий код шаблона страницы будет выглядеть так:

<!DOCTYPE html>
<html>
<!-- служебная часть -->

<head>
  <!-- заголовок страницы -->
  <title>Адаптивная вёрстка на Бутстрапе</title>
  <!-- настраиваем служебную информацию для браузеров -->
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <!-- загружаем Бутстрап -->
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  <style type="text/css">
  </style>
  <!-- закрываем служебную часть страницы -->
</head>

<body>
  <!-- тут будет наша страница -->
</body>
<!-- конец всей страницы -->

</html>

Сетка и колонки

Бутстрап для себя делит экран на 12 колонок, независимо от размера экрана. Даже маленький экран старого телефона Бутстрап разобьёт на 12 колонок и будет ими управлять. На этом холсте вы можете создавать блоки шириной с какое-то количество колонок. Например, чтобы написать текст на половину ширины экрана, нужно создать блок шириной 6 колонок.

Bootstrap делит страницу на 12 колонок

Можно сказать любому элементу «Займи 6 колонок»

Блоки живут не сами по себе, а как бы в таблицах. Вы говорите Бутстрапу: «Создай мне контейнер для блока, в контейнере — строку, внутри строки — колонку, а внутрь колонки — положи этот текст». Сейчас это выглядит странно, но позже вы привыкнете.

Строка заполняется ячейками слева направо. Когда кончается строка, можно создать новую строку и снова заполнить её ячейками разной ширины. Ширина ячеек выражается в колонках. Ячейка шириной на весь экран будет иметь ширину 12 колонок, на пол-экрана — 6 колонок. Чтобы разбить экран на три части по горизонтали, нужно 3 ячейки шириной по 4 колонки. Чтобы сделать сетку, как у обычного трёхколоночного сайта, попробуйте три ячейки: 2 колонки, 8 колонок, 2 колонки. 

Можно сказать Бутстрапу: «Когда экран маленький, эту колонку выводи на всю ширину, а ту вообще прячь». Например, у нас в левой колонке было меню сайта, в центральной — основной текст, а в правой — всякие вспомогательные ссылки. Тогда говорим левой колонке на мобилке вывестись на всю ширину, основной колонке — тоже на всю ширину, а правой — скрыться. Получится мобильная версия сайта.

И так можно долго куражиться. Если интересно, прочитайте документацию по сеткам Бутстрапа — там всё понятно по картинкам. 

Делаем сами: адаптивный сайт

Заголовок

Начнём с простого. Первое, что нам нужно, — заголовок всей страницы. Мы его сделаем отдельным блоком, чтобы ничего ему не мешало. Весь код разместим внутри раздела <body>:

<div class="container" >

    <div class="col-12">

      <h2>Адаптивная вёрстка</h2>

    </div>

</div>

Помните, выше мы писали про вложенность? Вот она пошла, родимая: 

Первый блок — "container" — говорит Бутстрапу, что здесь сейчас будет происходить вёрстка сайта. Контейнеров на сайте может быть сколько угодно, они будут стоять один под другим. 

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

Третий блок отвечает за ячейки в строке. Сейчас мы сказали браузеру, что независимо от размера экрана заголовку нужно выделить 12 ячеек. При этом заголовок не растянется на всю ширину — он займёт столько места, сколько бы занял при обычной вёрстке.

Добавляем котиков

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

Сначала код, который мы поместим тоже в новый контейнер:

<div class="container">
  <div class="row">
    <div class="col-2">
      <img src="http://thecode.local/wp-content/uploads/2019/06/cat1.jpg">
    </div>
    <div class="col-8">
      <img src="http://thecode.local/wp-content/uploads/2019/06/cat2.jpg">
    </div>
    <div class="col-2">
      <img src="http://thecode.local/wp-content/uploads/2019/06/anton-kraev-1166716-unsplash.jpg">
    </div>
  </div>
</div>

Если мы вставим это в наш шаблон страницы, вместе с первой частью кода, то увидим, что картинки  расползлись и занимают слишком много места. Дело в том, что для браузера размер картинок сейчас важнее, чем размеры сетки Бутстрапа — котики как бы разрывают нашу страницу. Нужно это исправить:

Чтобы котики уважали ширину ячеек, в которые их засовывают, пропишем в CSS-стилях специальную команду для тега <img>. Команда должна сказать, чтобы ширина картинки была не больше, чем максимальный размер блока, который под неё выделили:

img{

      max-width: 100%;

   } 

Этот код нужно вставить в начало страницы между тегами <style> и </style>.

Теперь всё нормально: картинка занимает максимальную ширину, которую ей даёт занять сетка Бутстрапа. Давайте посмотрим, что произойдёт при изменении размеров браузера:

Настраиваем размеры картинок

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

</div>
<div class="row">
  <div class="col-12 col-sm-12 col-md-4 col-lg-2 col-xl-2">
    <img src="http://thecode.local/wp-content/uploads/2019/06/cat1.jpg">
  </div>
  <div class="col-12 col-sm-12 col-md-4 col-lg-8 col-xl-8">
    <img src="http://thecode.local/wp-content/uploads/2019/06/cat2.jpg">
  </div>
  <div class="col-12 col-sm-12 col-md-4 col-lg-2 col-xl-2">
    <img src="http://thecode.local/wp-content/uploads/2019/06/anton-kraev-1166716-unsplash.jpg">
  </div>
</div>

Мы для каждой картинки добавили описание размеров блока для каждого размера экрана и разберём его на примере первой картинки. Теперь, если экран очень маленький (col) или просто маленький (col-sm), то первый блок с котиком займёт  все 12 ячеек, то есть всю ширину. Если экран среднего размера (col-md) — то 4 ячейки, а если большой (col-lg) или очень большой (col-xl) — то пусть кот занимает по 2 ячейки.

Для второй картинки действуют те же самые правила, но размер кота на больших и очень больших экранах другой — 8 ячеек. Третья картинка настраивается точно так же, как и первая. Обратите внимание: чтобы на средних экранах получить одинаковый размер картинок, мы в описание каждой из них добавили одну и ту же команду col-md-4, которая каждому коту даёт 4 колонки, чтобы все были одного размера.    

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

Полный код страницы

<!DOCTYPE html>
<html>
<!-- служебная часть -->

<head>
  <!-- заголовок страницы -->
  <title>Адаптивная вёрстка на Бутстрапе</title>
  <!-- настраиваем служебную информацию для браузеров -->
  <meta charset="utf-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css"
    integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
  <!-- задаём CSS-стили прямо здесь же, чтобы всё было в одном файле -->
  <style type="text/css">
    img {
      max-width: 100%;
    }
  </style>
  <!-- закрываем служебную часть страницы -->
</head>

<body>
  <div class="container">
    <div class="row">
      <div class="col-12">
        <h1>Адаптивная вёрстка</h1>
      </div>
    </div>
  </div>
  <div class="container">
    <div class="row">
      <div class="col-12 col-sm-12 col-md-4 col-lg-2 col-xl-2">
        <img src="http://thecode.local/wp-content/uploads/2019/06/cat1.jpg">
      </div>
      <div class="col-12 col-sm-12 col-md-4 col-lg-8 col-xl-8">
        <img src="http://thecode.local/wp-content/uploads/2019/06/cat2.jpg">
      </div>
      <div class="col-12 col-sm-12 col-md-4 col-lg-2 col-xl-2">
        <img src="http://thecode.local/wp-content/uploads/2019/06/anton-kraev-1166716-unsplash.jpg">
      </div>
    </div>
  </div>
</body>
<!-- конец всей страницы -->

</html>

Что дальше

Это лишь самые простые вещи, которые можно делать на Бутстрапе. Если вам понравилось, как страница реагирует на изменения экрана, — зайдите на getbootstrap.ru и почитайте остальные возможности фреймворка. В других статьях мы ещё вернёмся к этому движку и расскажем о его других возможностях.

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

Основные виды макетов сайтов

Различают следующие основные типы макетов сайтов, связанных с шириной:

  • фиксированный;
  • резиновый (гибкий);
  • адаптивный.

Фиксированный макет сайта

Фиксированный макет сайта — это макет, который имеет строго определённую ширину (в пикселях). Такой вид дизайна широко использовался для разработки сайтов в прошлом, когда интернет только начал внедряться в нашу жизнь. В это время «господствовали» компьютеры с мониторами, имеющими диагональ 14″ или 15″, в редких случаях встречались «монстры», имеющие диагональ 17″. Эти мониторы не сильно отличались по горизонтальному разрешению. Таким образом, выбрав для разметки какую-то определённую ширину (в основном останавливались на 960px), можно было разработать сайт, который оптимально бы отображался на всех мониторах этого времени.

Пример фиксированного макета сайта

<style>
body {
  margin: 0;
}
.container {
  margin-left: auto;
  margin-right: auto;
  width: 960px;
}
.aside {
  float: left;
  width: 250px;
}
.main {
  margin-left: 250px;
}
</style>

<div class="container">
  <aside class="aside">
    ASIDE
  </aside>
  <main class="main">
    MAIN
  </main>
</div>

Резиновый (гибкий) макет сайта

Резиновый (гибкий) макет сайта — это макет, который изменяется в зависимости от ширины рабочей области окна (вкладки) браузера. Потребность в такой разметке возникла, когда у многих пользователей появились мониторы, имеющие диагональ 19″, 21″ и больше.

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

Выходом из этой ситуации стало создание разметки, в которой блоки имеют не строго фиксированную ширину, а резиновую (обычно заданную в процентах). Такой макет в отличие от фиксированного уже мог «подстраиваться» под размеры монитора, т.е. изменять свои размеры.

Примры резинового (гибкого) макета сайта

Пример верстки первого макета:

<style>
  body {
    margin: 0;
  }
  .aside {
    float: left;
    width: 250px;
  }
  .main {
    margin-left: 250px;
  }
</style>

<div class="container">
  <aside class="aside">
    ASIDE
  </aside>
  <main class="main">
    MAIN
  </main>
</div>

Пример верстки второго макета:

<style>
body {
  margin: 0;
}
.aside {
  float: left;
  width: 25%;
}
.main {
  margin-left: 25%;
}
</style>

<div class="container">
  <aside class="aside">
    ASIDE
  </aside>
  <main class="main">
    MAIN
  </main>
</div>

После десктопов начали появляться и другие электронные устройства. В настоящее время просматривать сайты можно с помощью смартфонов (размер экрана от 3″ до 6″), планшетов (от 7″ до 10″), ноутбуков (10″ и выше), десктопов (19″ и выше) и TV (32″ и выше).

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

Чтобы было понятно, выполним расчёты на примере вышеприведённого резинового макета. А именно вычислим ширину блоков (1 и 2), которые они будут иметь на смартфоне с горизонтальным разрешением 320рх. В первом варианте: 1 блок — 250рх, 2 блок — 70рх. Во втором: 1 блок — 80рх, 2 блок — 240рх.

Как видно из расчётов, сайт, имеющий такой резиновый (гибкий) макет выглядеть на смартфонах будет просто ужасно.

Адаптивный макет сайта

Адаптивный макет сайта — это макет, который может «приспосабливаться» под различные устройства (ширину рабочей области окна браузера). Т.е. на одних устройствах он может иметь одну структуру, а на других — другую.

Рассмотрим пример адаптивного макета, состоящего из 2 блоков, который на разных устройствах выглядит по-разному.

А именно:

  • на смартфонах и планшетах (устройствах с очень маленьким размером экрана) блоки должны располагаться вертикально, т.е. один под другим;
  • на ноутбуках (устройствах со средним размером экрана) блоки должны располагаться горизонтально (1 блок — 33.3%, 2 блок — 66.7%);
  • на десктопах (устройствах с большим размером экрана) тоже горизонтально, но с другими размерами (1 блок — 25%, 2 блок — 75%)

Пример того, как может выглядеть адаптивный макет

<style>
body {
  margin: 0;
}
.container {
  display: flex;
  flex-wrap: wrap;
}
.aside, .main {
  width: 100%;
  min-height: 1px;
}
@media (min-width: 992px) {
  .aside {
    flex: 0 0 33.333333%;
    max-width: 33.333333%;
    order: 1;
  }
  .main {
    flex: 0 0 66.666667%;
    max-width: 66.666667%;
    order: 2;
  }
}
@media (min-width: 1400px) {
  .aside {
    flex: 0 0 25%;
    max-width: 25%;
  }
  .main {
    flex: 0 0 75%;
    max-width: 75%;
  }
}
</style>

<div class="container">
  <main class="main">
    MAIN
  </main>
  <aside class="aside">
    ASIDE
  </aside>
</div>

Bootstrap и создание адаптивных сайтов

Фреймворки Bootstrap 3 и 4 версии спроектированы для создания адаптивных сайтов.

Начинают верстать сайт, который будет «строится» на Bootstrap, с создания сетки. После создания сетки переходят к наполнению её контентом и компонентами Bootstrap.

Все компоненты Bootstrap являются гибкими, а не которые из них ещё и адаптивными как, например, Navbar. Данный компонент (Navbar) может изменять своё представление, т.е. находится в мобильном или десктопном представлении в зависимости от того какую в данный момент viewport ширину имеет браузер.

Информацию по сетке Bootstrap 3 можно почитать в этой статье, а по Bootstrap 4 — в этой.

Создание адаптивного макета с помощью Bootstrap 3

Создания адаптивного макета в Bootstrap 3 осуществляется под различные устройства. По умолчанию в Bootstrap 3 проектирование выполняется под 4 контрольные точки (xs, sm, md и lg). Область контрольной точки xs – это смартфоны, sm – планшеты, md – ноутбуки, а lg – десктопы.

Для примера сверстаем с помощью сетки Bootstrap 3 макет страницы, изображенный ниже. В качестве вида макета выберем, например, адаптивно-гибкий.

Пример того, как может выглядеть адаптивный макет

Разработку адаптивного макета обычно начинают с самых маленьких устройств (смартфонов), по отношению к Bootstrap 3 – это область xs.

На xs блоки должны располагаться вертикально и иметь ширину, равную ширине родительского контейнера (т.е. 12 колонок Bootstrap).

<div class="container-fluid">
  <div class="row">
    <div class="col-xs-12">1</div>
    <div class="col-xs-12">2</div>
    <div class="col-xs-12">3</div>
    <div class="col-xs-12">4</div>
    <div class="col-xs-12">5</div>
    <div class="col-xs-12">6</div>
  </div>
</div>

На sm блоки должны располагаться на 3 строках по 2 блока в каждой строке. Каждый блок должен иметь ширину, равную 50% ширины родительского элемента (6 колонок Bootstrap).

<div class="container-fluid">
  <div class="row">
    <div class="col-xs-12 col-sm-6">1</div>
    <div class="col-xs-12 col-sm-6">2</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-xs-12 col-sm-6">3</div>
    <div class="col-xs-12 col-sm-6">4</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-xs-12 col-sm-6">5</div>
    <div class="col-xs-12 col-sm-6">6</div>
  </div>
</div>

На md блоки должны располагаться на 2 строках по 3 блока в каждой строке. Каждый блок должен иметь ширину, равную 33.3% ширины родительского элемента (4 колонки Bootstrap).

<div class="container-fluid">
  <div class="row">
    <div class="col-xs-12 col-sm-6 col-md-4">1</div>
    <div class="col-xs-12 col-sm-6 col-md-4">2</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4">3</div>
    <!--Перед блоком md, который должен начинаться с новой строки-->
    <div class="clearfix visible-md-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4">4</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4">5</div>
    <div class="col-xs-12 col-sm-6 col-md-4">6</div>
  </div>
</div>

На lg блоки должны располагаться на 2 строчках. На первой строчке 2 блока, а на второй – 4 блока.

<div class="container-fluid">
  <div class="row">
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-6">1</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-6">2</div>
    <!--Перед блоком sm и lg, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block visible-lg-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">3</div>
    <!--Перед блоком md, который должен начинаться с новой строки-->
    <div class="clearfix visible-md-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">4</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">5</div>
    <div class="col-xs-12 col-sm-6 col-md-4 col-lg-3">6</div>
  </div>
</div>

Оптимизируем код, уберем, где возможно классы col-*-12, т.к. адаптивные блоки Bootstrap по умолчанию занимают ширину, равную 100%.

<div class="container-fluid">
  <div class="row">
    <div class="col-sm-6 col-md-4 col-lg-6">1</div>
    <div class="col-sm-6 col-md-4 col-lg-6">2</div>
    <!--Перед блоком sm и lg, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block visible-lg-block"></div>
    <div class="col-sm-6 col-md-4 col-lg-3">3</div>
    <!--Перед блоком md, который должен начинаться с новой строки-->
    <div class="clearfix visible-md-block"></div>
    <div class="col-sm-6 col-md-4 col-lg-3">4</div>
    <!--Перед блоком sm, который должен начинаться с новой строки-->
    <div class="clearfix visible-sm-block"></div>
    <div class="col-sm-6 col-md-4 col-lg-3">5</div>
    <div class="col-sm-6 col-md-4 col-lg-3">6</div>
  </div>
</div>

Создание адаптивного макета с помощью Bootstrap 4

Процесс создания адаптивного макета с использованием Bootstrap 4 выполняется почти также как и на Bootstrap 3.

Для примера сверстаем следующий макет.

Пример того, как может выглядеть адаптивный макет

<section class="a">
  <div class="container">
    <div class="row">
      <div class="a1 col-lg-6">A1</div>
      <div class="a2 col-lg-6">A2</div>
    </div>
  </div>
</section>

<section class="b">
  <div class="container">
    B
  </div>
</section>

<section class="c">
  <div class="container">
    <div class="row">
      <div class="c1 col-sm-6 col-lg-4">C1</div>
      <div class="c2 col-sm-6 col-lg-4">C2</div>
      <div class="c3 col-lg-4">C3</div>
    </div>
  </div>
</section>

<section class="d">
  <div class="container">
    <div class="row">
      <div class="d1 col-sm-6 col-lg-3">D1</div>
      <div class="d2 col-sm-6 col-lg-3">D2</div>
      <div class="d3 col-sm-6 col-lg-3">D3</div>
      <div class="d4 col-sm-6 col-lg-3">D4</div>
    </div>
  </div>
</section>

Адаптивная верстка сайта — это формирование структуры документа на базе HTML-разметки, предусматривающей автоматическое изменение страницы в зависимости от размера экрана пользователя. Простыми словами это макет страницы, автоматически подстраивающийся под размер экрана пользователя.

Помните советскую игру «Тетрис»? Там нужно было складывать падающие блоки конструктора, чтобы они подходили друг к другу по форме фигур.

Казалось бы, что здесь общего…

Казалось бы, что здесь общего…

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

Взгляните на макет страницы:

Поведение блоков страницы при адаптивном подходе

Поведение блоков страницы при адаптивном подходе

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

Адаптивность — важнейшее требование, которое предъявляется к современному сайту, особенно в текущих условиях поисковой оптимизации. И вот почему:

  1. Удобство для пользователей. Такие сайты удобны для просмотра на любых устройствах: от смартфонов и планшетов до телевизоров. Если страница остается читаемой только на десктопе, а мобильному пользователю приходится прикладывать определенные усилия, чтобы тапнуть по элементу или даже просто ознакомиться с контентом, то количество отказов на сайте резко увеличится.
  2. Больше трафика. Без адаптивности сайт теряет огромный сегмент аудитории, который связан с мобильными устройствами. Соответственно, и трафик, который они могли бы привести.
  3. Более высокий коэффициент конверсий. Есть исследования, которые показывают — адаптивный веб-дизайн может привести к увеличению коэффициента конверсии посетителей в покупателей на 10,9 %.
  4. Критически важна адаптивность для коммерческих сайтов, где неудобство напрямую ведет к снижению конверсии и падению прибыли бизнеса.

  5. Улучшенная и более точная веб-аналитика. Сайт один (а не два, как с мобильной версией) — поэтому проще вычислять ключевые показатели эффективности бизнеса.
  6. Экономнее в долгосрочной перспективе. Вместо того чтобы каждый раз разрабатывать сайт для разных размеров экрана, адаптивный веб-дизайн можно создать только один раз.
  7. Лучший пользовательский опыт. Например, в розничной торговле покупатель может начать свой путь с мобильного устройства, а продолжить его с десктопа или ноутбука. Можно поддерживать пользовательский опыт в каждой точке взаимодействия.
  8. Более простое администрирование. Один сайт — быстрее и легче.
  9. Лучшая адаптация для SEO. Отсутствует дублирование контента, как в случае с двумя и более версиями сайта.

Разница между адаптивной и мобильной версией сайта

Технически мобильная версия сайта на поддомене (чаще всего .m) — это отдельный, самостоятельный сайт. Адаптивный сайт — это мобильная и полная версия сайта в одном флаконе, при этом первая умеет подстраиваться к любому типу устройства пользователя.

Стоит отметить несколько достоинств и недостатков обоих подходов.

Достоинства отдельной мобильной версии на поддомене

  • Загружается быстрее.
  • Мобильный пользователь может выбирать, какая версия сайта ему нужна в данный момент.
  • Проще создавать, так как функциональность сильно урезана.
  • Лучшее юзабилити.

Недостатки мобильной версии на поддомене

  • Сильно ограничено функциональное воплощение.
  • Поисковые системы видят сразу несколько версий одной страницы.
  • Нет возможности опубликовать весь контент, доступный в полной версии сайта.
  • Возможные санкции поисковых систем: если вы дублируете уже опубликованный контент основной версии на мобильной версии сайта.
  • Может страдать загрузка содержимого страницы, если используются перенаправления.

Еще одна проблема мобильной версии сайта на поддомене состоит в том, что придется заново прокачивать трастовость домена, ИКС и другие «пузомерки», ведь с точки зрения поисковых систем поддомен — это новый самостоятельный сайт.

Достоинства адаптивной верстки

  • Не нужно генерировать дополнительные URL-адреса.
  • Расшаривание содержимого страниц более удобное, так как контент находится в рамках одного домена.
  • Легче оптимизировать сайт для SEO.
  • Простая реализация.
  • Не нужно задействовать перенаправления.
  • Проще сканировать краулерам.
  • Все ранее наработанные показатели остаются с вами и можно не бояться, что страницы неожиданно вылетят из индекса или вообще в него не попадут.

Недостатки адаптивной верстки

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

Теория. Устройство адаптивной верстки

Давайте смотреть, как это работает.

Медиазапросы стилей

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

  @media screen and (maxwidth: 600px) {

  /* CSS-стили*/;

  }

Логический оператор and, который позволяет связывать вместе разные типы условий>

Медиа-запрос следует правилу, основанному на параметрах минимальной и/или максимальной ширины, наряду с другими факторами (например, разрешение, браузер и ориентация экрана). Подробнее о них мы расскажем ниже, в разделе «Параметры и правила».

Медиа-запросы используются для идентификации допустимых и недопустимых стилей на каждой конкретной странице документа. Свойства стиля регламентируют самые разнообразные параметры документа, например, плотность пикселей (разрешение пользовательского экрана), ширина / высота браузерного окна, ориентация страницы.

«Жидкие» сетки

Адаптивный веб-дизайн использует алгоритм для нормализации элементов пользовательского интерфейса к размеру экрана и пикселям. Делается это с помощью так называемого «жидкого макета», в котором каждый компонент учитывается в процентах, которые он занимает по ширине.

Поведение «жидкого» макета в разных разрешениях экрана

Поведение «жидкого» макета в разных разрешениях экрана

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

Гибкие изображения

Изображения должны быть созданы в относительных единицах. В адаптивной верстке они называются «эффективными пикселями» (epx). Эти единицы используются для выражения размеров макета и интервалов. Элементы должны быть разработаны с базовой единицей 4 epx, чтобы дизайн всегда масштабировался до целого числа при применении гибкой сетки.

Могут быть и другие варианты реализации гибких изображений:

  <img srcset=«elva-fairy-320w.jpg 320w,

      elva-fairy-480w.jpg 480w,

      elva-fairy-800w.jpg 800w»

  sizes=«(max-width: 320px) 280px,

      (max-width: 480px) 440px,

      800px»

  src=«elva-fairy-800w.jpg» alt=«Elva dressed as a fairy»>

Теперь переходим к оставшимся маркерам.

Относительность и размеры

Адаптивная верстка предусматривает относительность буквально во всем. Например, в определении размера шрифта, размера отступов и конечно, ширины и высоты.

Относительные значения определяют 4 главных параметра:

  1. Ширину (width);
  2. Высоту (heights);
  3. Межблоковое расстояние или отступы (margin);
  4. Отступ от контента до границы блока (padding).

Все вышеуказанные параметры чаще всего прописываются в процентном соотношении. Также допустимо задействовать vw* и vh* (только внутри div-тега):

  • vw (сокращенно от Viewport Width) – процентная величина от суммарной ширины области viewport’а (пользовательская область просмотра);
  • vh (сокращенно от Viewport Height) — процентная величина от суммарной высоты viewport’а.

Breakpoints

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

Размеры экранов для адаптивной верстки

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

  • Мониторы full-hd — от 1920 px.
  • Мониторы низкого класса (не full-hd) — от 1280 px.
  • Мобильные устройства высокого класса (смартфоны) — от 320 px.
  • Нетбуки — от 1024 px.
  • Планшеты — от 768 px.

Фреймворки на основе стилей

Чтобы прописывать CSS, необязательно редактировать код в ручную. Начинающие верстальщики могут воспользоваться готовыми библиотеками фреймворков, чтобы загрузить шаблон CSS сразу в Title страницы.

Фреймворков очень много, но мы рекомендуем воспользоваться проверенными решениями: Pure или Bootstrap. Если по каким-то причинам они не подошли, есть еще один хороший вариант — Bulma.

Размерность шрифтов

Адаптивная верстка подразумевает использование 2 единиц — em (допускает вариативность для любого элемента документа) и rem (задается один раз на страницу). Em — это размер шрифта, который используется на смартфоне или другом мобильном устройстве по умолчанию. Прописываем 3em — получаем шрифт втрое больше, чем главный шрифт страницы для конкретного устройства.

Практика. Как сделать адаптивную верстку на примере

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

Макет для верстки

Макет для верстки

Шаг №1 — создаем html файл

Формируем скелет будущей html страницы.

  <div class=«container»>

     <main class=«main»>

       MAIN

     </main>

     <aside class=«aside»>

       ASIDE

     </aside>

  </div>

Шаг №2 — добавляем тег <style>

В начало созданного html файла добавляем тег <style> — для определения стилей компонентов страницы. Делаем отступ 0 и добавляем гибкий контейнер (display: flex и flex-wrap: wrap). Затем указываем ширину и минимальную высоту (в пикселях) для элементов aside и main:

  <style>

  body {

     margin: 0;

  }

  .container {

     display: flex;

     flex-wrap: wrap;

  }

  .aside, .main {

     width: 100%;

     min-height: 1px;

  }

Шаг №3 — формируем размеры блоков для мин. разрешения 990px

Вводим первый медиазапрос, чтобы указать минимальную ширину элемента (990px) и добавить параметры aside (flex: 33,3% или <=990px) и main (flex: 66,6 %):

  @media (min-width: 990px) {

   .aside {

     flex: 0 0 33.333333%;

     max-width: 33.333333%;

     order: 1;

   }

   .main {

     flex: 0 0 66.666667%;

     max-width: 66.666667%;

     order: 2;

   }

  }

Шаг №4 — формируем размеры блоков для мин. разрешения 1400px

Вводим второй медиазапрос — указываем минимальную ширину элемента 1400px и аналогично прописываем aside (flex и max-width: 25%) и main (flex и max-width: 75%):

@media (min-width: 1400px) {

   .aside {

     flex: 0 0 25%;

     max-width: 25%;

   }

   .main {

     flex: 0 0 75%;

     max-width: 75%;

   }

  }

  </style>

Шаг №5 — итоговый html файл

В итоге, целый код может выглядеть следующим образом:

  <style>

  body {

     margin: 0;

  }

  .container {

     display: flex;

     flex-wrap: wrap;

  }

  .aside, .main {

     width: 100%;

     min-height: 1px;

  }

  @media (min-width: 992px) {

   .aside {

     flex: 0 0 33.333333%;

     max-width: 33.333333%;

     order: 1;

   }

   .main {

     flex: 0 0 66.666667%;

     max-width: 66.666667%;

     order: 2;

   }

  }

  @media (min-width: 1400px) {

   .aside {

     flex: 0 0 25%;

     max-width: 25%;

   }

   .main {

     flex: 0 0 75%;

     max-width: 75%;

   }

  }

  </style>

  <div class=«container»>

     <main class=«main»>

       MAIN

     </main>

     <aside class=«aside»>

       ASIDE

     </aside>

  </div>

Синтаксис

Давайте закрепим то, что мы делали в примере выше. Начнем с синтаксиса.

Синтаксис подразумевает ввод медиазапроса через правило @media. Условия разделяется оператором (not, and, or), далее указываются параметры. Ширина, высота, ориентация страницы, соотношения разных элементов, либо разрешение экрана — все это параметры @media.

Для resolution (разрешение экрана) допустимо использовать любую из 3 единиц: dppx, dpi или dpcm (кол-во точек на пиксель / дюйм / сантиметр соответственно).

Для width разрешено задать минимальную и максимальную ширину. Аналогично — для heights (высоты) и aspect-ratio (форматного соотношения). Свойство CSS aspect-ratio позволяет создавать блоки с пропорциональными размерами, при этом высота и ширина блока автоматически рассчитываются как соотношение.

  aspect-ratio: 1 / 1;

  aspect-ratio: 16 / 9;

  aspect-ratio: 0.5;

Образцы значений для aspect-ratio

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

Стандартное значение orientation в адаптивной верстке — горизонтальное (альбомный лист) или вертикальное.

Пример

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

  @media all (min-width: 1200px) {

  div {

  width: 800px

  }

  }

  @media all (min-width: 400px) {

  div {

  width: 350px

  }

  }

А этот код указывает ширину и высоту страницы:

  @media screen and (min-aspect-ratio: 239/100) {

  main {

     height: 80%;

  }

  }

Плотность пикселей, ориентация страницы задаются аналогично.

Размер элементов в адаптивной верстке

Аналогичным образом (при помощи указания минимального и максимального значения) прописываются размеры компонентов на странице. Взгляните на этот фрагмент:

  div {

  height: 70%;

  max-height: 1900px;

  }

Мы установили максимальную высоту для элемента 1900 px. Также обратите внимание на указание height в процентах.

В указании размера элементов нет ничего нового:

  • max-height — максимальная высота.
  • max-width — максимальная ширина.

С минимальными значениями все аналогично: min-height и min-width по высоте и ширине, соответственно.

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

Адаптивная верстка изображений

До сих пор мы говорили об элементах документа обобщенно. Пусть это и очевидно, но необходимо упомянуть правила верстки изображений. Чтобы создать адаптивное изображение, задайте максимальную ширину элемента — например, 100 %:

  media {max-width 100% ;) {

Таким образом мы уточнили: максимальная ширина картинки должна составляет 100% от пользовательского экрана — например, браузерного окна.

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

Что делать, если нет поддержки CSS3. Альтернативы адаптивной верстке

Теоретически страницу можно верстать по отдельности: для нескольких типов устройств (например, для айфонов) или для нескольких разрешений экрана. Но такой подход гораздо более трудоемкий и времязатратный.

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

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

<script type=«text/javascript»

src=«http://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js»></script>
<script type=
«text/javascript»> $(document).ready(function(){
$(
window).bind(«resize», resizeWindow); function resizeWindow(e){ var
newWindowWidth = $(window).width();
// Когда ширина меньше 700 px,
используются “стили” для мобильного if(newWindowWidth < 700){
$(«link[rel=stylesheet]»).attr({href : «mobile.css»}); } else if(newWindowWidth > 700){
// Если ширина больше 700 px, использются “стили” для десктопа $(«link[rel=stylesheet]»).attr({href : «style.css»}); } } });

</script>

Резюме: главные законы

Чтобы не запутаться в основных моментах, давайте подытожим все, о чем мы сказали выше.

1. Размер компонентов страницы

Он адаптируется в зависимости от устройства пользователя. Самый простой пример — кнопка. На большом экране десктопа она может быть совсем небольшой, попасть по ней курсором не составит труда. Но на экране мобильного устройства кнопка небольшого размера сильно ухудшает юзабилити: по ней элементарно нельзя нажать. Адаптивная верстка решает и такие моменты, связанные с размерностью компонентов.

2. Стабильность + гибкость

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

3. Оптимизация изображений

Медиафайлы, особенно изображения, должны использовать компрессию. Вектор — для малодетализированных изображений, растр — для высокодетализированных.

4. Верхняя граница — камертон

Размер изображений назначается исходя из верхней границы экрана (этот компонент есть абсолютно на всех устройствах). Кроме этого, сама координатная система остается относительной — ведь картинка с разрешением 360 пикселей совершенно по-разному выглядит на экране айфона и Full HD-монитора.

5. Шрифты в адаптиве

Один из самых простых способов сделать шрифты отзывчивыми — изменить их в соответствии с размером области просмотра (viewport) или размером окна браузера. Существуют различные единицы области просмотра (относительно осей окна браузера), предоставляемые CSS, которые и будут использовать при создании адаптивных веб-страниц. Шрифты в адаптиве могут иметь формат TTF или просто загоняться в веб.

6. Вложенность

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

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

  1. Кроссбраузерность. Да, даже в 2022 году об этом приходится говорить. Убедитесь, что сайт будет ее поддерживать. За этим нужно обязательно проследить, чтобы юзабилити оставалось высоким независимо от того, какой браузер использует пользователь.
  2. Акцент на один тип устройств. При разработке дизайна сделайте акцент на конкретный тип устройств, который приносит сайту наибольшую посещаемость.
  3. Учитывайте масштаб сайта. Если речь идет об одностраничном лендинге, заточенном изначально только под мобильный трафик, нет особого смысла создавать сложный адаптивный дизайн. Можно создать универсальную мобильную версию под все типы устройств.
  4. Адаптив или мобильная версия. Еще раз оцените функциональность и дизайн существующего сайта. Возможно, мобильная версия будет приемлемым вариантом на первоначальном этапе.
  5. Сохранение функций. Если на сайте сложный функциональный элемент и его нужно сохранить для мобильных пользователей, путь только один — адаптивность.
  6. Сохранение дизайна. Когда дизайн сайта целиком основан на слайдерах или больших фоновых изображениях, его придется значительно переработать, так как подобные элементы неизбежно будут страдать в адаптивном воплощении.
  7. Тестинг, тестинг, тестинг. Обязательно проверяйте корректность поведения страницы на разных типах устройств. Смотрите, как ведут себя все важные элементы, например, кнопки в контактной форме. Нельзя отправлять верстку разработчикам, пока страница и все ее компоненты не будут протестированы для всех важных типов устройств.

При технических сложностях (или ограниченном бюджете, например) можно сделать сайт адаптивным частично: например, проработать только главные разделы и страницы, которые обеспечивают наибольшую посещаемость.

Сделаем сайт любой сложности с адаптивной версткой

Отзывчивый дизайн

  • Назад
  • Обзор: CSS layout
  • Далее (en-US)

На заре веб-дизайна страницы создавались для экрана определённого размера. Если у пользователя был экран большего или меньшего размера чем ожидал дизайнер, то результат мог быть от нежелательных полос прокрутки, до слишком длинной строки и плохого использования пространства. Поскольку становились доступны много различных размеров экранов, появилась концепция отзывчивого (адаптивного) веб-дизайна (responsive web design (RWD)) — набор методов, которые позволяют веб-страницам менять свой макет и внешний вид в соответствии с разной шириной экрана, разрешением и т.д. Это та самая, идея которая изменила подход к дизайну веба для множества устройств, и в этой статье мы поможем вам понять основные методы, которые вам необходимо знать, чтобы освоить его.

Необходимые знания: Основы HTML (изучите Введение в HTML), идея о том как работает CSS (изучите Введение в CSS и Устройство CSS.)
Задача: Понять базовые концепции и историю отзывчивого дизайна.

Исторические макеты сайтов

В какой-то момент истории при разработке веб-сайта у вас было два варианта:

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

Эти два подхода, как правило, приводили к тому, что веб-сайт лучше всего выглядел на экране человека, создавшего сайт! Жидкий сайт приводил к раздавленному дизайну на маленьких экранах (как видно ниже) и не читаемо длинным строкам на больших.

A layout with two columns squashed into a mobile size viewport.

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

Сайт с фиксированной шириной рисковал иметь горизонтальную полосу прокрутки на экранах меньших чем ширина сайта (как видно ниже) и много белого пространства на краях дизайна на больших экранах.

A layout with a horizontal scrollbar in a mobile viewport.

Примечание: Посмотрите этот простой макет с фиксированной шириной: пример, исходный код. Снова изучите результат по мере изменения размера окна браузера.

Когда мобильный веб стал становиться реальностью с первыми функциональными телефонами, компании желающие охватить мобильники начали создавать в основном специальные мобильные версии своих сайтов, с различными URL (часто что-то наподобие m.example.com или example.mobi). Это означало, что необходимо было разрабатывать и поддерживать в актуальном состоянии две отдельные версии сайта.

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

Гибкий макет до отзывчивого дизайна

Было разработано несколько подходов чтобы попытаться разрешить недостатки построения веб-сайтов жидким методом или методом с фиксированной шириной. В 2004 году Камерон Адамс написал пост Resolution dependent layout, описывающий метод создания дизайна который мог бы адаптироваться к разным разрешениям экрана. Этот подход требовал, чтобы JavaScript узнавал разрешение экрана и загружал корректный CSS.

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

Отзывчивый дизайн

Термин адаптивный дизайн был Придуман Итаном Маркоттом в 2010 году и описывал использование трёх методов в сочетании.

  1. Первой была идея жидких сеток, нечто что уже исследовала Гилленвотер, что можно прочитать в статье Маркотта — Fluid Grids (опубликовано в 2009 в A List Apart).
  2. Вторым методом была идея жидких изображений. Используя очень простой метод настройки свойства max-width на 100%, изображения будут становиться меньше если содержащий столбец становится уже чем изначальный размер изображения, но никогда не становится больше. Это позволяет изображению уменьшаться чтобы соответствовать столбцу гибких размеров, а не перекрываться с ним, но не расти и становиться пиксельным если столбец становится шире изображения.
  3. Третьим ключевым компонентом были медиавыражения. Медиавыражения позволяют переключать тип макета применяя только CSS то, что Камерон Адамс исследовал, используя JavaScript. Вместо того чтобы иметь один макет для всех размеров экранов, макет мог изменяться. Боковые панели можно перемещать для маленьких экранов, либо отображать альтернативную навигацию.

Очень важно понять, что адаптивный веб-дизайнэто не отдельная технология, это термин используемый, чтобы описать подход к веб-дизайну или набор лучших практик, используемых для создания макета, который может реагировать на используемое устройство для просмотра контента. В первоначальном исследовании Маркотта это означало гибкие сетки (с использованием floats) и медиавыражения, однако почти за 10 лет, прошедших с момента написания этой статьи, адаптивная работа стала стандартом по умолчанию. Современные методы макета CSS отзывчивы по своей сути, и у нас есть новые штучки, встроенные в веб-платформу для того, чтобы делать дизайн отзывчивых сайтов проще.

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

Медиавыражения

Отзывчивый дизайн появился благодаря медиавыражениям (media queries). Спецификация Media Queries Level 3 стала Рекомендованным Кандидатом в 2009 году, что означает, что она была признана готовой к реализации в браузерах. Медиавыражения позволяют нам проводить серию тестов (например, является ли экран пользователя больше, чем определённая ширина или разрешение) и выборочно применять CSS к стилю страницы соответственно с нуждами пользователя.

Например, следующее медиавыражение проверяет отображается ли текущая страница как экранная медиа (а не как печатный документ) и имеет ли область просмотра ширину как минимум 800 px. CSS будет применяться к селектору .container только если эти две вещи истины.

@media screen and (min-width: 800px) {
  .container {
    margin: 1em 2em;
  }
}

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

Общим подходом при использовании медиавыражений является создание простого одноколоночного макета для устройств с узкими экранами (например, мобильные телефоны), затем проверка для больших экранов и применение макета с несколькими столбцам, когда вы знаете, что у вас достаточно ширины экрана, чтобы уместить все. Такой подход часто называют mobile first дизайном.

Узнать больше о медиавыражениях можно в документации MDN.

Гибкие сетки

Отзывчивые сайты не просто меняют свой макет между контрольными точками, они построены на гибких сетках. Гибкая сетка подразумевает что вам не надо заботиться о каждом возможном существующем размере устройства и строить для них идеальный макет в пикселях. Такой подход был бы невозможен имея широкое множество существующих устройств разных размеров, как и факт того, что даже на ПК люди не всегда используют браузер с развёрнутым до максимума окном.

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

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

target / context = result

Например, если размер нашего целевого столбца — 60 пикселей, а контекст (или контейнер) в котором он находится — 960 пикселей, то мы делим 60 на 960 чтобы получить значение которое мы можем использовать в нашем CSS, после переноса десятичной точки вправо на 2 цифры.

.col {
  width: 6.25%; /* 60 / 960 = 0.0625 */
}

Этот подход сегодня можно найти во многих местах в Интернете и он задокументирован здесь в разделе макетов в нашей статье Устаревших методов макетов (en-US). В вашей работе вероятно, что вы столкнётесь с веб-сайтами, использующими этот подход, поэтому стоит понимать его, даже если вы не будете строить современные сайты используя гибкие сетки основанные на float.

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

A mobile view of the layout with boxes stacked on top of each other vertically.

На более широких экранах они перемещаются в два столбца:

A desktop view of a layout with two columns.

Современные технологии макетов

Современные методы макетов такие как Макет с несколькими столбцами, Flexbox, и Grid являются отзывчивыми по умолчанию. Они все предполагают, что вы пытаетесь создать гибкую сетку и дают вам более лёгкий способ сделать так.

Multicol

Самый старый из этих методов — это multicol, когда вы задаёте column-count, это отражает то на сколько столбцов вы хотите разбить ваш контент. Далее браузер рассчитывает их размер, размер, который изменится согласно размеру экрана.

.container {
  column-count: 3;
}

Если вместо этого вы зададите column-width, то вы определите минимальную ширину. Браузер создаст столько столбцов той ширины, сколько будет комфортно умещаться в контейнер, а затем поделит оставшееся пространство между всеми столбцами. Поэтому число столбцов будет меняться согласно тому сколько имеется места.

.container {
  column-width: 10em;
}

Flexbox

В Flexbox, в качестве исходного поведения, flex элементы будут сжиматься и распределять пространство между элементами в соответствии с пространством в их контейнере. Изменяя значения flex-grow и flex-shrink вы можете указать, как вы хотите, чтобы предметы вели себя когда они сталкиваются с большим или меньшим пространством вокруг себя.

В примере ниже каждый flex элемент будет принимать равное количество пространства во flex контейнере используя запись flex: 1 как описано в главе Flexbox: Гибкое изменение размеров flex элементов.

.container {
  display: flex;
}

.item {
  flex: 1;
}

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

CSS grid

В макете CSS Grid единицы измерения fr позволяют распределять доступное пространство между дорожками сетки. Следующий пример создаёт grid контейнер с тремя дорожками размером 1fr. Это создаст три вертикальные дорожки, каждая занимающая одну часть свободного пространства в контейнере. Вы можете узнать больше об этом подходе к созданию сетки в теме Изучение Макета Grid в разделе Гибкие grids с единицами fr.

.container {
  display: grid;
  grid-template-columns: 1fr 1fr 1fr;
}

Примечание: версия grid макета ещё проще, поскольку мы можем определить столбцы в .wrapper: пример, исходный код.

Отзывчивые изображения

Самый простой подход к отзывчивым изображениям был описан в ранних статьях Маркотта по отзывчивому дизайну. По сути, вы берёте изображение максимального размера, которое могло понадобиться, и уменьшаете его. Этот подход до сих пор используется и в большинстве таблиц стилей вы найдёте следующий CSS:

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

Отзывчивые изображения, используя элемент <picture> и атрибуты srcset и sizes элемента <img> оба решают эти проблемы. Вы можете указать несколько размеров вместе с «подсказками» (метаданные, описывающие размер экрана и разрешение, для которых изображение лучше всего подходит), и браузер выберет наиболее подходящее изображение для каждого устройства, гарантируя, что пользователь загрузит изображение подходящего размера для устройства, которое они используют.

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

Вы можете найти подробное руководство по отзывчивым изображениям в разделе изучения HTML на MDN.

Отзывчивая типографика

Элементом отзывчивого дизайна, не освещённого ранее в работе, была идея отзывчивой типографики. Главным образом, она описывает изменение размеров шрифта в зависимости от ширины экрана при помощи медиавыражений.

В этом примере, мы хотим задать нашему заголовку первого уровня 4rem, что значит, что он будет в четыре раза больше нашего базового размера шрифта. Это очень большой заголовок! Мы хотим этот гигантский заголовок только на экранах больших размеров, поэтому мы сначала создаём меньший заголовок, а затем используем медиавыржаение, чтобы переписать его для больших экранов, если мы знаем, что у пользователя есть экран размером как минимум 1200px.

html {
  font-size: 1em;
}

h1 {
  font-size: 2rem;
}

@media (min-width: 1200px) {
  h1 {
    font-size: 4rem;
  }
}

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

В мобильных версиях заголовок меньше:

A stacked layout with a small heading size.

На компьютерах, однако, мы видим больший размер заголовка:

A two column layout with a large heading.

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

Using viewport units for responsive typography

An interesting approach is to use the viewport unit vw to enable responsive typography. 1vw is equal to one percent of the viewport width, meaning that if you set your font size using vw, it will always relate to the size of the viewport.

The problem with doing the above is that the user loses the ability to zoom any text set using the vw unit, as that text is always related to the size of the viewport. Therefore you should never set text using viewport units alone.

There is a solution, and it involves using calc(). If you add the vw unit to a value set using a fixed size such as ems or rems then the text will still be zoomable. Essentially, the vw unit adds on top of that zoomed value:

h1 {
  font-size: calc(1.5rem + 3vw);
}

This means that we only need to specify the font size for the heading once, rather than set it up for mobile and redefine it in the media queries. The font then gradually increases as you increase the size of the viewport.

If you look at the HTML source of a responsive page, you will usually see the following <meta> tag in the <head> of the document.

<meta name="viewport" content="width=device-width,initial-scale=1">

This meta tag tells mobile browsers that they should set the width of the viewport to the device width, and scale the document to 100% of its intended size, which shows the document at the mobile-optimized size that you intended.

Why is this needed? Because mobile browsers tend to lie about their viewport width.

This meta tag exists because when the original iPhone launched and people started to view websites on a small phone screen, most sites were not mobile optimized. The mobile browser would, therefore, set the viewport width to 960 pixels, render the page at that width, and show the result as a zoomed-out version of the desktop layout. Other mobile browsers (e.g. on Google Android) did the same thing. Users could zoom in and pan around the website to view the bits they were interested in, but it looked bad. You will still see this today if you have the misfortune to come across a site that does not have a responsive design.

The trouble is that your responsive design with breakpoints and media queries won’t work as intended on mobile browsers. If you’ve got a narrow screen layout that kicks in at 480px viewport width or less, and the viewport is set at 960px, you’ll never see your narrow screen layout on mobile. By setting width=device-width you are overriding Apple’s default width=960px with the actual width of the device, so your media queries will work as intended.

So you should always include the above line of HTML in the head of your documents.

There are other settings you can use with the viewport meta tag, however in general the above line is what you will want to use.

  • initial-scale: Sets the initial zoom of the page, which we set to 1.
  • height: Sets a specific height for the viewport.
  • minimum-scale: Sets the minimum zoom level.
  • maximum-scale: Sets the maximum zoom level.
  • user-scalable: Prevents zooming if set to no.

You should avoid using minimum-scale, maximum-scale, and in particular setting user-scalable to no. Users should be allowed to zoom as much or as little as they need to; preventing this causes accessibility problems.

Примечание: There is a CSS @ rule designed to replace the viewport meta tag — @viewport — however, it has poor browser support. When both are used the meta tag overrides @viewport.

Summary

Responsive design refers to a site or application design that responds to the environment in which it is viewed. It encompasses a number of CSS and HTML features and techniques and is now essentially just how we build websites by default. Consider the sites that you visit on your phone — it is probably fairly unusual to come across a site that is the desktop version scaled down, or where you need to scroll sideways to find things. This is because the web has moved to this approach of designing responsively.

It has also become much easier to achieve responsive designs with the help of the layout methods you have learned in these lessons. If you are new to web development today you have many more tools at your disposal than in the early days of responsive design. It is therefore worth checking the age of any materials you are referencing. While the historical articles are still useful, modern use of CSS and HTML makes it far easier to create elegant and useful designs, no matter what device your visitor views the site with.

  • Назад
  • Обзор: CSS layout
  • Далее (en-US)

In this module

Понравилась статья? Поделить с друзьями:
  • Как написать адаптивную образовательную программу
  • Как написать агрессия правильно
  • Как написать агрессивный бит
  • Как написать агрегатор
  • Как написать агитационный пост