Twitter Bootstrap 3: как использовать медиа-запросы?


371

Я использую Bootstrap 3 для создания адаптивного макета, в котором я хочу настроить несколько размеров шрифта в соответствии с размером экрана. Как я могу использовать медиа-запросы для создания такой логики?


7
Google "медиа-запросы", а затем проверьте, как их настроить загрузчик
koala_dev

Ответы:


651

Bootstrap 3

Вот селекторы, используемые в BS3, если вы хотите оставаться последовательными:

@media(max-width:767px){}
@media(min-width:768px){}
@media(min-width:992px){}
@media(min-width:1200px){}

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

<span class="visible-xs">SIZE XS</span>
<span class="visible-sm">SIZE SM</span>
<span class="visible-md">SIZE MD</span>
<span class="visible-lg">SIZE LG</span>

Bootstrap 4

Вот селекторы, используемые в BS4. В BS4 нет «самого низкого» параметра, потому что «очень маленький» является значением по умолчанию. Т.е. вы сначала закодируете размер XS, а затем переопределяете эти носители.

@media(min-width:576px){}
@media(min-width:768px){}
@media(min-width:992px){}
@media(min-width:1200px){}

Обновление 2019-02-11: информация BS3 по-прежнему точна, начиная с версии 3.4.0, обновлена ​​версия BS4 для новой сетки, точна по состоянию на 4.3.0.


116
Просто к вашему сведению, это может быть полезно для отладки:<span class="visible-xs">SIZE XS</span><span class="visible-sm">SIZE SM</span><span class="visible-md">SIZE MD</span><span class="visible-lg">SIZE LG</span>
Уильям Энтрикен

14
+1 для упорядочения запросов за счет увеличения размеров экрана в соответствии с методологией BS3 для мобильных устройств.
Джейк Бергер

5
А как насчет 480px (@ screen-xs)? Это появилось позже? Получил это отсюда .
Brejoc

1
Чтобы соответствовать BS3, используйте переменные размера экрана по умолчанию для каждого окна просмотра. См .: stackoverflow.com/a/24921600/2817112
Ориол

1
@brejoc BS3 + - «mobile-first» - представление «XS» (мобильное) - это представление по умолчанию в BS3 + ...
jave.web

252

Основываясь на ответе bisio и коде Bootstrap 3, я смог найти более точный ответ для тех, кто просто хочет скопировать и вставить полный набор медиазапросов в их таблицу стилей:

/* Large desktops and laptops */
@media (min-width: 1200px) {

}

/* Landscape tablets and medium desktops */
@media (min-width: 992px) and (max-width: 1199px) {

}

/* Portrait tablets and small desktops */
@media (min-width: 768px) and (max-width: 991px) {

}

/* Landscape phones and portrait tablets */
@media (max-width: 767px) {

}

/* Portrait phones and smaller */
@media (max-width: 480px) {

}

Здесь используется только голос с высоким голосом min-width, но вы max-widthтакже использовали , так в чем же разница?
Shaijut

Как программа начальной загрузки узнает, находится ли телефон в портретном режиме?
SuperUberDuper

@SuperUberDuper это не так. Он имеет дело только с элементами в соответствии с горизонтальным размером области просмотра, а не с разметкой экрана.
Крис

Разве заказ не должен быть от низкого до высокого?
Заключенный НОЛЬ

134

Если вы используете LESS или SCSS / SASS и используете версию Bootstrap для LESS / SCSS, вы также можете использовать переменные , если у вас есть к ним доступ. Меньший перевод ответа @ full-достойный будет следующим:

@media(max-width: @screen-xs-max){}
@media(min-width: @screen-sm-min){}  /* deprecated: @screen-tablet, or @screen-sm */
@media(min-width: @screen-md-min){}  /* deprecated: @screen-desktop, or @screen-md */
@media(min-width: @screen-lg-min){}  /* deprecated: @screen-lg-desktop, or @screen-lg */

Существуют также переменные для @screen-sm-maxи @screen-md-max, которые на 1 пиксель меньше, @screen-md-minи @screen-lg-min, соответственно, обычно для использования с@media(max-width) .

EDIT: Если вы используете SCSS / SASS, переменные начинаются с $вместо @, так что было бы и $screen-xs-maxт.д.


1
Когда я хочу редактировать данные на .grid.less, всегда переписывается из основного стиля. Есть ли какое-либо решение, или мне просто нужен весь стиль, который я добавил в медиа-запросы, чтобы добавить! Important?
Эдонбайрами

2
Я не могу заставить это работать. Компилятор жалуется, если я использую что-либо кроме жестко заданного числа.
laertiades

7
@JesseGoodfellow в приведенном выше примере используется синтаксис LESS; если вы используете SASS / SCSS github.com/twbs/bootstrap-sass/blob/master/vendor/assets/… , вы захотите $screen-xs-maxи т. д. (и если вы используете LESS / SCSS локально, но импортируете версию CSS Bootstrap, вам вообще не повезло.)
carpeliam

2
@screen-tablet, @screen-desktopИ @screen-lg-desktopустарели. Может быть, пришло время обновить ваш уже удивительный ответ. ;-)
Слипп Д. Томпсон

2
Предполагая, что вы строите бутстрап; это должно быть отмечено как ответ
Сидональдсон

44

Это значения из Bootstrap3:

/* Extra Small */
@media(max-width:767px){}

/* Small */
@media(min-width:768px) and (max-width:991px){}

/* Medium */
@media(min-width:992px) and (max-width:1199px){}

/* Large */
@media(min-width:1200px){}

4
Это правильный ответ. Должны быть "и" условия
Джейсон Миллер

Чтобы разрешить на больших экранах использовать css из css на среднем экране, удалите andусловия. @JasonMiller, так что это не обязательно, это зависит от спецификаций и требований шаблона.
Онимуша

29

Вот два примера.

Как только область просмотра станет шириной 700px или меньше, сделайте все теги h1 20px.

@media screen and ( max-width: 700px ) {
  h1 {
     font-size: 20px;
  }
}

Делайте все h1's 20px, пока область просмотра не достигнет 700px или больше.

@media screen and ( min-width: 700px ) {
  h1 {
     font-size: 20px;
  }
}

Надеюсь, это поможет: 0)


Вы используете font-size: 20pxдля h1тегов в обоих случаях. Для лучшего понимания вы можете использовать другое, font-sizeкак указано в вопросе. Кстати это все в порядке.
fWd82

21

Вот более модульный пример использования LESS для имитации Bootstrap без импорта меньшего количества файлов.

@screen-xs-max: 767px;
@screen-sm-min: 768px;
@screen-sm-max: 991px;
@screen-md-min: 992px;
@screen-md-max: 1199px;
@screen-lg-min: 1200px;

//xs only
@media(max-width: @screen-xs-max) {

}
//small and up
@media(min-width: @screen-sm-min) {

}
//sm only
@media(min-width: @screen-sm-min) and (max-width: @screen-sm-max) {

}
//md and up
@media(min-width: @screen-md-min) {

}
//md only
@media(min-width: @screen-md-min) and (max-width: @screen-md-max) {

}
//lg and up
@media(min-width: @screen-lg-min) {

}

Пробовал это. Работает отлично!
Томас Гонсалес

21

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

Меньше ввода

.when-xs(@rules) { @media (max-width: @screen-xs-max) { @rules(); } }
.when-sm(@rules) { @media (min-width: @screen-sm-min) { @rules(); } }
.when-md(@rules) { @media (min-width: @screen-md-min) { @rules(); } }
.when-lg(@rules) { @media (min-width: @screen-lg-min) { @rules(); } }

Пример использования

body {
  .when-lg({
    background-color: red;
  });
}

Вход SCSS

@mixin when-xs() { @media (max-width: $screen-xs-max) { @content; } }
@mixin when-sm() { @media (min-width: $screen-sm-min) { @content; } }
@mixin when-md() { @media (min-width: $screen-md-min) { @content; } }
@mixin when-lg() { @media (min-width: $screen-lg-min) { @content; } }

Пример использования:

body {
  @include when-md {
    background-color: red;
  }
}

Вывод

@media (min-width:1200px) {
  body {
    background-color: red;
  }
}

20

Начиная с Bootstrap v3.3.6 используются следующие медиазапросы, соответствующие документации, в которой указаны доступные классы реагирования ( http://getbootstrap.com/css/#responsive-utilities ).

/* Extra Small Devices, .visible-xs-* */
@media (max-width: 767px) {}

/* Small Devices, .visible-sm-* */
@media (min-width: 768px) and (max-width: 991px) {}

/* Medium Devices, .visible-md-* */
@media (min-width: 992px) and (max-width: 1199px) {}

/* Large Devices, .visible-lg-* */
@media (min-width: 1200px) {}

Медиа-запросы, извлеченные из репозитория Bootstrap GitHub из следующих меньших файлов: -

https://github.com/twbs/bootstrap/blob/v3.3.6/less/responsive-utilities.less https://github.com/twbs/bootstrap/blob/v3.3.6/less/variables.less


12

Или простой Sass-Compass:

@mixin col-xs() {
    @media (max-width: 767px) {
        @content;
    }
}
@mixin col-sm() {
    @media (min-width: 768px) and (max-width: 991px) {
        @content;
    }
}
@mixin col-md() {
    @media (min-width: 992px) and (max-width: 1199px) {
        @content;
    }
}
@mixin col-lg() {
    @media (min-width: 1200px) {
        @content;
    }
}

Пример:

#content-box {
    @include border-radius(18px);
    @include adjust-font-size-to(18pt);
    padding:20px;
    border:1px solid red;
    @include col-xs() {
        width: 200px;
        float: none;
    }
}

Спасибо. Я искал что-то, что приводит примеры загрузочного sass mixin (собственный пример bootstrap сложен со всем содержимым). Это многое объясняет! :)
CleverNode 22.10.15

11

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

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

вот пример в любом случае.

@media(min-width:1200px){

    h1 {font-size:34px}

}
@media(min-width:992px){

    h1 {font-size:32px}

}
@media(min-width:768px){

    h1 {font-size:28px}

}
@media(max-width:767px){

    h1 {font-size:26px}

}

Также имейте в виду, что окно 480 просмотра было отброшено в начальной загрузке 3.


6

Мы используем следующие медиазапросы в наших файлах Less, чтобы создать ключевые точки останова в нашей системе координат.

/* Small devices (tablets, 768px and up) */
@media (min-width: @screen-sm-min) { ... }

/* Medium devices (desktops, 992px and up) */
@media (min-width: @screen-md-min) { ... }

/* Large devices (large desktops, 1200px and up) */
@media (min-width: @screen-lg-min) { ... }

смотрите также на Bootstrap


5

вы можете видеть в моем примере размеры шрифта и цвета фона меняются в зависимости от размера экрана

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<style>
body {
    background-color: lightgreen;
}
/* Custom, iPhone Retina */ 
@media(max-width:320px){
    body {
        background-color: lime;
        font-size:14px;
     }
}
@media only screen and (min-width : 320px) {
     body {
        background-color: red;
        font-size:18px;
    }
}
/* Extra Small Devices, Phones */ 
@media only screen and (min-width : 480px) {
     body {
        background-color: aqua;
        font-size:24px;
    }
}
/* Small Devices, Tablets */
@media only screen and (min-width : 768px) {
     body {
        background-color: green;
        font-size:30px;
    }
}
/* Medium Devices, Desktops */
@media only screen and (min-width : 992px) {
     body {
        background-color: grey;
        font-size:34px;
    }
}
/* Large Devices, Wide Screens */
@media only screen and (min-width : 1200px) {
     body {
        background-color: black;
        font-size:42px;
    }
}
</style>
</head>
<body>
<p>Resize the browser window. When the width of this document is larger than the height, the background-color is "lightblue", otherwise it is "lightgreen".</p>
</body>
</html>


2

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

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

//loader.less

// this twbs include adds all bs functionality, including added libraries such as elements.less, and our custom variables
@import '/app/Resources/less/bootstrap.less';

/*
* Our base custom twbs overrides
* (phones, xs, i.e. less than 768px, and up)
* no media query needed for this one since this is the default in Bootstrap
* All styles initially go here.  When you need a larger screen override, move those     
* overrides to one of the responsive files below
*/
@import 'base.less';

/*
* Our responsive overrides based on our breakpoint vars
*/
@import url("sm-min.less") (min-width: @screen-sm-min); //(tablets, 768px and up)
@import url("md-min.less") (min-width: @screen-md-min); //(desktops, 992px and up)
@import url("large-min.less") (min-width: @screen-lg-min); //(large desktops, 1200px and up)

base.less будет выглядеть так

/**
* base.less
* bootstrap overrides
* Extra small devices, phones, less than 768px, and up
* No media query since this is the default in Bootstrap
* all master site styles go here
* place any responsive overrides in the perspective responsive sheets themselves
*/
body{
  background-color: @fadedblue;
}

sm-min.less будет выглядеть так

/**
* sm-min.less
* min-width: @screen-sm-min
* Small devices (tablets, 768px and up)
*/
body{
  background-color: @fadedgreen;
}

ваш индекс просто должен загрузить loader.less

<link rel="stylesheet/less" type="text/css" href="loader.less" />

очень просто..


Привет, я пытаюсь использовать меньше 2 дней в начальной загрузке, но все еще пытаюсь. Не могли бы вы помочь мне в отношении меньшего количества использования Windows. Я прочитал много статей и статей, но не нашел правильных решений. Думаю, вы можете мне помочь. Спасибо заранее
Muddasir Abbas

вам нужно убедиться, что вы включили меньше библиотек javascript, тогда ваше приложение будет знать, что делать с этими файлами. как меньше вы включаете в свое заявление, зависит только от вас. я использую библиотеку, найденную на github, через сборку. Вы не должны это делать. Вы можете просто включить файл javascript, а затем загрузить свой файл less через стандартный метатег в стиле css. Вы не беспокоитесь о компиляции. эта информация здесь. lesscss.org/#client-side-usage .
Буб

2

Bootstrap в основном использует следующие диапазоны медиа-запросов - или точки останова - в наших исходных файлах Sass для нашей компоновки, системы сетки и компонентов.

Очень маленькие устройства (портретные телефоны, менее 576 пикселей) Нет медиазапроса, xsтак как это по умолчанию в Bootstrap

Маленькие устройства (ландшафтные телефоны, 576px и выше)

@media (min-width: 576px) { ... }

Средние устройства (планшеты, 768 пикселей и выше)

@media (min-width: 768px) { ... }

Большие устройства (рабочие столы, 992px и выше)

@media (min-width: 992px) { ... }

Очень большие устройства (большие рабочие столы, 1200px и выше)

@media (min-width: 1200px) { ... }

Поскольку мы пишем наш исходный CSS на Sass, все наши медиа-запросы доступны через Sass mixins:

Для точки останова xs не требуется медиазапрос, так как это эффективно @media (min-width: 0) { ... }

@include media-breakpoint-up(sm) { ... }
@include media-breakpoint-up(md) { ... }
@include media-breakpoint-up(lg) { ... }
@include media-breakpoint-up(xl) { ... }

Для глубокого понимания, пожалуйста, пройдите по ссылке ниже

https://getbootstrap.com/docs/4.3/layout/overview/


1

@media только экран и (максимальная ширина: 1200 пикселей) {}

@media только экран и (максимальная ширина: 979 пикселей) {}

@media только экран и (максимальная ширина: 767 пикселей) {}

@media только экран и (максимальная ширина: 480 пикселей) {}

@media только экран и (максимальная ширина: 320 пикселей) {}

@media (минимальная ширина: 768 пикселей) и (максимальная ширина: 991 пикселей) {}

@media (min-width: 992px) и (max-width: 1024px) {}


0

Используйте медиа-запросы для IE;

@media only screen 
and (min-device-width : 320px) 
and (max-device-width : 480px) 
and (orientation : landscape) and (-ms-high-contrast: none), (-ms-high-contrast: active) {
}
@media only screen 
and (min-device-width : 360px) 
and (max-device-width : 640px) 
and (orientation : portrait) and (-ms-high-contrast: none), (-ms-high-contrast: active) {
}

0

:)

В последней загрузке (4.3.1), используя SCSS (SASS), вы можете использовать один из @mixin из /bootstrap/scss/mixins/_breakpoints.scss

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

@mixin media-breakpoint-up($name, $breakpoints: $grid-breakpoints)

Среда максимальной ширины точки останова. Нет запроса на самую большую точку останова. Делает @content применимым к заданной точке останова и уже.

@mixin media-breakpoint-down($name, $breakpoints: $grid-breakpoints)

Носитель, который охватывает несколько точек останова. Заставляет @content применяться между минимальной и максимальной точками останова

@mixin media-breakpoint-between($lower, $upper, $breakpoints: $grid-breakpoints)

Носитель между минимальной и максимальной шириной точки останова. Нет минимума для самой маленькой точки останова и нет максимума для самой большой. Заставляет @content применяться только к заданной точке останова, а не к областям просмотра шире или уже.

@mixin media-breakpoint-only($name, $breakpoints: $grid-breakpoints)

Например:

.content__extra {
  height: 100%;

  img {
    margin-right: 0.5rem;
  }

  @include media-breakpoint-down(xs) {
    margin-bottom: 1rem;
  }
}

Документация:

Удачного кодирования;)


-1

Чтобы улучшить основной ответ:

Вы можете использовать медиа- атрибут <link>тега (он поддерживает медиа-запросы), чтобы загрузить только тот код, который нужен пользователю.

<link href="style.css" rel="stylesheet">
<link href="deviceSizeDepending.css" rel="stylesheet" media="(min-width: 40em)">

При этом браузер загрузит все CSS-ресурсы независимо от атрибута media . Разница в том, что если media-запрос атрибута media оценивается как false, то этот файл .css и его содержимое не будут блокировать рендеринг.

Поэтому рекомендуется использовать атрибут media в <link>теге, поскольку он гарантирует лучшее взаимодействие с пользователем.

Здесь вы можете прочитать статью Google об этой проблеме https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css.

Некоторые инструменты, которые помогут вам автоматизировать разделение кода CSS на разные файлы в соответствии с вашими медиа-запросами.

Webpack https://www.npmjs.com/package/media-query-plugin https://www.npmjs.com/package/media-query-splitting-plugin

PostCSS https://www.npmjs.com/package/postcss-extract-media-query

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.