Media Screen CSS в адаптивной верстке
Один комментарий 2249Пришло время разобраться, что такое Media Screen в CSS3 и как это применять в своих проектах. Это так называемые Медиа-запросы CSS, с помощью которых можно адаптировать элементы дизайна под разные размеры экранов. Например можно скрыть определенный блок на мобильных и наоборот показывать его только на широких экранах (десктопах). Как я с этим столкнулся. На клиентском сайте логотип на мобильных съезжает вправо, на компьютерах он наоборот слева. Была поставлена задача написать текст, который будет показан слева от лого на маленьких экранах. На больших его быть не должно. На выручку как раз и пришли медиа-запросы Media Screen CSS. Я знаю, что многие из вас очень любят, когда им показывают наглядно, поэтому приготовил пример.
Если кто-то думает, что это очень сложно и непостижимо, то сейчас ваше мнение изменится и вы на моем примере убедитесь в том, что не так страшен черт, как его малюют.
Для начала в head нужно добавить такую строчку:
<meta name="viewport" content="width=device-width, initial-scale=1.0"/> |
CSS код сейчас такой:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 | #header{ height:120px; position:relative padding:5px; } #content{ background:#fff000; padding:5px; } p { padding: 5px; } .txt { font: 65px Verdana bold; position: relative; top: 16px; color: #fff; left: 80px; } img{ margin:5px; } |
Ставим пред собой задачу на экранах шириной меньше 1000 px изменять цвет текста, фона, покрасить шапку, сместить значок вправо, а слева от него будет появляться надпись. И выглядеть это будет вот так:
То есть мы произведем кардинальные изменения на странице средствами Media screen CSS. Для этого пишем те самые медиа-запросы, которые будут определять ширину экрана девайса и выдавать тот или иной вид.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 | @media screen and (max-width: 1000px) { #header { background:#543567; /* Красим шапку */ } } @media screen and (min-width: 1000px) { .txt { font: 25px Verdana bold; /* Показываем заголовок */ position:relative; top; 15px; left: 30px; display:none; } } @media screen and (max-width: 1000px) { #content { background:#657493; /* Меняем цвет текста и фона содержимого */ color:#fff; } } @media screen and (max-width: 1000px) { img { float:right; /* Смещаем логотип вправо */ } } |
Более подробно можно посмотреть код демонстрационной страницы и самостоятельно разобраться что к чему.
Демо
Изменяйте ширину окна браузера, чтобы увидеть изменения. В Хроме есть функция просмотра на разных устройствах.
Надеюсь, что вы уловили мою мысль, которую я хотел донести до вас касательно медиа-запросов. Таким образом можно создавать отдельные таблицы стилей CSS специально для определенных устройств и даже для печати. Такой подход будет гораздо правильней, чем прописывать все стили для каждого устройства в одном файле. Подключается это вот так:
1 | <link rel= "stylesheet" href= "device.css" media= "only screen and (max-device width:640px)"/> |
Можно так же взять готовые стили из Bootstrap CSS и подогнать под свой дизайн.
Любая сумма на развитие сайта
Категории: Уроки Тэги: CSS пример
html — только экран HTML5 и CSS @media и
спросил
Изменено 10 месяцев назад
Просмотрено 1к раз
Я пытаюсь вставить только экран @media и (максимальная ширина: 600 пикселей) но ничего не происходит. Я пробовал что-то простое, чтобы посмотреть, работает ли оно, меняя фон, но ничего.
Нужно ли мне что-то писать в HTML, чтобы это работало??
**{ box-sizing: граница-коробка; } Только экран @media и (максимальная ширина: 600 пикселей) { тело { цвет фона: голубой; } } тело{ цвет фона: желтый; }**
Даже пытался, но это внизу, но ничего…
- html
- css
- медиа-запросы
Возможно, вы не видите изменений из-за специфики правил.
То есть так, как у вас написано:
@media только экран и (max-width: 600px) { тело { цвет фона: голубой; } } тело { цвет фона: желтый; }
Оба они имеют одинаковую специфичность, то есть отображается правило last .
Таким образом, даже если размер экрана ниже 600px
, будет отображаться цвет фона : желтый
.
Вместо этого вы должны определить правило запроса без мультимедиа сначала , затем следует правило медиа-запроса , второе .
Попробуйте это:
тело { цвет фона: желтый; } Только экран @media и (максимальная ширина: 600 пикселей) { тело { цвет фона: голубой; } }
Медиа-запрос должен быть написан после свойства, которое вы собираетесь сделать отзывчивым. В этом случае сначала вы пишете код для тела, а затем медиа-запрос.
Это пример
тело { цвет фона: желтый; } Только экран @media и (максимальная ширина: 600 пикселей) { тело { цвет фона: красный; } }
В дополнение к другому ответу в этой теме вам может потребоваться включить важный тег для тела в ваш медиа-запрос. Он должен будет переопределить основные стили тела выше.
Таким образом, это должно выглядеть следующим образом:
тело { цвет фона: желтый; } Только экран @media и (максимальная ширина: 600 пикселей) { тело { background-color: светло-голубой!важно; } }
Вышеупомянутое означает, что ваше тело будет иметь фоновый цвет желтый на устройствах с шириной БОЛЬШЕ , чем 600 пикселей, а фоновый цвет тела будет голубым на устройствах с шириной МЕНЬШЕ , чем 600 пикселей.
Зарегистрируйтесь или войдите в систему
Зарегистрируйтесь с помощью Google Зарегистрироваться через Facebook Зарегистрируйтесь, используя электронную почту и парольОпубликовать как гость
Электронная почтаТребуется, но не отображается
Опубликовать как гость
Электронная почтаТребуется, но не отображается
Нажимая «Опубликовать свой ответ», вы соглашаетесь с нашими условиями обслуживания и подтверждаете, что прочитали и поняли нашу политику конфиденциальности и кодекс поведения.
Использование медиа-запросов — CSS: каскадные таблицы стилей
Медиа-запросы позволяют применять стили CSS в зависимости от общего типа устройства (например, печать или экран) или других характеристик, таких как разрешение экрана или ширина области просмотра браузера. Медиа-запросы используются для следующего:
- Для условного применения стилей с помощью CSS
@media
и@import
at-правила. - Для таргетинга на определенные медиафайлы для
,,
и других элементов HTML с атрибутом
media=
. - Для тестирования и мониторинга состояния мультимедиа с помощью методов
Window.matchMedia()
иEventTarget.addEventListener()
.
Примечание:В примерах на этой странице используется CSS @media
для иллюстративных целей,но основной синтаксис остается одинаковым для всех типов медиа-запросов.
Медиа-запрос состоит из необязательного медиа-типа и любого количества медиа-функций выражений,которые могут произвольно комбинироваться различными способами с использованием
- Типы носителей определяют широкую категорию устройств,для которых применяется мультимедийный запрос:
все
,печать
,экран
. Тип является необязательным (предполагается,чтовсе
),за исключением случаев использованияне
илитолько
логических операторов. - Медиа-функции описывают конкретную характеристику пользовательского агента,устройства вывода или среды:
любое наведение
любой указатель
соотношение сторон
цвет
цветовая гамма
индекс цвета
соотношение сторон устройства
Устаревшийвысота устройства
">Устаревшийширина устройства
Устаревшийрежим отображения
динамический диапазон
форсированные цвета
сетка
высота
наведение
инвертированные цвета
монохромный
ориентация
блок перелива
встроенный перелив
указатель
предпочитает цветовую схему
предпочитает контраст
предпочитает уменьшенное движение
предпочитает пониженную прозрачность
">Экспериментальныйразрешение
сценарии
обновление
видео-динамический диапазон
ширина
.
hover
позволяет проверить,поддерживает ли устройство наведение курсора на элементы. Выражения функций мультимедиа проверяют их наличие или значение и являются совершенно необязательными. Каждое выражение функции мультимедиа должно быть заключено в круглые скобки. - Для составления сложного медиа-запроса можно использовать логические операторы:
вместо
,и
,атолько
. Вы также можете объединить несколько медиазапросов в одно правило,разделив их запятыми.
Медиа-запрос вычисляется как true
,когда тип мультимедиа (если он указан) соответствует устройству,на котором отображается документ и ,все выражения функций мультимедиа вычисляются как true.Запросы с неизвестными типами носителей всегда являются ложными.
Примечание:Таблица стилей с медиа-запросом,прикрепленным к ее тегу ,все равно будет загружена,даже если запрос вернет
false
,загрузка произойдет,но приоритет загрузки будет намного ниже. Тем не менее,его содержимое не будет применяться до тех пор,пока результат запроса не изменится на true
. Вы можете прочитать,почему это происходит,в блоге Tomayac Почему браузер загружает таблицу стилей с несоответствующими медиа-запросами.
Типы носителей описывают общую категорию данного устройства. Хотя веб-сайты обычно разрабатываются с учетом экранов,вы можете создать стили,предназначенные для специальных устройств,таких как принтеры или программы чтения с экрана со звуком. Например,этот CSS предназначен для принтеров:
Вы также можете настроить таргетинг на несколько устройств.Например,это правило @media
использует два медиа-запроса для таргетинга как на экран,так и на устройства печати:
См. тип носителя для списка всех типов носителя. Поскольку они описывают устройства в очень общих терминах,доступно лишь несколько;чтобы настроить таргетинг на более конкретные атрибуты,используйте вместо этого функции мультимедиа .
Медиа-функции описывают конкретные характеристики данного пользовательского агента,устройства вывода или среды. Например,вы можете применять определенные стили к широкоэкранным мониторам,компьютерам,использующим мыши,или к устройствам,которые используются в условиях низкой освещенности. В этом примере стили применяются,когда пользователь основной механизм ввода (например,мышь) может наводить курсор на элементы:
Многие медиа-функции представляют собой функций диапазона ,что означает,что они могут иметь префикс «min-» или «max-»,чтобы выразить ограничения «минимальное условие» или «максимальное условие».Например,этот CSS будет применять стили только в том случае,если ширина области просмотра вашего браузера равна или меньше 1250 пикселей:
Если вы создаете запрос функции мультимедиа без указания значения,вложенные стили будут использоваться до тех пор,пока значение функции не равно нулю (или none
на уровне 4). Например,этот CSS применим к любому устройству с цветным экраном:
Если функция не применяется к устройству,на котором работает браузер,выражения,связанные с этой мультимедийной функцией,всегда ложны.
Дополнительные примеры мультимедийных функций см. на справочной странице для каждой конкретной функции.
Иногда вам может понадобиться создать медиа-запрос,зависящий от нескольких условий. Вот тут-то и появляются логических операторов :не
,и
,а только
.Кроме того,вы можете объединить несколько медиа-запросов в список ,разделенный запятыми ;это позволяет применять одни и те же стили в разных ситуациях.
В предыдущем примере мы уже видели операторы и
,используемые для группировки носителя типа 9.0036 с функцией носителя . Операторы и
также могут объединять несколько медиа-функций в один медиа-запрос. Оператор ,а не
,тем временем,отрицает медиа-запрос,фактически изменяя его обычное значение на противоположное. Оператор only
не позволяет старым браузерам применять стили.
Примечание:В большинстве случаев тип носителя all
используется по умолчанию,если не указан другой тип. Однако,если вы используете не
или только
операторов,вы должны явно указать тип носителя.
Комбинация нескольких типов или функций
Ключевое слово и
объединяет функцию мультимедиа с типом мультимедиа или с другими функциями мультимедиа.В этом примере сочетаются две функции мультимедиа,чтобы ограничить стили альбомно-ориентированными устройствами с шириной не менее 30 ems:
Чтобы ограничить стили устройствами с экраном,вы можете связать мультимедийные функции с экран
тип носителя:
Проверка нескольких запросов
Вы можете использовать список,разделенный запятыми,для применения стилей,когда устройство пользователя соответствует любому из различных типов мультимедиа,функций или состояний. Например,следующее правило будет применять свои стили,если устройство пользователя имеет минимальную высоту 680 пикселей или экранное устройство в портретном режиме:
Возьмем приведенный выше пример,если у пользователя есть принтер с высотой страницы 800 пикселей,оператор media вернет true,потому что будет применен первый запрос.Аналогичным образом,если бы пользователь находился на смартфоне в портретном режиме с высотой области просмотра 480 пикселей,был бы применен второй запрос,и оператор мультимедиа все равно вернул бы true.
Инвертирование значения запроса
Ключевое слово вместо
инвертирует значение всего медиа-запроса. Это только отменит конкретный медиа-запрос,к которому он применяется. (Таким образом,это не будет применяться к каждому медиа-запросу в списке медиа-запросов,разделенных запятыми.) 9Ключевое слово 0039,а не ,не может использоваться для отрицания отдельного запроса функции,только для всего медиа-запроса. ,а не
оценивается последним в следующем запросе:
Это означает,что приведенный выше запрос оценивается следующим образом:
Это не будет оцениваться так:
В качестве другого примера можно привести следующий медиа-запрос:
Это означает,что приведенный выше запрос оценивается следующим образом:
Улучшение совместимости со старыми браузерами
Ключевое слово only
не позволяет старым браузерам,которые не поддерживают медиа-запросы с медиа-функциями,применять заданные стили.Не влияет на современные браузеры.
Спецификация медиа-запросов уровня 4 включает некоторые улучшения синтаксиса,чтобы сделать медиа-запросы с использованием функций,которые имеют тип «диапазона»,например ширину или высоту,менее подробными. Уровень 4 добавляет контекст диапазона для написания таких запросов. Например,используя функциональность max-
для ширины,мы могли бы написать следующее:
Примечание:Спецификация Media Queries Level 4 имеет достаточную поддержку в современных браузерах,но некоторые мультимедийные функции поддерживаются недостаточно. См. @media
Таблица совместимости браузеров для более подробной информации.
В Media Queries Level 4 это можно записать как:
Используя min-
и max-
,мы можем проверить ширину между двумя значениями следующим образом:
Это приведет к преобразованию в синтаксис уровня 4 следующим образом:
Медиа-запросы Уровень 4 также добавляет способы объединения медиа-запросов с использованием полной логической алгебры с и ,вместо и или .