- Денис Горелов
- CSS и CSS3
- Просмотров: 0
CSS3 Медиа-запросы (Media queries CSS), позволяют реализовать как адаптивный веб-дизайн так и всякого рода оформление. В данном материале по свешенным Media queries мы реализуем пример как делаются адаптивные сайты.
See the Pen aVRZxO by Denis (@Dwstroy) on CodePen.
Из видео вы узнаете:
- что такое Media queries и его составляющие элементы;
- как формируется медиа запросы;
- рассмотрим практически пример адаптивного дизайна сайта.
CSS3 медиа запросы или (media queries) – это определенный набор стилей и логических выражений, которые позволяют применять различные стили в зависимости от выполнения каких то дополнительных условий.
Используются для проверки ширины и высоты окна браузера, а также ширины и высоты экрана устройства, проверки его ориентации (альбомная или портретная) и многое другое.
Медиа запрос состоит
@media screen and (max-width: 480px) {
h1 {
font-size: 25px;
}
}
Медиа запрос состоит из типа носителя, одного или нескольких условий, что представляет собой логическое выражение, которое может быть истинным или ложным, и это все позволяет проверять какие-то свойства самого устройства.
Типы носителя
Все запросы начинаются с правила @madia, далее идет условие, в котором пишем тип носителя (screen), он позволяет получить точную информацию, на каком устройстве открыта данная страница. Помимо этого типа имеются и другие носители как print, all и speech.
Типы носителей включают в себя
- all – Подходит для всех видов устройств. Это значение используется по умолчанию.
- print – Просмотр на экране страничек в режиме предварительного просмотра печати.
- screen – Просмотр на экране цветных компьютерных мониторах.
- speech - Речевые синтезаторы, а также программы для воспроизведения текста вслух. Сюда, например, можно отнести речевые браузеры.
В CSS2.1 имелись несколько дополнительных типов, но они приняты устаревшими и в Media Queries 4 не задействованы.
Устаревшие типы носителей:
- braille - Устройства, основанные на системе Брайля, которые предназначены для чтения слепыми людьми.
- embossed - Принтеры, использующие для печати систему Брайля.
- handheld - Смартфоны и аналогичные им аппараты.
- projection – Проекторы.
- tty - Устройства с фиксированным размером символов (телетайпы, терминалы, устройства с ограничениями дисплея).
- tv – Телевизоры.
В большей степени используются два типа носителей print и screen, так как они включают в себя любое устройство для отображения на экране, и самое главное поддерживаются большинством браузеров.
Логические операторы
Затем идут логические операторы, при помощи которых можно писать дополнительные условия, если это необходимо.
К примеру, and, эквивалентно «И», и в этом случае если одно из условий будет не истиной значить и все выражение, является ложью.
Следующий оператор «запитая», которая эквивалентна «ИЛИ», и в данном случае если одно из условий верное, значит выражение является истиной.
Оператор not отрицание, а only позволяет скрыть стиль от всех браузерах, которые не поддерживают данное условие.
Логические операторы:
- and – Связывает друг с другом разные условия (эквивалентно «и»);
- not – Позволяет сработать медиа запросу в противоположном случае (эквивалентно «отрицание»);
- only – Скрывает стили для браузера, которые не поддерживают данные условия;
- , - Запятая работает по аналои с логическим оператором or (эквивалентно «или»);
Условие медиа запроса
Затем идет условие, где можно задавать ширину области просмотра, ее высоту, проверять соотношение сторон, ориентацию, разрешения экрана в пикселях и так далее. В принципе их там не много, более подробный список будет в описании под роликом.
Самые распространенные условия это максимальная и минимальная ширина max-width min-widt
Прописав (max-width: 480px), сам стиль в нутрии скобок будет применен в том случае, когда ширина экрана менее 480 пикселей.
Именно на таких примерах базируется адаптивная верстка, когда нам нужно применить стили под определенные расширения экраны мобильного устройства и все это делается через CSS (media queries).
- width min-width max-width – ширина;
- height min-height max-height – высота;
- device-width min-device-width max-device-width – ширина на устройстве;
- device-height min-device-height max-device-height orientation - высота на устройстве;
- aspect-ratio min-aspect-ratio max-aspect-ratio – соотношение сторон;
- device-aspect-ratio min-device-aspect-ratio max-device-aspect-ratio - соотношение сторон на устройстве;
- resolution min-resolution max-resolution – разрешение экрана (количество пикселей);
- color min-color max-color – количество бит на каждые из цветных компонентов устройства вывода;
- color-index min-color-index max-color-index – количество записей в таблице подставноки цветов;
- monochrome min-monochrome max-monochrome – количество битов на пиксель монохромного устройства;
- scan grid – сетка сканирования;
Описываем основную структуру в HTML и CSS
Теперь рассмотрим, как это выглядит в действительности на примере создания простенького каркаса сайта.
Создаем пять блоков, шапка сайта header, верхнее меню top_menu, левый сайт бар sideLeft, область для контента content и подвал footer.
<div class="header"></div> <div class="top_menu"></div> <div class="sideLeft"></div> <div class="content"></div> <div class="footer"></div>
Затем определим для них стили
Для header назначим свой цвет, укажем ширину в 100%, высоту в 200 пик. и закруглим углы.
.header {
background: #aefff7;
width: 100%;
height: 200px;
border-radius: 5px;
}
Верхнему меню назначим, свой цвет, ширину в 100%, сделаем отступ сверху в 5 пик., высоту в 50 пик.
.top_menu {
background: #87c5ff;
width: 100%;
margin-top: 5px;
height: 50px;
}
Сайт бару, прописываем свои стили и прижмем его к левому краю:
.sideLeft {
background: #81ffb6;
width: 30%;
height: 354px;
margin-top: 5px;
padding: 1px 0;
float: left;
}
Далее для области под контент пишем свои стили:
.content {
background: #fefffd;
width: 69%;
margin-top: 5px;
height: 355px;
float: right;
}
И завершающий блок это футер, делаем его на всю ширину в своем цвете:
.footer {
background: #91a43c;
width: 100%;
margin-top: 5px;
height: 70px;
}
Из-за того что sideLeft и content являются плавающими элементами за счет float, нужно сбросить обтекание этих блоков при помощи clear:both;.
Создадим класс и вставим дополнительный блок с этим классом:
.clear{
clear:both;
} <div class="clear"></div>
У нас получился такого рода резиновый шаблон сайта, условно разделенный на блоки.
Подключаем CSS media queris
Для наглядной адаптации, сделаем шаблон фиксированной ширины, обернем все наши блоки в обертку, назначим обертке ширину в 980 пик. и отцентрируем по середине экрана.
<div class="wrapper"> <div class="header"></div> <div class="top_menu"></div> <div class="sideLeft"></div> <div class="content"></div> <div class="clear"></div> <div class="footer"></div> </div>
.wrapper {
width: 940px;
margin: 50px auto;
}
Затем для всех медиа запросов создадим отдельный файл media-queries.css, который подключим после основного стиля.
<link href="media-queries.css" rel="stylesheet" type="text/css">
Размер экрана меньше 992px
Открываем файл media-queries.css на редактирование, и напишем свое условие для дестопных экранов.
Начинаем с правила @media, скрываем стиле для браузеров которые их не поддерживают only, затем пишем носитель screen и логический оператор and «И», далее условие максимально ширины в 992 пик. то есть если страничка будет меньше данной ширины тогда применим наши стили.
Затем, в фигурных скобках описываем стили для данного расширения:
/* Medium Devices, Desktops */
@media only screen and (max-width : 992px) {
}
Ширину обертки уменьшим на 750 пик.
.wrapper {
width: 750px;
}
Поменяем у блоков цвет, а у footer немного уменьшим высоту:
.wrapper {
width: 750px;
}
.header {
background: #a1ece5;
}
.top_menu {
background: #64f1eb;
}
.sideLeft {
background: #80e47e;
}
.content {
background: #f0f1ef;
}
.footer {
background: #9ea424;
height: 45px;
}
}
Размер экрана меньше 768px
Затем опишем медеа запрос для средних экранов, таких как планшеты. Я скопирую предыдущий стили, заменю максимальную ширину на 768 пик. и в нем опишу стили для данного расширения экрана.
/* Small Devices, Tablets */
@media only screen and (max-width : 768px) {
}
Обертку уменьшаем до 450 пик.
.wrapper {
width: 450px;
}
У header поменяем цвет, его высоту, и сделаем радиус в 3 пик.
.header {
background: #86ebff;
height: 100px;
border-radius: 3px;
}
Тоже самое проделаем с top_menu
.top_menu {
background: #2ca9b7;
margin-top: 4px;
height: 25px;
}
Левый сайт бар, меняем цвет, делаем по всей ширине, уменьшаем отступ до 4 пик. убираем обтекание.
.sideLeft {
background: #5ab37f;
width: 100%;
margin-top: 4px;
float: none;
}
Для наглядности добавим в сайт бар дополнительные блоки и оформим их надлежащим образом.
<div class="sideLeft"> <div class="bar"></div> <div class="bar"></div> <div class="bar"></div> </div>
Убираем высоту .sideLeft
.bar {
background: #a5fdcf;
border-radius: 5px;
border: 1px solid #129d52;
margin: 3px auto;
width: 95%;
height: 110px;
}
Для блока под контент, меняем цвет, делаем ширину в 100%, отступ в 4 пик, уменьшаем высоту и убираем обтекание.
.content {
background: #dbdddb;
width: 100%;
margin-top: 4px;
height: 250px;
float: none;
}
Затем footer немного уменьшим по высоте, цвет и отступ немного подкорректируем:
.footer {
background: #758430;
margin-top: 4px;
height: 35px;
}
Давайте для топ меню добавим иконку в виде кнопки как на мобильных устройствах и для этого создаем дополнительные блоки.
<div class="knopka"> <div class="lan"></div> <div class="lan"></div> <div class="lan"></div> </div>
Затем опишем общие стили, и скроем их:
.top_menu {
background: #87c5ff;
width: 100%;
margin-top: 5px;
height: 50px;
position: relative;
}
.knopka {
display: none;
width:32px;
height: 21px;
top: 2px;
left: 6px;
background: #6d6e6d;
border-radius: 2px;
position: absolute;
}
.lan {
width: 29px;
height: 3px;
background: #2b2828;
margin: 3px auto;
}
Размер экрана меньше 480px
Затем опишем стили под маленькие расширения экранов которые подходят под мобильные устройства.
/* Extra Small Devices, Phones */
@media only screen and (max-width : 480px) {
}
Делаем обертку в 320 пик.
.wrapper {
width: 320px;
}
У остальных блоков поменяем цвет.
.header {
background: #3dfff2;
}
.top_menu {
background: #328e8d;
}
.sideLeft {
background: #91b399;
}
.content {
background: #f2f4f2;
}
.footer {
background: #6d6e6d;
}
}
Для более, плавных переходов, воспользуемся свойством transition, и применим его ко всем элементам.
* {
transition: all .2s;
}
На меленьких расширений правильней было бы, если после верхнего меню, сразу шел контент, а затем, правый сайтбар. Для того что бы реализовать это в нашем случае достаточно блок с контентом переместить выше сайтбара.
<div class="content"></div> <div class="sideLeft"> <div class="bar"></div> <div class="bar"></div> <div class="bar"></div> </div>
Подключаем Media Queries Javascript
Медио запросы не поддерживаются браузером Internet Explorer 8 и более ранних версий, для них нужно подключить дополнительный Javascript файл css3-mediaqueries.js.
<!--[if lt IE 9]>
<script src="http://css3-mediaqueries-js.googlecode.com/svn/trunk/css3-mediaqueries.js"></script>
<![endif]-->

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



