Media Queries

Vlastosti CSS3 Media Queries:

  • width – šířka cílové oblasti výstupního zobrazovacího zařízení (viewport) včetně případných posuvníků
    • obrazovka nebo projektor (u prohlížečů režim zobrazení Celá obrazovka) s výřezem o šířce minimálně 980px (grafický návrh by měl v tomto případě počítat s šířkou 960px)
    • <link rel="stylesheet" type="text/css" media="screen and (min-width: 960px), projection and (min-width: 960px)" href="screen-projection-960.css" />
      @media screen and (min-width: 960px),
      projection and (min-width: 980px) { …STYLES… }
    • .info (Drupal)
    • stylesheets[screen and (min-width: 480px) and (max-width: 760px)][] = design/screen-480-760.css
      
      stylesheets[screen and (min-width: 960px)][] = design/screen-960.css
  • height
  • device-width – šířka výstupního zobrazovacího zařízení (bez ohledu na velikost okna)
  • device-height
  • orientation – na výšku, na šířku
  • aspect-ratio
  • device-aspect-ratio
  • color
  • color-index
  • monochrome
  • resolution
  • scan
  • grid

Nativní podpora: IE9+, Firefox 3.5+, Safari 3+, Chrome, Opera 7+, iOS Safari 3.2+, Opera Mini 5+, Opera Mobile 10+, Android Browser 2.1+

Přehled některých zařízení a prohlížečů
Device CSS px Actual px Device pixel ratio dpi
iPhone 2,3 320x480 320x480 1  
iPhone 4 320x480 640x960 2 192
iPhone 5 320x568 640x1136 2 192
iPad mini, 1, 2 768x1024 768x1024 1  
iPad 3, 4 768x1024 1536x2048 2 192
Android 2.3     1.5 144
Android 4.1     2 192
Windows 8 Phone        
Interenet Explorer on Windows Phone 8       96 ???
Opera Mini        
Firefox OS        
Firefox for Mobile (Fennec)        
Google Nexus 7     1.3 124.8
Playbook        

Příklad Media Queries pro Tablet:

@media
(min-width: 44em)  { /* ...STYLES... */}

Příklad Media Queries pro Tablet s Retina displejem:

@media
(min-width: 44em) and (-webkit-min-device-pixel-ratio: 1.25),
(min-width: 44em) and (min-resolution: 120dpi) { /* ...STYLES... */}
@media
(min-width: 44em) and (-webkit-min-device-pixel-ratio: 1.3),
(min-width: 44em) and (min-resolution: 124.8dpi) { /* ...STYLES... */}
@media
(min-width: 44em) and (-webkit-min-device-pixel-ratio: 1.5),
(min-width: 44em) and (min-resolution: 144dpi) { /* ...STYLES... */}
@media
(min-width: 44em) and (-webkit-min-device-pixel-ratio: 2),
(min-width: 44em) and (min-resolution: 192dpi) { /* ...STYLES... */}
Responsive web design layout
  Smartphone Tablet Desktop TV
Rozlišení zařízení (velikost okna aplikace) [px] 320x480 portrait 480x320 landscape 768x1024 portait 1024x768 landscape 1280x960(1024) 1680 3456
Bod zlomu (break point) 320 480 650, 700, 704, 740, 767, 768 979, 980, 1024 1025, 1120, 1200, 1220   3456
Maximální šířka objektu (při 10px okraji) 300 460 720 960 1200   3436
Šířka sloupce při gridu 12 (max. šířka/12) (320) (480) 60 80 100    
Téma Omega 3 global global >=740 (narrow)

740-840 (narrow landscape)

>=980 (normal)

=1024 (normal landscape)

>=1220    
Téma Omega 4     >=44em
(16px * 44em ~ 704px)
  >=70em
(16px * 70em ~ 1120px)
   
Téma AdaptiveTheme <=320 321-480 481-768 796-1024 >=1025    
Bootstrap   <=480 <=767 768-979 >=1200    
Foundation              
templatemonster.com 320 480 768 980      

Podporu je možné rozšířit pomocí JavaScript knihovny css3-mediaqueries.js i na IE 5+, Firefox 1+ and Safari 2 (umožňuje navíc i podporu průhlednosti u PNG obrázků).

Tipy


Poznámky:

  • otestovat, zda je nutné uvádět vlastnost projection

Responzivní webdesign

Pro rychlé vytvoření responzivního rozvržení je možné použít generátory nebo využít některého z frameworků např.:

  • responsify.it (grid – pružná šířka sloupce, less, scss)
  • getbootstrap.com (grid)
  • foundation.zurb.com (grid)

Mé požadavky:

  • samostatné sekce (hlavička, obsah, patička atd.) – zrychlení počátku vykreslování webu (Start Render)
  • (možnost fixní šířky sloupců – např. pro reklamní bloky)
    • v takto definovaných "úzkých" šířkách není vhodné uživateli povolovat zvětšování písma
  • HTML5
  • responzivní design

Zajímavé zdroje informací:

Techniky vytváření vzhledu:

  • Mobile first – vzhled se začíná tvořit od mobilního, přes tablet, notebook, desktop až k TV
  • Desktop first – většinou při nedostatku času nebo při nutnosti podpory starších prohlížečů

CSS:

  1. Nejdříve pište "obyčejné" selektory – vzhled načtou i prohlížeče nepodporující Media Query
  2. Teprve poté pište selektory v Media Queries podmínkách – upřesňují vzhled pro moderní prohlížeče

Optimalizace:

  • pro cílové zařízení používejte konkrétní kvalitu médií (vzhled, obrázky, videa atd.)
  • využívejte asynchronní verze skriptů

Jak vytvořit responzivní webdesign?

enlightened Pro sjednocení vzhledu (vykreslení) všech prvků napříč moderními prohlížeči je vhodné použít normalize.css (pro zastaralé prohlížeče je nutné použít dnes již "zavržený" reset.css).

Normalize.css:

  • zachovává užitečné výchozí nastavení prvků
  • opravuje některé běžné chyby (HTML5 elementy, dědičnost písma ve formulářových prvcích, korekce velikosti písma, SVG přetečení v IE9, vzhled tlačítek v iOS atd.)
  • neznehodnocuje práci ve vývojových nástrojích a při ladění CSS atd.

enlightened Většina mobilní prohlížečů přizpůsobí stránku (pomocí změny měřítka "scale") tak, aby se celá vešla na obrazovku (=>téměř nečitelný text). Pro zamezení tohoto chování je tedy třeba do hlavičky vložit níže uvedený meta tag (umožňuje změnu šířky při natočení):

<meta name="viewport" content="width=device-width, initial-scale=1">

Více viz např. developer.mozilla.org/en-US/docs/Mozilla/Mobile/Viewport_meta_tag

Tip: Alternativou k výše uvedeném tagu muže být CSS @viewport

enlightened Pružné (flexibilní) obrázky a multimédia:

img,
embed,
object,
video {
  display: block; /* IE (display: block; | width: auto; | width: 100%;) */
  max-width: 100%;
  height: auto;
  vertical-align: top; /* optional */
  -ms-interpolation-mode: bicubic;
}

Tip: Responsive images – how to prevent reflow

enlightened Responzivní tabulky

  • FooTable yes
    • Nastavení vlastních beakpointů
    • <script>
        $(function () {
          $('.footable').footable({
            breakpoints: {
              phone: 749,
              tablet: 969
            }
          });
        });
      </script>
    • Nastavení + výpis beakpointů do logů (např. Chrome/Console)
    • <script>
        $(function () {
          $('.footable').footable({
            breakpoints: {
              phone: 749,
              tablet: 969
            }
          }).bind({
            'footable_breakpoint' : function(e) {
              console.log(e.breakpoint);     
            }
          });
        });
      </script>
  • Simple Responsive Table – CSS
  • (Responsive Tables - CSS/JS)
  • (Responsive Data Tables - CSS)

enlightened U mobilních telefonů je možné zakázat funkci automatického zvětšení písma, ovšem sníží se tím čitelnost textu:

html {
  /*-webkit-text-size-adjust: none;*/
}

enlightened Dostatečná velikost aktivního prvku (položka navigace, tlačítko, formulářový prvek atd.):

  • průměr dotykové plošky prstu je přibližně 10 mm
  • doporučení: min. 7 x 7 mm (48 x 48 px) + min. 5 mm (32 px) rozestup mezi aktivními prvky

enlightened Základní HTML5 struktura (layout) stránky:

<!DOCTY​PE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>HTML 5 dokument</title>
    <meta name="description" content="Základní šablona HTML 5 dokumentu" />
    <meta name="keywords" content="html,dokument,šablona" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="shortcut icon" type="image/x-icon" href="favicon.ico" />
    <link rel="stylesheet" type="text/css" href="style.css" />
  </head>
  <body>
    <header id="header">
      <p>Site Name</p>
    </header>
    <nav>
      <ul id="main-nav">
        <li><a href="#">Home</a></li>
      </ul>
    </nav>
    <main>
      <h1>Page Title</h1>
      <section>
        <h2>Section Title
        <article class="post">
          <h3>Atricle Title
          ...
        </article>
      </section>
      <section>
        <h2>Section Title
        <article class="post">
          <h3>Atricle Title
          ...
        </article>
      </section>
    </main>
    <aside id="sidebar">
      <section class="block">
        ...
      </section>   
    </aside>
    <footer id="footer">
      ...
    </footer>
  </body>
<html>

Element main byl přidán až v HTML5.1:

  • prvek main nesmí být potomkem prvků header, nav, article, aside, footer
  • u IE9+ je zatím nutné definovat main jako blokový prvek
    • main {display: block;}
  • u IE8- je navíc kromě CSS ještě nutné prvek v head skriptem definovat (případně použít html5shiv.js knihovnu)
    • <script>document.createElement('main');</script>

V HTML5 je možné vynechat atribut type:

  • místo <style type="text/css"> je tedy možné psát jen <style>
  • místo <script type="text/javascript"> je tedy možné psát jen <script>

Tipy: Vyhněte se nejobvyklejším chybám v HTML5

Internet Explorer 8 a starší verze

Využijte výhod validních podmíněných komentářů (IE Conditional Stylesheets vs CSS Hacks) přímo pro element <html>:

<!--[if IEMobile 7]><html class="ie iem7"><![endif]-->
<!--[if lte IE 6]><html class="ie lt-ie9 lt-ie8 lt-ie7"><![endif]-->
<!--[if (IE 7)&(!IEMobile)]><html class="ie lt-ie9 lt-ie8"><![endif]-->
<!--[if IE 8]><html class="ie lt-ie9"><![endif]-->
<!--[if (gte IE 9)|(gt IEMobile 7)]><html class="ie"><![endif]-->
<!--[if !IE]><!--><html><!--<![endif]-->

IE8- můžete nechat v jednosloupcovém "mobilním" vzhledu viz Leaving Old Internet Explorer Behind nebo podporu Media Queries zpřístupníte pomocí JavaScriptu.

enlightened X-UA-Compatible zpřístupňuje poslední dostupný Internet Explorer mód:

  • meta tag "X-UA-Compatible" by měl být vložen přímo za elementem <head> (v ideálním případě by mezi DOCTYPE, html, head a tímto meta tagem nemělo být nic tj. ani žádný podmíněný komentář no)
    • nejvhodnějším řešením by bylo např. detekovat hodnotu HTTP_USER_AGENT (viz např. Drupal modul Browser class) a na základě ní hlavičku dokumentu o níže uvedený meta tag automaticky doplnit
  • hodnota IE=edge není IE týmem doporučena a může v budoucnu způsobit neočekávané chování bližší info viz What's the difference if meta “X-UA-Compatible” exists or not?
  • hodnota chrome=1 "inicializuje" Google Chrome Frame (pokud je nainstalován)
    • podpora jen do ledna 2014 !!!
    • <meta http-equiv="x-ua-compatible" content="ie=edge,chrome=1" />
<!--[if lte IE 9]>
  <meta http-equiv="x-ua-compatible" content="ie=edge" />
<![endif]-->

enlightened Pro podporu media queries v IE8- je třeba použít media-queries.js (nabízí více možností ovšem na úkor výkonu) nebo respond.js:

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script>
<![endif]-->

enlightened Pro podporu nových HTML5 prvků (header, nav, article, aside, section, footer atd.) v IE8- je nutné k dokumentu připojit html5shiv (pouze pro IE8-) nebo Modernizr (nabízí více možností):

<!--[if lt IE 9]>
  <script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script>
<![endif]-->

 


Tipy:

  • Responsive Web Design
  • Mobile First
  • Sass
  • Compass
  • Singularity Grid System
  • Breakpoint
  • Base Theme
  • Drush