web-dev-qa-db-fra.com

Quelle est la différence entre "écran" et "écran seul" dans les requêtes des médias?

Quelle est la différence entre screen et only screen dans les requêtes multimédia?

<link media="screen and (max-device-width: 480px)" rel="stylesheet" href="m.css" />
<link media="only screen and (max-device-width: 480px)" rel="stylesheet" href="m.css" />

Pourquoi devons-nous utiliser only screen? Est-ce que screen ne fournit pas suffisamment d'informations pour être rendu niquement pour l'écran?

J'ai vu de nombreux sites Web réactifs utilisant l'une de ces trois manières différentes:

@media screen and (max-width:632px)
@media (max-width:632px)
@media only screen and (max-width:632px)
450
Jitendra Vyas

Décomposons vos exemples un par un.

@media (max-width:632px)

Celui-ci dit pour une fenêtre avec un max-width de 632px que vous souhaitez appliquer ces styles. À cette taille, on parle de tout ce qui est plus petit qu'un écran de bureau dans la plupart des cas.

@media screen and (max-width:632px)

Celui-ci dit que pour un périphérique avec un screen et une fenêtre avec max-width de 632px, appliquer le style. Ceci est presque identique à ce qui précède, sauf que vous spécifiez screen par opposition à autres types de supports disponibles , le plus courant étant print.

@media only screen and (max-width:632px)

Voici une citation tout droit du W3C pour expliquer celle-ci.

Le mot clé "uniquement" peut également être utilisé pour masquer les feuilles de style des anciens agents utilisateurs. Les agents utilisateurs doivent traiter les requêtes de média commençant par "seulement" comme si le mot clé "seulement" n'était pas présent.

Comme il n’existe pas de type de média "seulement", la feuille de style devrait être ignorée par les anciens navigateurs.

Voici le lien vers cette citation indiqué dans l'exemple 9 de cette page.

Espérons que cela jette un peu de lumière sur les requêtes des médias.

MODIFIER:

Assurez-vous de vérifier @ hybrides excellente réponse sur la façon dont le mot-clé only est vraiment traité.

512
Matthew Green

Ce qui suit provient de Adobe docs .


La spécification des requêtes multimédias fournit également le mot clé only, destiné à masquer les requêtes multimédias des navigateurs plus anciens. Comme not, le mot-clé doit être placé au début de la déclaration. Par exemple:

media="only screen and (min-width: 401px) and (max-width: 600px)"

Les navigateurs qui ne reconnaissent pas les requêtes de média attendent une liste de types de média séparés par des virgules et la spécification indique qu'ils doivent tronquer chaque valeur immédiatement avant la première valeur non alphanumérique. caractère qui n'est pas un trait d'union. Ainsi, un ancien navigateur devrait interpréter l'exemple précédent comme suit:

media="only"

Comme il n'existe pas de type de support unique, la feuille de style est ignorée. De même, un ancien navigateur devrait interpréter

media="screen and (min-width: 401px) and (max-width: 600px)"

comme

media="screen"

En d'autres termes, il convient d'appliquer les règles de style à tous les périphériques d'écran, même s'il ne sait pas ce que signifient les requêtes multimédia.

Malheureusement, IE 6–8 n'a pas réussi à mettre en œuvre la spécification correctement.

Au lieu d'appliquer les styles à tous les périphériques d'écran, il ignore complètement la feuille de style.

Malgré ce comportement, il est toujours recommandé de préfixer les requêtes multimédias uniquement si vous souhaitez masquer les styles d'autres navigateurs moins courants.


Donc, en utilisant

media="only screen and (min-width: 401px)"

et

media="screen and (min-width: 401px)"

aura le même effet dans IE6-8: les deux empêcheront l’utilisation de ces styles. Ils seront cependant toujours téléchargés.

De plus, dans les navigateurs prenant en charge les requêtes de média CSS3, les deux versions chargeront les styles si la largeur de la fenêtre de visualisation est supérieure à 401px et si le type de média est screen.

Je ne suis pas tout à fait sûr que les navigateurs qui ne prennent pas en charge les requêtes de média CSS3 auront besoin de la version only

media="only screen and (min-width: 401px)" 

par opposition à

media="screen and (min-width: 401px)"

pour vous assurer qu'il n'est pas interprété comme

media="screen"

Ce serait un bon test pour une personne ayant accès à un laboratoire d'appareils.

214
hybrid

Pour styliser de nombreux smartphones avec des écrans plus petits, vous pouvez écrire:

@media screen and (max-width:480px) { … } 

Pour empêcher les anciens navigateurs de voir un iPhone ou une feuille de style de téléphone Android, vous pouvez écrire:

@media only screen and (max-width: 480px;) { … } 

Lisez cet article pour plus http://webdesign.about.com/od/css3/a/css3-media-queries.htm

40
sandeep

La réponse de @hybrid est assez informative, mais elle n’explique pas l’objet mentionné par @ashitaka. "Et si vous utilisiez l’approche Mobile First? Nous avons d’abord le CSS mobile, puis l’utilisation de min-width pour cibler des sites plus vastes. Nous ne devrions pas utiliser le seul mot-clé dans ce contexte, non?

Voulez-vous ajouter ici que le but est simplement d'empêcher les navigateurs non compatibles d'utiliser ce style Autre périphérique comme s'il partait de "écran" sans que cela prenne pour un écran où, comme s'il commençait par "seulement", le style était ignoré.

En répondant à ashitaka, considérons cet exemple

<link rel="stylesheet" type="text/css" 
  href="Android.css" media="only screen and (max-width: 480px)" />
<link rel="stylesheet" type="text/css" 
  href="desktop.css" media="screen and (min-width: 481px)" />

Si nous n'utilisons pas "uniquement", cela fonctionnera toujours, car le style de bureau sera également utilisé pour les styles Android, mais avec une surcharge inutile. Dans ce cas, SI un navigateur ne prend pas en charge, il se repliera sur la deuxième feuille de style en ignorant la première.

16
Diablo Geto