× 目次 [1]メディアタイプ [2]メディア属性 [3]構文 前の言葉 レスポンシブデザインに関して言えば、メディアクエリメディアは間違いなく切り離せないものです。一般に、メディア クエリは CSS3 に新しく追加されたものであると考えられています。実際、CSS2 はすでに存在しており、CSS3 では新しいメディア属性と使用シナリオが追加されています (IE8 ブラウザではサポートされていません)。この記事ではメディアからの問い合わせ内容を詳しく紹介します メディアタイプ CSS2 では、メディア クエリは タグと <link> タグでのみ使用され、メディア属性として存在します。 </p> メディア属性は、メディアタイプごとに異なるスタイルを指定するために使用されます<p> </p> リーリー <div class="cnblogs_code"> </div> すべてのブラウザと互換性があり、本当に広く使用されているメディア タイプは「screen」と「all」です<p> </p> リーリー <div class="cnblogs_code"> </div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/oinlradh" frameborder="0" width="320" height="240"></iframe> </p>メディアのプロパティ<h3 id="anchor2"> </h3> メディア属性は CSS3 に新しく追加されたもので、ほとんどのメディア属性には「以下」と「以上」を表すために使用される「min-」と「max-」が接頭辞として付けられます。これにより、HTML や XML と競合する「<」および「>」文字の使用が回避されます。 <p> 【注意】メディア属性は括弧()で囲む必要があります。そうでないと無効になります</p> <p> すべてのメディアプロパティを以下の表に示します</p> <p> リーリー </p> <div class="cnblogs_code">【1】カラー</div> <p> 出力デバイスの各ピクセル単位のビット値を指定します。デバイスが出力カラーをサポートしていない場合、値は 0 です</p> <p>色を表示できるすべてのデバイスにスタイルシートを適用します</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/unwmaz8j" frameborder="0" width="320" height="240"> </iframe>【2】カラーインデックス(color-index)</p> <p> カラーインデックスは、出力デバイスのカラールックアップテーブルのエントリの数を指定します。カラールックアップテーブルが使用されない場合、値は0になります</p>。 <p>少なくとも 256 のインデックスカラーを使用するすべてのデバイスにスタイルシートを適用します (次のコードは表示されず、戻り値が 0 であることを示します)</p> <p> リーリー </p> <div class="cnblogs_code">【3】アスペクト比</div> <p> アスペクト比は、出力デバイスの対象表示領域のアスペクト比を記述します。値は、「/」で区切られた 2 つの正の整数で構成されます。水平ピクセル数 (最初の値) と垂直ピクセル数 (2 番目の値) の比率を表します </p> <p>正方形またはワイドスクリーンの表示領域を持つデバイスにスタイルシートを適用する</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/nw9sknij" frameborder="0" width="320" height="240"> </iframe>【4】デバイスのアスペクト比(device-aspect-ratio)</p> <p> デバイスアスペクト比は、出力デバイスのアスペクト比を表します。値は、「/」で区切られた 2 つの正の整数で構成されます。水平ピクセル数(最初の値)と垂直ピクセル数(2番目の値)の比率を表します</p> <p>アスペクト比 16:9 の特殊なワイドスクリーン デバイスにスタイル シートを適用します</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/7kf8wosd" frameborder="0" width="320" height="240"> </iframe>【5】デバイスの高さ</p> <p> デバイスの高さは出力デバイスの高さを表します</p> <p>高さ 1000 ピクセル以上で画面に表示されるドキュメントにスタイルシートを適用します</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/eciqup9x" frameborder="0" width="320" height="240"> </iframe>【6】デバイス幅(device-width)</p> <p> デバイス幅は出力デバイスの幅を表します</p> <p>最小幅1000pxの画面に表示されるドキュメントにスタイルシートを適用します</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/sutkceny" frameborder="0" width="320" height="240"> </iframe>【7】グリッド</p> <p> Grid は、出力デバイスがグリッド デバイスであるかビットマップ デバイスであるかを決定します。デバイスがグリッドベースの場合 (テレタイプ端末やグリフを 1 つしか表示できない電話など)、値は 1 で、それ以外の場合は 0 です</p> <p>非グリッドデバイスにスタイルシートを適用する</p> <p> リーリー </p> <div class="cnblogs_code"></div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/nt7dbqsh" frameborder="0" width="320" height="240"> </iframe>【8】身長</p> <p> 高さは、出力デバイスのレンダリング領域の高さを表します(視覚領域の高さ、プリンタートレイの高さなど)</p> <p>表示領域の高さが 800px を超えるデバイスにスタイル シートを適用します</p> <p> リーリー </p> <p>【9】宽度(width)</p> <p> 宽度描述了输出设备渲染区域的宽度</p> <p> 向宽度大于800px的可视区域的设备应用样式表</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span><span style="background-color: #f5f5f5; color: #800000;"> @media (min-width:800px) </span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"> .box{ height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"> background-color</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> lightgreen</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"> } </span><span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p>【10】黑白(monochrome)</p> <p> 黑白指定了一个黑白(灰度)设备每个像素的比特数。如果不是黑白设备,值为0</p> <p> 向非黑白设备应用样式表</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span><span style="background-color: #f5f5f5; color: #800000;"> @media (monochrome:0) </span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"> .box{height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"> width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"> background-color</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> lightgreen</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"> } </span><span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/xtrfjtjk" frameborder="0" width="320" height="240"></iframe></p> <p>【11】方向(orientation)</p> <p> 方向指定了设备处于横屏(宽度大于宽度)模式还是竖屏(高度大于宽度)模式</p> <p> 值:landscape(横屏) | portrait(竖屏)</p> <p> 向竖屏设备应用样式表</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span><span style="background-color: #f5f5f5; color: #800000;"> @media (orientation: portrait) </span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"> .box{height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">background-color</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> lightgreen</span><span style="background-color: #f5f5f5; color: #000000;">;</span> <span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"> } </span><span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p>【12】分辨率(resolution)</p> <p> 分辨率指定输出设备的分辨率(像素密度)。分辨率可以用每英寸(dpi)或每厘米(dpcm)的点数来表示</p> <p> [注意]关于屏幕三要素(屏幕尺寸、分辨率、像素密度)的相关内容移步至此</p> <p> 向每英寸至少90点的设备应用样式</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span><span style="background-color: #f5f5f5; color: #800000;"> @media (min-resolution: 90dpi) </span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;"> .box{height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;"> background-color</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> lightgreen</span><span style="background-color: #f5f5f5; color: #000000;">;</span> <span style="background-color: #f5f5f5; color: #000000;">}</span><span style="background-color: #f5f5f5; color: #800000;"> } </span><span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p><iframe style="width: 100%; height: 120px;" src="http://sandbox.runjs.cn/show/rmgiqlgk" frameborder="0" width="320" height="240"></iframe></p> <p>【13】扫描(scan)</p> <p> 扫描描述了电视输出设备的扫描过程</p> <p> 值: progressive | interlace</p> <p> </p> <h3 id="anchor3">语法</h3> <p> 媒体查询包含了一个CSS2已有的媒介类型(或称为媒体类型)和CSS3新增的包含一个或多个表达式的媒体属性,这些媒体属性会被解析成真或假</p> <p> 当媒体查询为真时,相关的样式表或样式规则就会按照正常的级联规则被应用。即使媒体查询返回假, <link> 标签上带有媒体查询的样式表仍将被下载(只不过不会被应用)</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">link </span><span style="color: #ff0000;">rel</span><span style="color: #0000ff;">="stylesheet"</span><span style="color: #ff0000;"> href</span><span style="color: #0000ff;">="style.css"</span><span style="color: #ff0000;"> media</span><span style="color: #0000ff;">="print"</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span> </pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p> media并不是'print',所以媒体查询为假。但是,style.css文件依然被下载</p> <div><img src="http://images2015.cnblogs.com/blog/740839/201609/740839-20160907105645426-1833216816.jpg" alt=""></div> <div><strong>逻辑操作符</strong></div> <p> 操作符not、and、only和逗号(,)可以用来构建复杂的媒体查询</p> <p><strong>and</strong></p> <p> and操作符用来把多个媒体属性组合起来,合并到同一条媒体查询中。只有当每个属性都为真时,这条查询的结果才为真</p> <p> [注意]在不使用not或only操作符的情况下,媒体类型是可选的,默认为all</p> <p> 满足横屏以及最小宽度为700px的条件应用样式表</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>@media all and (min-width: 700px) and (orientation: landscape) { ... }</pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p> 由于不使用not或only操作符的情况下,媒体类型是可选的,默认为 all,所以可以简写为</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>@media (min-width: 700px) and (orientation: landscape) { ... }</pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p><strong>or</strong></p> <p> 将多个媒体查询以逗号分隔放在一起;只要其中任何一个为真,整个媒体语句就返回真,相当于or操作符</p> <p> 满足最小宽度为700像素或是横屏的手持设备应用样式表</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre>@media (min-width: 700px), handheld and (orientation: landscape) { ... }</pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p><strong>not</strong></p> <p> not操作符用来对一条媒体查询的结果进行取反</p> <p> [注意]not关键字仅能应用于整个查询,而不能单独应用于一个独立的查询</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #000000;">@media not all and (monochrome) { ... } //等价于 @media not (all and (monochrome)) { ... }</span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p><strong>only</strong></p> <p> only操作符表示仅在媒体查询匹配成功时应用指定样式。可以通过它让选中的样式在老式浏览器中不被应用</p> <p> [注意]经测试,无论是否使用only操作符都对结果无影响</p> <div class="cnblogs_code"> <div class="code" style="position:relative; padding:0px; margin:0px;"><pre><span style="color: #0000ff;"><</span><span style="color: #800000;">style </span><span style="color: #ff0000;">media</span><span style="color: #0000ff;">="only screen and (max-width:1000px)"</span><span style="color: #0000ff;">></span><span style="background-color: #f5f5f5; color: #800000;"> .box</span><span style="background-color: #f5f5f5; color: #000000;">{</span><span style="background-color: #f5f5f5; color: #ff0000;">width</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">height</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> 100px</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #ff0000;">background-color</span><span style="background-color: #f5f5f5; color: #000000;">:</span><span style="background-color: #f5f5f5; color: #0000ff;"> pink</span><span style="background-color: #f5f5f5; color: #000000;">;</span><span style="background-color: #f5f5f5; color: #000000;">}</span> <span style="color: #0000ff;"></</span><span style="color: #800000;">style</span><span style="color: #0000ff;">></span> <span style="color: #0000ff;"><</span><span style="color: #800000;">div </span><span style="color: #ff0000;">class</span><span style="color: #0000ff;">="box"</span><span style="color: #0000ff;">></</span><span style="color: #800000;">div</span><span style="color: #0000ff;">></span></pre><div class="contentsignin">ログイン後にコピー</div></div> </div> <p> 实际上,only、not、and和or(用逗号表示)这四种逻辑中,只有and比较常用</p> <script type="text/javascript">// <![CDATA[ var all = document.getElementById('cnblogs_post_body').children; var select = []; for(var i = 1; i < all.length; i++){ if(all[i].getAttribute('id')){ if(all[i].getAttribute('id').match(/anchor\d+$/)){ select.push(all[i]); } } } var wheel = function(e){ e = e || event; var data; if(e.wheelDelta){ data = e.wheelDelta; }else{ data = -e.detail * 40; } for(var i = 0; i < select.length; i++){ if(select[i].getBoundingClientRect().top > 0){ return; } if(select[i].getBoundingClientRect().top <= 0 && select[i+1]){ if(select[i+1].getBoundingClientRect().top > 0){ change(oCon.children[i+2]) } }else{ change(oCon.children[select.length+1]) } } } document.body.onmousewheel = wheel; document.body.addEventListener('DOMMouseScroll',wheel,false); var oCon = document.getElementById("content"); var close = oCon.getElementsByTagName('span')[0]; close.onclick = function(){ if(this.innerHTML == '显示目录'){ this.innerHTML = '×'; this.style.background = ''; oCon.style.border = '2px solid #ccc'; oCon.style.width = ''; oCon.style.height = ''; oCon.style.overflow = ''; oCon.style.lineHeight = '30px'; }else{ this.innerHTML = '显示目录'; this.style.background = '#3399ff'; oCon.style.border = 'none'; oCon.style.width = '60px'; oCon.style.height = '30px'; oCon.style.overflow = 'hidden'; oCon.style.lineHeight = ''; } } for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].onmouseover = function(){ this.style.color = '#3399ff'; } oCon.children[i].onmouseout = function(){ this.style.color = 'inherit'; if(this.mark){ this.style.color = '#3399ff'; } } oCon.children[i].onclick = function(){ change(this); } } function change(_this){ for(var i = 2; i < oCon.children.length; i++){ oCon.children[i].mark = false; oCon.children[i].style.color = 'inherit'; oCon.children[i].style.textDecoration = 'none'; oCon.children[i].style.borderColor = 'transparent'; } _this.mark = true; _this.style.color = '#3399ff'; _this.style.textDecoration = 'underline'; _this.style.borderColor = '#2175bc'; } // ]]></script><div id="MySignature"></div> <div class="clear"></div>