Twitter Bootstrap 3: ¿cómo usar las consultas de medios?

371

Estoy usando Bootstrap 3 para construir un diseño receptivo donde quiero ajustar algunos tamaños de fuente de acuerdo con el tamaño de la pantalla. ¿Cómo puedo usar consultas de medios para hacer este tipo de lógica?

Rui
fuente
77
google "consultas de medios" luego verifique cómo bootstrap los ha configurado
koala_dev

Respuestas:

651

Bootstrap 3

Estos son los selectores utilizados en BS3, si desea mantenerse consistente:

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

Nota: para su información, esto puede ser útil para la depuración:

<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

Aquí están los selectores utilizados en BS4. No hay configuración "más baja" en BS4 porque "extra pequeño" es el valor predeterminado. Es decir, primero codificaría el tamaño XS y luego anularía estos medios.

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

Actualización 2019-02-11: la información de BS3 sigue siendo precisa a partir de la versión 3.4.0, BS4 actualizada para la nueva cuadrícula, precisa a partir de 4.3.0.

William Entriken
fuente
116
Solo para su información, esto puede ser útil para la depuración:<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>
William Entriken
14
+1 para ordenar consultas al aumentar el tamaño de la pantalla, manteniéndose consistente con la metodología móvil de BS3.
Jake Berger
55
¿Qué pasa con 480px (@ screen-xs)? ¿Eso apareció más tarde? Lo tengo desde aquí .
brejoc
1
Para ser coherente con BS3, utilice las variables de tamaño de pantalla predeterminadas para cada ventana gráfica. Ver: stackoverflow.com/a/24921600/2817112
Oriol el
1
@brejoc BS3 + es "móvil primero" - la vista "XS" (móvil) es la vista predeterminada en BS3 + ...
jave.web
252

Basado en la respuesta de bisio y el código Bootstrap 3, pude encontrar una respuesta más precisa para cualquiera que solo buscara copiar y pegar el conjunto completo de consultas de medios en su hoja de estilo:

/* 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) {

}
Chris Clower
fuente
Aquí la respuesta con alta votación solo usa min-width, pero usted max-widthtambién la ha usado , entonces, ¿cuál es la diferencia ?, ¿es necesario?
shaijut
¿Cómo sabe Bootstrap si el teléfono está en modo vertical?
SuperUberDuper el
@SuperUberDuper no lo hace. Solo trata con elementos de acuerdo con el tamaño horizontal de la ventana gráfica en lugar del diseño de pantalla.
Chris Clower
¿No debería ser el pedido de BAJO a ALTO?
Prisionero CERO
134

Si está usando MENOS o SCSS / SASS y está usando una versión MENOS / SCSS de Bootstrap, también puede usar variables , siempre que tenga acceso a ellas. Una MENOR traducción de la respuesta de @ full -cente sería la siguiente:

@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 */

También hay variables para @screen-sm-maxy @screen-md-max, que son 1 píxel menos que @screen-md-miny @screen-lg-min, respectivamente, típicamente para usar con@media(max-width) .

EDITAR: si está utilizando SCSS / SASS, las variables comienzan con un en $lugar de un @, por lo que sería $screen-xs-maxetc.

carpeliam
fuente
1
Cuando quiero editar datos en .grid.less siempre se sobrescribe desde el estilo principal. ¿Hay alguna solución o solo necesito agregar todo el estilo que he agregado en las consultas de medios?
edonbajrami
2
No puedo hacer que esto funcione. El compilador se queja si uso algo además de un número codificado.
laertiades
77
@JesseGoodfellow el ejemplo anterior usa una sintaxis MENOS; si está utilizando SASS / SCSS github.com/twbs/bootstrap-sass/blob/master/vendor/assets/… , desearía $screen-xs-maxetc. (Y si está utilizando LESS / SCSS localmente pero importando la versión CSS de Bootstrap, no tienes suerte)
carpeliam
2
@screen-tablet, @screen-desktopy @screen-lg-desktophan quedado en desuso. Tal vez sea hora de actualizar su respuesta ya increíble. ;-)
Slipp D. Thompson
2
Asumiendo que construyes bootstrap; esto debería marcarse como la respuesta
sidonaldson
44

Estos son los valores de 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){}
shlomia
fuente
44
Esta es la respuesta correcta. Debe tener "y" condiciones
Jason Miller
Para permitir que las pantallas grandes utilicen el CSS desde el CSS de la pantalla media, elimine las andcondiciones. @JasonMiller, así que no es exactamente un "must", depende de las especificaciones y requisitos de la plantilla.
Onimusha
29

Aquí hay dos ejemplos.

Una vez que la ventana gráfica tenga 700px de ancho o menos, haga que todas las etiquetas h1 tengan 20px.

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

Haga que todos los h1 sean 20px hasta que la ventana gráfica alcance 700px o más.

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

Espero que esto ayude: 0)

Jeffpowrs
fuente
Se usa font-size: 20pxpara h1etiquetas en ambos casos. Para una mejor comprensión, es posible que haya utilizado diferentes, font-sizecomo se hizo en la pregunta. Por cierto, todavía está bien.
fWd82
21

Aquí hay un ejemplo más modular que usa MENOS para imitar Bootstrap sin importar menos archivos.

@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) {

}
internet-nico
fuente
Intenté esto. ¡Funciona perfectamente!
Tomás González el
21

Basado en las respuestas de otros usuarios, escribí estos mixins personalizados para un uso más fácil:

Menos entrada

.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(); } }

Ejemplo de uso

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

Entrada 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; } }

Ejemplo de uso:

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

Salida

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

A partir de Bootstrap v3.3.6, se utilizan las siguientes consultas de medios que corresponden con la documentación que describe las clases receptivas que están disponibles ( 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) {}

Consultas multimedia extraídas del repositorio Bootstrap GitHub de los siguientes archivos menos: -

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

Suleman C
fuente
12

O simple 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;
    }
}

Ejemplo:

#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;
    }
}
usuario956584
fuente
Gracias. Estaba buscando algo que dé ejemplos de la combinación de bootstrap sass (el propio ejemplo de bootstrap es complicado con todo el contenido). Esto explica mucho! :)
CleverNode
11

tenga en cuenta que evitar la escala de texto es la razón principal por la que existen diseños receptivos. Toda la lógica detrás de los sitios receptivos es crear diseños funcionales que muestren efectivamente su contenido para que sea fácilmente legible y utilizable en múltiples tamaños de pantalla.

Aunque es necesario escalar el texto en algunos casos, tenga cuidado de no miniaturizar su sitio y perder el punto.

Heres un ejemplo de todos modos.

@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}

}

También tenga en cuenta que la vista de 480 se ha eliminado en bootstrap 3.

Joshua Watson
fuente
6

Utilizamos las siguientes consultas de medios en nuestros archivos Less para crear los puntos de interrupción clave en nuestro sistema de cuadrícula.

/* 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) { ... }

ver también en Bootstrap

csehasib
fuente
5

puedes ver en mi ejemplo los tamaños de fuente y los colores de fondo están cambiando de acuerdo con el tamaño de la pantalla

<!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>

Ganesh Putta
fuente
2

Aquí hay una solución única aún más fácil, que incluye archivos receptivos separados basados ​​en consultas de medios.

Esto permite que toda la lógica de consulta de medios e incluya lógica solo tenga que existir en una página, el cargador. También permite que las consultas de los medios no llenen las propias hojas de estilo receptivas.

//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 se vería así

/**
* 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 se vería así

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

su índice solo tendría que cargar el cargador.

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

pan comido..

culpa
fuente
Hola, estoy tratando de usar menos de 2 días en bootstrap pero aún lo intento. ¿Podrías ayudarme con menos uso en Windows? Leí muchos artículos y artículos, pero no encontré las soluciones adecuadas, creo que me pueden ayudar. Gracias de antemano
Muddasir Abbas
debe asegurarse de incluir la biblioteca con menos JavaScript, entonces su aplicación sabrá qué hacer con esos archivos. cómo usted incluye menos en su solicitud depende de usted. Yo uso una biblioteca que se encuentra en github, a través de Assetic. No tienes que hacer eso. solo puede incluir el archivo javascript y luego cargar su archivo menos a través de una metaetiqueta de estilo css estándar. No te preocupes por la compilación. Esa información está aquí. lesscss.org/#client-side-usage .
blamb
2

Bootstrap utiliza principalmente los siguientes rangos de consulta de medios (o puntos de interrupción) en nuestros archivos Sass de origen para nuestro diseño, sistema de cuadrícula y componentes.

Dispositivos extra pequeños (teléfonos verticales, menos de 576 px) Sin consulta de medios xsya que este es el valor predeterminado en Bootstrap

Pequeños dispositivos (teléfonos apaisados, 576 px y más)

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

Dispositivos medianos (tabletas, 768 px y más)

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

Dispositivos grandes (computadoras de escritorio, 992 px y más)

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

Dispositivos extra grandes (escritorios grandes, 1200 px y más)

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

Como escribimos nuestro CSS de origen en Sass, todas nuestras consultas de medios están disponibles a través de los mixins de Sass:

No es necesaria una consulta de medios para el punto de interrupción xs, ya que es eficaz @media (min-width: 0) { ... }

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

Para entenderlo profundamente, vaya al siguiente enlace

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

Purvi Barot
fuente
1

@media solo pantalla y (ancho máximo: 1200px) {}

@media solo pantalla y (ancho máximo: 979px) {}

@media solo pantalla y (ancho máximo: 767px) {}

@media solo pantalla y (ancho máximo: 480px) {}

@media solo pantalla y (ancho máximo: 320px) {}

@media (ancho mínimo: 768 px) y (ancho máximo: 991 px) {}

@media (ancho mínimo: 992 px) y (ancho máximo: 1024 px) {}

Ashu Designer
fuente
0

Use consultas de medios para 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) {
}
Apps Tawale
fuente
0

:)

En el último bootstrap (4.3.1), usando SCSS (SASS) puede usar uno de @mixin de /bootstrap/scss/mixins/_breakpoints.scss

Medios de al menos el ancho mínimo del punto de ruptura. Ninguna consulta para el punto de interrupción más pequeño. Hace que el @content se aplique al punto de interrupción dado y sea más amplio.

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

Medios de como máximo el ancho máximo del punto de ruptura. Ninguna consulta para el punto de interrupción más grande. Hace que el contenido @ se aplique al punto de interrupción dado y sea más estrecho.

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

Medios que abarcan múltiples anchos de punto de interrupción. Hace que el @content se aplique entre los puntos de interrupción mínimo y máximo

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

Medios entre los anchos mínimo y máximo del punto de interrupción. No hay mínimo para el punto de ruptura más pequeño, ni máximo para el más grande. Hace que el contenido @ se aplique solo al punto de interrupción dado, no a las ventanas gráficas más anchas o más estrechas.

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

Por ejemplo:

.content__extra {
  height: 100%;

  img {
    margin-right: 0.5rem;
  }

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

Documentación:

Codificación feliz;)

Luckylooke
fuente
-1

Para mejorar la respuesta principal:

Puede usar el atributo de medios de la <link>etiqueta (admite consultas de medios) para descargar solo el código que el usuario necesita.

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

Con esto, el navegador descargará todos los recursos CSS, independientemente del atributo multimedia . La diferencia es que si la consulta de medios del atributo de medios se evalúa como falsa , ese archivo .css y su contenido no se bloquearán.

Por lo tanto, se recomienda utilizar el atributo de medios en<link> etiqueta, ya que garantiza una mejor experiencia de usuario.

Aquí puede leer un artículo de Google sobre este problema. https://developers.google.com/web/fundamentals/performance/critical-rendering-path/render-blocking-css

Algunas herramientas que lo ayudarán a automatizar la separación de su código CSS en diferentes archivos de acuerdo con sus consultas de medios

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

Juanma Menéndez
fuente