media запросы
Современная веб-разработка не может обойтись без media-запросов, ведь это самый практичный способ сделать сайт адаптивным. Сегодня предлагаю вам познакомиться с ними и сделать простенькое адаптивное меню
Как это работает?
Как же работает медиа запрос? - По факту, он просто изменяет указанные css-стили в зависимости от указанного свойства.
Почему нельзя использовать js функции для масштабирования блоков? - медиа запрос работает мгновенно, в то время как js сначала подгрузить оригинал и только потом его видоизменит
Синтаксис
Медиа запросы прописываются в css файле и имеют довольно логичный синтаксис
@media (свойство) { .классы блоков для изменения }
В целом, все интуитивно понятно. Ключевое слово @madia для объявления запроса, в скобах указывается свойство в зависимости от которого будут меняться стили( в данной статьей мы рассмотрим вариант бального масштабирования, поэтому будем использовать свойство max-width: n px )
Ну а в теле запроса указываются стили для определенных html-объектов.
Практика
Теперь предлагаю использовать наши знания на практике, сверстав адаптивное меню
P.s. код использован из моей последней работы
Разбираться верстку и стили я не вижу смысла поэтому просто покажу исходный код
html:
<header> <div class="container"> <nav class="menu"> <ul> <li><div class="logo"><a href="/">G3</a></div></li> <li class="menuelems"><a href="/news">Новости</a></li> <li class="menuelems"><a href="http://">Информация</a></li> <li class="menuelems"><a href="http://">Учительская</a></li> <li class="menuelems"><a href="http://">Наша жизнь</a></li> <li class="menuelems"><a href="http://">Стажировка</a></li> <li class="menuelems"><a href="http://">Медиацентр</a></li> <li class="menuelems"><a href="http://">Файлы</a></li> <li class="menuelems"><a href="http://">Прочее</a></li> <li class="hiddenmenu"><a href="http://"><img src="/static/img/shortmenu.png" alt=""></a></li> </ul> </nav> </div> </header>
Вы можете заметить тут li-элемент с классом hiddenmenu, запомните его он пригодится нам в дальнейшей работе
css:
header { background: rgb(00, 00, 00); } ul { display: flex; list-style-type: none; } .container { max-width: 1500px; margin: auto 10%; padding-top: 1.5%; padding-bottom: 1.5%; .menu ul li { list-style-type: none; font-size: 17px; width: 15%; padding-right: 1.5%; padding-left: 1.5%; color: white; text-align: center; line-height: 100%; } .menu ul li a { line-height: none; display: inline-block; vertical-align: middle; text-decoration: none; } .menuelems a { color: white; font-family: 'Pacifico', serif; } .logo { font-size: 30px; font-family: 'Mrs Sheppards', cursive; } .logo a { color: rgb(105,136,184); } .hiddenmenu { display: none; float: right; } .hiddenmenu a { display: inline-block; width: 100%; } .hiddenmenu a img { width: 60%; }
Еще одно важное правило для веб-разработки - весь контент должен находиться в контейнерах, они помогают контролировать масштаб контента через один стиль
И так, что тут следует отметить:
- Во-первых, элемент с классом hiddenmenu. В обычно состоянии этого элемента не видно благодаря заданному параметру display: none
- Во-вторых, для удобства я задал всем элементам меню один стиль, чтобы у них не возникало трудностей с исчезновением
Теперь начинаем творить волшебство, объявляем media-запрос с условием max-width: 420px. Делать будем адаптив под мобильные устройства. То есть, если экран пользователя меньше или равен 420px( а это чуть больше чем ширина 8 plus ) то стили указанные в теле запроса будут применены.
@media (max-width: 420px ) { .menuelems { display: none; } .hiddenmenu { display: block; margin-left: 55%; } .container { padding-top: 3%; margin: auto; } .logo { line-height: 100%; } }
Примерно так выглядит мой media-запрос, самое главное что здесь происходит - это изменение значения display у menuelems и у hiddenmenu. Как вы помните изначально hiddenmenu у нас был скрыт, а menuelems обладал свойством flex. Сейчас же мы немного изменили ситуацию и скрыли от пользователя menuelems, а вместо него проявили hiddenmenu
ВАЖНО
Медиа-запросы нужно всегда писать в конце css-файла.
Надеюсь я все понятно объяснил, а вот не посредственно результат нашего кода:
Если вам был интересен и полезен урок, то дайте знать фит-бэком)
Удачи, программисты!