咱們知道,咱們給網頁HTML寫樣式用的主要是CSS(層疊樣式表)語言的規則,好比:盒模型設置寬高背景色什麼的。css
目前咱們使用的最新版本的層疊樣式表主要是CSS第三版,也就是CSS3,CSS3帶來的新特性、新功能有不少,好比:圓角效果、圖形化邊界、塊陰影與文字陰影、使用RGBA實現透明效果、漸變效果、使用@Font-Face實現定製字體、媒體查詢
等等。html
因此,什麼是媒體查詢呢?媒體查詢就是CSS3帶來的新的功能特性
css3
通常認爲媒體查詢是CSS3的新增內容,實際上CSS2就已經有媒體查詢了,只不過css3又增長了新功能使其更增強大,從而讓媒體查詢發揚光大
功能就是:segmentfault
CSS3中新特性媒體查詢(mediaqueries),可爲根據不一樣的分辨率(設備)設置不一樣的樣式效果
瀏覽器
以前css2中定義的設備有tv設備、tty設備、屏幕screen設備、打印機print設備等等。到css3中基本上廢棄了不少用不到的設備,基本上只保留screen設備、print設備這樣的。print設置偶爾使用,比較經常使用的就是screen設備。dom
print設備咱們能夠經過
Ctrl+P
快捷鍵預覽一下打印的效果佈局
簡而言之,媒體查詢主要是用來作響應式佈局的性能
響應式佈局就是:咱們作好的頁面,在不一樣尺寸的屏幕上有不一樣的樣式效果回饋。好比,在大屏幕上咱們須要更多的展現信息,畢竟屏幕大嘛,信息展現少了就浪費了。在小屏幕上,咱們須要隱藏一些東西,由於屏幕過小了,信息展現多了反而顯得過於臃腫。不一樣屏幕有不一樣的相應,即爲響應式佈局
字體
好比有這樣一個需求:在可視區域屏幕的寬度小於480像素時,咱們讓屏幕中文字由原來的黑色black變成綠色green。(默認是黑色)ui
思路:經過screen對象,獲取屏幕分辨率的寬度width,進行判斷,若小於480的時候,就改變文字的顏色。
Screen對象能夠獲取瀏覽器窗口的相關數據,好比分辨率、屏幕大小之類的數據,能夠經過window.screen獲取到,同時Screen也自帶一些方法能夠作其餘事情,好比解鎖或鎖定屏幕轉向等。具體關於screen對象的詳細信息,歡迎訪問MDN官方網址: https://developer.mozilla.org...
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> </head> <body> <div class="meiti">哈嘍,我是媒體查詢</div> <script> window.onresize = () => { console.log(screen.width); // 打印看看screen對象信息 // 經過js去控制 if (screen.width <= 480) { document.querySelector('div').style.color = "green" document.querySelector('div').style.fontWeight = "bolder" } else { document.querySelector('div').style.color = "black" document.querySelector('div').style.fontWeight = "normal" } } </script> </body> </html>
<style> /* 使用媒體查詢,去設置樣式更加方便 */ @media screen and (max-width: 480px) { div { color: green; font-weight: bolder; } } </style>
當,是屏幕設備,而且,最大寬度不超過480px的時候,讓文字的顏色變成綠色加粗字體
max-width最大寬度,也就是小於等於的時候
min-width最小寬度,也就是大於等於的時候
效果圖和上圖同樣的,就再也不附圖了。
經過上述的例子,咱們發現的確是媒體查詢在書寫的過程當中更加方便,一方面js要儘可能少操做dom,儘可能減小回流重繪,在一個經過css控制樣式的確是比經過js操做樣式更加節省性能。因此綜上所述,css3帶來的新特性,媒體查詢的確是有必定的應用場景
直接寫在style標籤裏面,目前比較經常使用的是四種設備,實際上是三種,以下:
<!-- 指定屏幕設備 --> <style media="screen"></style> <!-- 指定打印機設備 --> <style media="print"></style> <!-- 指定屏幕閱讀器設備 --> <style media="speech"></style> <!-- 指定全部設備,至關於公共的樣式了 --> <style media="all"></style>
引入的話,也能夠經過重置樣式表引入,以下:
<!-- 指定屏幕設備 --> <link rel="stylesheet" href="css/style.css" media="screen"> <!-- 指定打印機設備 --> <link rel="stylesheet" href="css/style.css" media="print"> 等 ......
還能夠經過@import引入並指定媒體插敘語法,以下:
<!-- 當屏幕的寬度大於360px的時候,就使用 one.css 文件裏面所書寫的樣式 --> @import url(./one.css) (min-width:360px); <!-- 當屏幕的小於880px的時候,就使用 two.css 文件裏面所書寫的樣式 --> @import url(./two.css) (max-width:880px);
and表示而且的意思,須要同時知足 and前和and後 的兩個條件,纔會執行對應的媒體查詢語句,好比:@media screen and (max-width: 480px) { 相應css語句 }
意思以下:
@media
screen
@media (max-width: 480px) { 相應css語句 }
效果是同樣的,只不過省去默認值罷了and
@media screen and (max-width: 480px) and (min-width: 360px) { 相應css語句 }
(max-width: 480px)
{ 相應css語句 }
not關鍵字就是取反的意思,要放在@media後面,其餘的語句前面,以下案例:
<style> /* 小於等於360px的變成綠色加粗字體 */ /* @media screen and (max-width: 360px) { */ /* 加上not取反就是表示 就變成大於360px的變成綠色加粗字體了 */ @media not screen and (max-width: 360px) { div { color: green; font-weight: bolder; } } </style>
支持媒體查詢語法就使用對應媒體查詢語法,不支持就忽略。以下:@media only screen and (max-width: 360px) { css語句 }
這種寫法使用不多,畢竟目前只有低版本瀏覽器纔不支持,圖示一下,相應瀏覽器從何時開始支持的
由上圖咱們能夠看到,的確是比較低版本的瀏覽器纔不支持,谷歌瀏覽器21版本,這個是不少年之前的版本了......
若是咱們有這樣的一個需求:當屏幕的寬度小於360px或者屏幕的寬度大於480px的時候,才讓字體變成綠色加粗樣式
此時,咱們就須要使用或的語法,代碼以下:
<style> @media screen and (max-width: 360px) , /* 多個或的條件使用逗號隔開就好了 */ screen and (min-width: 480px) { div { color: green; font-weight: bolder; } } </style>
@media not或only或不寫 mediatype或不寫(不寫就默認screen) and ( mediafeature媒體特性 ) { 相應css語句 }
媒體特性就是限制條件,在什麼條件下,才使用 相應的書寫的css語句
max-height
min-height
max-width
min-width
媒體特性其實有不少,具體的使用什麼特性根據項目實際狀況。最後再附上官方的媒體查詢網址
W3school的媒體查詢: https://www.w3school.com.cn/c...
MDN的媒體查詢: https://developer.mozilla.org...