September 24, 2020

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-файла.

Надеюсь я все понятно объяснил, а вот не посредственно результат нашего кода:

Стандартная версия
Адаптивная версия

Если вам был интересен и полезен урок, то дайте знать фит-бэком)

Удачи, программисты!