媒體查詢
響應(yīng)式 Web 設(shè)計 - 媒體查詢
媒體(media)查詢在 CSS3 上有介紹:CSS3 @media 查詢。
使用 @media 查詢,你可以針對不同的媒體類型定義不同的樣式。
實例
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"/> <meta charset="utf-8"> <title>php 中文網(wǎng)</title> <style> body { background-color:lightgreen; } @media only screen and (max-width: 500px) { body { background-color:lightblue; } } </style> </head> <body> <p>重置瀏覽器大小,當(dāng)文檔的寬度小于 500 像素,背景會變?yōu)闇\藍(lán)色,否則為淺綠色。</p> </body> </html>
運(yùn)行實例 ?
點擊 "運(yùn)行實例" 按鈕查看在線實例
添加斷點
在先前的教程中我們使用行和列來制作網(wǎng)頁,它是響應(yīng)式的,但在小屏幕上并不能友好的展示。
媒體查詢可以幫我們解決這個問題。我們可以在設(shè)計稿的中間添加斷點,不同的斷點有不同的效果。
桌面設(shè)備
手機(jī)設(shè)備
使用媒體查詢在 768px 添加斷點:
實例
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf-8"> <title>php 中文網(wǎng)</title> <style> * { box-sizing: border-box; } .row:after { content: ""; clear: both; display: block; } [class*="col-"] { float: left; padding: 15px; } html { font-family: "Lucida Sans", sans-serif; } .header { background-color: #9933cc; color: #ffffff; padding: 15px; } .menu ul { list-style-type: none; margin: 0; padding: 0; } .menu li { padding: 8px; margin-bottom: 7px; background-color :#33b5e5; color: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } .menu li:hover { background-color: #0099cc; } .aside { background-color: #33b5e5; padding: 15px; color: #ffffff; text-align: center; font-size: 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } .footer { background-color: #0099cc; color: #ffffff; text-align: center; font-size: 12px; padding: 15px; } /* For desktop: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} @media only screen and (max-width: 768px) { /* For mobile phones: */ [class*="col-"] { width: 100%; } } </style> </head> <body> <div class="header"> <h1>Chania</h1> </div> <div class="row"> <div class="col-3 menu"> <ul> <li>The Flight</li> <li>The City</li> <li>The Island</li> <li>The Food</li> </ul> </div> <div class="col-6"> <h1>The City</h1> <p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.</p> </div> <div class="col-3 right"> <div class="aside"> <h2>What?</h2> <p>Chania is a city on the island of Crete.</p> <h2>Where?</h2> <p>Crete is a Greek island in the Mediterranean Sea.</p> <h2>How?</h2> <p>You can reach Chania airport from all over Europe.</p> </div> </div> </div> <div class="footer"> <p>Resize the browser window to see how the content respond to the resizing.</p> </div> </body> </html>
運(yùn)行實例 ?
點擊 "運(yùn)行實例" 按鈕查看在線實例
為移動端優(yōu)先設(shè)計
移動端優(yōu)先意味著在設(shè)計桌面和其他設(shè)備時優(yōu)先考慮移動端的設(shè)計。
這就意味著我們必須對 CSS 做一些改變。
我們在屏幕小于 768px 進(jìn)行樣式修改,同樣在屏幕寬度大于 768px 時也需要修改樣式。以下是移動端優(yōu)先實例:
[class*="col-"] {
width: 100%;
}
@media only screen and (min-width: 768px) {
/* For desktop: */
.col-1 {width: 8.33%;}
.col-2 {width: 16.66%;}
.col-3 {width: 25%;}
.col-4 {width: 33.33%;}
.col-5 {width: 41.66%;}
.col-6 {width: 50%;}
.col-7 {width: 58.33%;}
.col-8 {width: 66.66%;}
.col-9 {width: 75%;}
.col-10 {width: 83.33%;}
.col-11 {width: 91.66%;}
.col-12 {width: 100%;}
}
其他斷點
你可以根據(jù)自己的需要添加斷點。
我們同樣可以為平板設(shè)備和移動手機(jī)設(shè)備設(shè)置斷點。
桌面設(shè)備
平板設(shè)備
手機(jī)設(shè)備
在屏幕為 600px 時添加媒體查詢,并設(shè)置新的樣式(屏幕大于600px但小于768px):
實例
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf-8"> <title>php 中文網(wǎng)</title> <style> * { box-sizing: border-box; } .row:after { content: ""; clear: both; display: block; } [class*="col-"] { float: left; padding: 15px; } html { font-family: "Lucida Sans", sans-serif; } .header { background-color: #9933cc; color: #ffffff; padding: 15px; } .menu ul { list-style-type: none; margin: 0; padding: 0; } .menu li { padding: 8px; margin-bottom: 7px; background-color :#33b5e5; color: #ffffff; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } .menu li:hover { background-color: #0099cc; } .aside { background-color: #33b5e5; padding: 15px; color: #ffffff; text-align: center; font-size: 14px; box-shadow: 0 1px 3px rgba(0,0,0,0.12), 0 1px 2px rgba(0,0,0,0.24); } .footer { background-color: #0099cc; color: #ffffff; text-align: center; font-size: 12px; padding: 15px; } /* For mobile phones: */ [class*="col-"] { width: 100%; } @media only screen and (min-width: 600px) { /* For tablets: */ .col-m-12 {width: 8.33%;} .col-m-2 {width: 16.66%;} .col-m-3 {width: 25%;} .col-m-4 {width: 33.33%;} .col-m-5 {width: 41.66%;} .col-m-6 {width: 50%;} .col-m-7 {width: 58.33%;} .col-m-8 {width: 66.66%;} .col-m-9 {width: 75%;} .col-m-10 {width: 83.33%;} .col-m-11 {width: 91.66%;} .col-m-12 {width: 100%;} } @media only screen and (min-width: 768px) { /* For desktop: */ .col-1 {width: 8.33%;} .col-2 {width: 16.66%;} .col-3 {width: 25%;} .col-4 {width: 33.33%;} .col-5 {width: 41.66%;} .col-6 {width: 50%;} .col-7 {width: 58.33%;} .col-8 {width: 66.66%;} .col-9 {width: 75%;} .col-10 {width: 83.33%;} .col-11 {width: 91.66%;} .col-12 {width: 100%;} } </style> </head> <body> <div class="header"> <h1>Chania</h1> </div> <div class="row"> <div class="col-3 col-m-3 menu"> <ul> <li>The Flight</li> <li>The City</li> <li>The Island</li> <li>The Food</li> </ul> </div> <div class="col-6 col-m-9"> <h1>The City</h1> <p>Chania is the capital of the Chania region on the island of Crete. The city can be divided in two parts, the old town and the modern city.</p> </div> <div class="col-3 col-m-12"> <div class="aside"> <h2>What?</h2> <p>Chania is a city on the island of Crete.</p> <h2>Where?</h2> <p>Crete is a Greek island in the Mediterranean Sea.</p> <h2>How?</h2> <p>You can reach Chania airport from all over Europe.</p> </div> </div> </div> <div class="footer"> <p>Resize the browser window to see how the content respond to the resizing.</p> </div> </body> </html>
運(yùn)行實例 ?
點擊 "運(yùn)行實例" 按鈕查看在線實例
以上代碼看起來很多余,但是他可以根據(jù)屏幕大小自動設(shè)置不同的樣式,所以還是非常必要的。
HTML 實例
針對桌面設(shè)備:
第一和第三部分跨越 3 列。中間部分跨域 6 列。
針對平板設(shè)備:
第一跨域 3列,第二部分跨越 9 列,第三部分跨域 12 列:
<div class="col-3 col-m-3">...</div>
<div class="col-6 col-m-9">...</div>
<div class="col-3 col-m-12">...</div>
</div>
方向:橫屏/豎屏
結(jié)合CSS媒體查詢,可以創(chuàng)建適應(yīng)不同設(shè)備的方向(橫屏landscape、豎屏portrait等)的布局。
語法:
orientation:portrait | landscape
portrait:指定輸出設(shè)備中的頁面可見區(qū)域高度大于或等于寬度
landscape:除portrait值情況外,都是landscape
實例
<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta charset="utf-8"> <title>php 中文網(wǎng)</title> <style> body { background-color: lightgreen; } @media only screen and (orientation: landscape) { body { background-color: lightblue; } } </style> </head> <body> <p>重置瀏覽器大小,當(dāng)文檔的寬度大于高度時,背景會變?yōu)闇\藍(lán)色。否則為淺綠色。</p> </body> </html>
運(yùn)行實例 ?
點擊 "運(yùn)行實例" 按鈕查看在線實例