[CSS] 详细解释 @media 属性与 (max-width:) and (min-width) 之间的关系及用法
詳細(xì)解釋 max-width and min-width 之間的關(guān)系及用法
- 前言
- @media 是什么怎么用?
- Question 1: So @media only screen and (max-width: 1068px) 是什么鬼?
- @media 如何使用?
- CSS3 多媒體查詢
- 自適應(yīng)視窗
- 多媒體查詢語(yǔ)法
- @media 細(xì)致深入理解
- @media 注意事項(xiàng)
- Bootstrap 的 @media 屬性寫(xiě)法:
前言
現(xiàn)在 HTML5/CSS3 很流行罷,也是未來(lái)時(shí)代的趨勢(shì)。在 HTML5 帶來(lái)的許多實(shí)用功能之后,CSS3也同帶來(lái)了一些牛逼哄哄的功能呢。
- 動(dòng)畫(huà) animation
- 轉(zhuǎn)化 transform
- 過(guò)渡 translation
盡快這已足夠讓我們興奮,許多之前必須用 JS 或 JQ 寫(xiě)的效果用 CSS 就能實(shí)現(xiàn),現(xiàn)在幾行 CSS3 代碼就夠了。
@media 是什么怎么用?
蘋(píng)果官網(wǎng)對(duì) CSS3 @media 的使用:
我第一次看到這個(gè)是在 蘋(píng)果官網(wǎng) ,大概這樣:
DOM 結(jié)構(gòu)代碼:
結(jié)構(gòu)大家都懂,但我們能夠很明顯注意到 class 的區(qū)別,只有 promo-title-0/1/2/3 不同。那么,為什么?
我們看到了 promos li 的 css 代碼。
max-height: 200px; overflow: hidden;以及 .large-3 的代碼
width: 25%;以及 column
position: relative; z-index: 1; min-height: 2px; margin: 0; padding: 0; float: left;CSS 很簡(jiǎn)單,大家一目了然其作用。將 section 下面的 4個(gè)塊寫(xiě)成4個(gè) li 同時(shí)給個(gè)相對(duì)定位和左浮動(dòng)最小高度和Z軸,Yes so easy.
但是按住 Ctrl 同時(shí)移動(dòng)鼠標(biāo)滾輪放大網(wǎng)頁(yè),we will find everthing has changed.
這里的 section 變成了兩格占一排,再看樣式 large-3 被劃上了刪除線.
取而代之的是 medium-6 。
Question 1: So @media only screen and (max-width: 1068px) 是什么鬼?
為什么這時(shí)候 @media 下定義的樣式讓 CSS 發(fā)生了變化,從 large-3 變成了 medium-6 那么small-12 會(huì)發(fā)生什么?
我們?cè)倏s小來(lái)看一看;
這里 section 變成了一格占一排,之前的 @media only screen and (max-width: 1068px) 變成了 @media only screen and (max-width: 735px) ;再看 class 又由 medium-6 變成了 small-12 。
于是,我們可以得出以下結(jié)論:
@media 如何使用?
通常這種類(lèi)型的文檔在 w3cschool 類(lèi)型的網(wǎng)站代碼屬性收集最全最權(quán)威,當(dāng)然還有國(guó)內(nèi)山寨但更強(qiáng)大版 w3cschool.cc 即 菜鳥(niǎo)教程 。
以下內(nèi)容 據(jù)此摘錄 與修改,當(dāng)然為了更便于各位理解。
CSS3 多媒體查詢
CSS3 的多媒體查詢繼承了 CSS2 多媒體類(lèi)型的所有思想: 取代了查找設(shè)備的類(lèi)型,CSS3 根據(jù)設(shè)置自適應(yīng)顯示。媒體查詢可用于檢測(cè)很多事情,例如:
- viewport(視窗) 的寬度與高度
- 設(shè)備的寬度與高度
- 朝向 (智能手機(jī)橫屏,豎屏)
- 分辨率
目前很多針對(duì)蘋(píng)果手機(jī),Android 手機(jī),平板等設(shè)備都會(huì)使用到多媒體查詢。
自適應(yīng)視窗
必須在 中添加一個(gè) 標(biāo)簽:
<meta name="viewport" content="width=device-width, initial-scale=1">
代碼原意翻譯過(guò)來(lái)既是: 視窗的寬度等于設(shè)備寬度,原始比例始終為 1:1 。這樣在改變 device-width 的時(shí)候任意變化修改都能自適應(yīng)了。
Bootstrap自適應(yīng)視窗簡(jiǎn)介
多媒體查詢語(yǔ)法
- 多媒體查詢由多種媒體組成,可以包含一個(gè)或多個(gè)表達(dá)式,表達(dá)式根據(jù)條件是否成立返回 true 或 false 。
- 如果指定的多媒體類(lèi)型匹配設(shè)備類(lèi)型則查詢結(jié)果返回 true,文檔會(huì)在匹配的設(shè)備上顯示指定樣式效果。
- 除非你使用了 not 或 only 操作符,否則所有的樣式會(huì)適應(yīng)在所有設(shè)備上顯示效果。
方法一: 直接寫(xiě)在 CSS 樣式中讓其根據(jù)設(shè)備判斷:
@mediamediatypeand|not|only (mediafeature) {CSS-Code; }方法二: 針對(duì)不同的媒體設(shè)備外部鏈入不同的 stylesheets:
<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">
not / only / all
not: not是用來(lái)排除掉某些特定的設(shè)備的,比如 @media not print(非打印設(shè)備)。
only: 用來(lái)定某種特別的媒體類(lèi)型。
對(duì)于支持 Media Queries 的移動(dòng)設(shè)備來(lái)說(shuō),如果存在 only 關(guān)鍵字,移動(dòng)設(shè)備的 Web 瀏覽器會(huì)忽略 only關(guān)鍵字并直接根據(jù)后面的表達(dá)式應(yīng)用樣式文件。對(duì)于不支持 Media Queries 的設(shè)備但能夠讀取 Media Type 類(lèi)型的 Web瀏覽器,遇到 only 關(guān)鍵字時(shí)會(huì)忽略這個(gè)樣式文件。
all: 所有設(shè)備,這個(gè)應(yīng)該經(jīng)常看到。
多媒體類(lèi)型 mediatype
| all | 用于所有多媒體類(lèi)型設(shè)備 |
| 用于打印機(jī) | |
| screen | 用于電腦屏幕,平板,智能手機(jī)等。 |
| speech | 用于屏幕閱讀器 |
多媒體特性 media feature
| aspect-ratio | 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域?qū)挾扰c高度的比率 |
| color | 定義輸出設(shè)備每一組彩色原件的個(gè)數(shù)。如果不是彩色設(shè)備,則值等于0 |
| color-index | 定義在輸出設(shè)備的彩色查詢表中的條目數(shù)。如果沒(méi)有使用彩色查詢表,則值等于0 |
| device-aspect-ratio | 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的比率。 |
| device-height | 定義輸出設(shè)備的屏幕可見(jiàn)高度。 |
| device-width | 定義輸出設(shè)備的屏幕可見(jiàn)寬度。 |
| grid | 用來(lái)查詢輸出設(shè)備是否使用柵格或點(diǎn)陣。 |
| height | 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域高度。 |
| max-aspect-ratio | 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的最大比率。 |
| max-color | 定義輸出設(shè)備每一組彩色原件的最大個(gè)數(shù)。 |
| max-color-index | 定義在輸出設(shè)備的彩色查詢表中的最大條目數(shù)。 |
| max-device-aspect-ratio | 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的最大比率。 |
| max-device-height | 定義輸出設(shè)備的屏幕可見(jiàn)的最大高度。 |
| max-device-width | 定義輸出設(shè)備的屏幕最大可見(jiàn)寬度。 |
| max-height | 定義輸出設(shè)備中的頁(yè)面最大可見(jiàn)區(qū)域高度。 |
| max-monochrome | 定義在一個(gè)單色框架緩沖區(qū)中每像素包含的最大單色原件個(gè)數(shù)。 |
| max-resolution | 定義設(shè)備的最大分辨率。 |
| max-width | 定義輸出設(shè)備中的頁(yè)面最大可見(jiàn)區(qū)域?qū)挾取?/td> |
| min-aspect-ratio | 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域?qū)挾扰c高度的最小比率。 |
| min-color | 定義輸出設(shè)備每一組彩色原件的最小個(gè)數(shù)。 |
| min-color-index | 定義在輸出設(shè)備的彩色查詢表中的最小條目數(shù)。 |
| min-device-aspect-ratio | 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的最小比率。 |
| min-device-width | 定義輸出設(shè)備的屏幕最小可見(jiàn)寬度。 |
| min-device-height | 定義輸出設(shè)備的屏幕的最小可見(jiàn)高度。 |
| min-height | 定義輸出設(shè)備中的頁(yè)面最小可見(jiàn)區(qū)域高度。 |
| min-monochrome | 定義在一個(gè)單色框架緩沖區(qū)中每像素包含的最小單色原件個(gè)數(shù) |
| min-resolution | 定義設(shè)備的最小分辨率。 |
| min-width | 定義輸出設(shè)備中的頁(yè)面最小可見(jiàn)區(qū)域?qū)挾取?/td> |
| monochrome | 定義在一個(gè)單色框架緩沖區(qū)中每像素包含的單色原件個(gè)數(shù)。如果不是單色設(shè)備,則值等于0 |
| orientation | 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域高度是否大于或等于寬度。 |
| resolution | 定義設(shè)備的分辨率。如:96dpi, 300dpi, 118dpcm |
| scan | 定義電視類(lèi)設(shè)備的掃描工序。 |
| width | 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域?qū)挾取?/td> |
至此,我們解釋之前 apple 官網(wǎng) 的 Question1 :
@media only screen and (max-width: 1068px)
僅電腦設(shè)備中的頁(yè)面最大可見(jiàn)區(qū)域?qū)挾葹?1068px 時(shí)顯示其定義的樣式。所以當(dāng)設(shè)備寬度小于 1068px 采用 medium-6 。
@media only screen and (max-width: 735px)
僅電腦設(shè)備中的頁(yè)面最大可見(jiàn)區(qū)域?qū)挾葹?735px 時(shí)顯示其定義的樣式。所以當(dāng)設(shè)備寬度小于 735px 采用 small-12 。
這個(gè)時(shí)候小伙伴你也一定機(jī)智的想到了如果我想做一個(gè) 平板 和 手機(jī)之間的 @media 屬性怎么辦?當(dāng)然有辦法了。 辦法就是:
@mediascreen ( max-width: 1068px ) and (min-width: 765px) {CSScode}@mediascreenand (max-width: 640px) and (min-width: 481px){CSScode}那么屏幕 retina 分辨率怎么辦?看看 apple 怎么做:
這是完整代碼:
是不是很有趣? apple 將設(shè)計(jì)化簡(jiǎn)為繁,但這背后的代價(jià)卻更大。但為了給用戶最直觀明了和完美的呈現(xiàn),這些都不足為懼。
但如果你以為 copy 上面代碼就夠了? Too young too naive! 我們需要學(xué)習(xí)的還很多,你會(huì)發(fā)現(xiàn)有時(shí)候?qū)懭?CSS3 @media 屬性沒(méi)卵用。
比如: Quesition2: -webkit-min-device-pixel-ratio 是個(gè)什么鬼?
@media 細(xì)致深入理解
不同設(shè)備有不同的寬高,不同分辨率,不同的DPI,不同的長(zhǎng)寬比,如何區(qū)分?如何針對(duì)?它們對(duì)應(yīng)的 @media 屬性功能怎么寫(xiě)入呢?
上面表格中其實(shí)全部有標(biāo)明方法 但你真的理解了嗎?這樣更簡(jiǎn)單一些!
不同的寬高:
width/height 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域?qū)挾?高度。
max/min-width/height 定義輸出設(shè)備中的頁(yè)面最大/小可見(jiàn)區(qū)域?qū)挾?高度。
device-width/height 定義輸出設(shè)備的屏幕可見(jiàn)寬/高度。
max/min-device-width/height 定義輸出設(shè)備的屏幕最大/小可見(jiàn)寬/高度。
不同的分辨率:
resolution 定義設(shè)備的分辨率。如:96dpi, 300dpi, 118dpcm
max/min-resolution 定義設(shè)備的最大/小分辨率。
不同的長(zhǎng)寬比:
aspect-ratio 定義輸出設(shè)備中的頁(yè)面可見(jiàn)區(qū)域?qū)挾扰c高度的比率。
device-aspect-ratio 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的比率。
max/min-aspect-ratio 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的最大/小比率。
max/min-device-aspect-ratio 定義輸出設(shè)備的屏幕可見(jiàn)寬度與高度的最大/小比率。
那么 Question2 -webkit-min-device-pixel-ratio 是個(gè)什么鬼?
它得意思是:Gives the number of device pixels per CSS pixel. css px 和物理 px(device px) 之間的比率即設(shè)備像素比率。
iphone 的物理分辨率是 320X480,但是呈現(xiàn)的內(nèi)容卻是 640×960,但其實(shí)我們?cè)O(shè)置的 css px 是相對(duì)于物理分辨率的,即 320×480,但是因?yàn)槲覀冊(cè)O(shè)置的 css px 要顯示在更寬闊的 640×960 的內(nèi)容區(qū)域里頭,所以10個(gè) css px 在 640×960 的呈現(xiàn)效果就相當(dāng)于5個(gè) device px 在 320×480 的呈現(xiàn)效果。
所以如果圖片得大小是100×100,那么到iphone里頭就會(huì)被放大2倍,于是圖像會(huì)變得比以前模糊,通常得解決辦法是,用 background-size 設(shè)置為50%,以前的一半,然后再在 iphone 放大2倍,等于沒(méi)變化,恢復(fù)到正常效果,不模糊了。
@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1441px), onlyscreenand (max-width: 1441px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1441px) and (min-resolution: 144dpi) {}則是一種兼容寫(xiě)法, -webkit-min-device-pixel-ratio 跟 min-resolution 意思一致, 我們發(fā)現(xiàn)每個(gè)逗號(hào)間除了 -webkit-min-device-pixel-ratio 唯一的不同是什么?
dppx dpi 單位,所以這里的兼容這是兼容不同的瀏覽器的計(jì)算單位。
設(shè)備像素比devicePixelRatio簡(jiǎn)單介紹
單位 pixel-ratio/dpi/dppx 區(qū)別
不同設(shè)備 pixel-ratio/dpi/dppx 值的區(qū)別
設(shè)備兼容 及 瀏覽器 支持情況區(qū)別及簡(jiǎn)明易懂案例
@media 注意事項(xiàng)
寫(xiě)作順序問(wèn)題
這簡(jiǎn)直是個(gè)小技巧,一開(kāi)始我也十分納悶。為什么寫(xiě)的有些 @media 沒(méi)有起作用。原來(lái)有這么回事:
我們知道 min-width 表示最小即大于等于, max-width 表示最大即小于等于; 但我們也很清楚 CSS 樣式 跟 DOM 結(jié)構(gòu) 跟 JS 一樣 從前往后加載,后面重復(fù)代碼會(huì)覆蓋之前代碼。
那么這樣的順序有問(wèn)題嗎?
/*樣式1*/ @media (min-width: 320px) {.container{ width: 92%; margin: 4%; } }/*樣式2*/ @media (min-width:320px) and (max-width: 640px){.container{ width: 86%; margin: 7%; } }/*樣式3*/ @media (max-width: 640px) {.container{ width: 80%; margin: 10%; } }會(huì)發(fā)生什么?
當(dāng) device-width <= 640 時(shí) 樣式3 起作用
當(dāng) 640 <= device-width <= 321 時(shí) 樣式2 起作用但無(wú)效
當(dāng) device-width >= 640 時(shí) 樣式1 起作用
Question3: 為什么上面代碼不起起作用但無(wú)效?
min-width:320px 即 width >= 320px
max-width: 640px and min-width: 32px 即 640 <= width <= 320px
max-width: 640px 即 width <= 640px
Answer3:根據(jù) CSS 從上至下執(zhí)行的規(guī)律以及我們的分析:
當(dāng)視窗寬度大于等于 320px 時(shí)候執(zhí)行樣式1,(有效)
當(dāng)視窗寬度小于等于 640px 大于等于 320px 時(shí)執(zhí)行樣式2,有效但無(wú)法使用,因?yàn)楸?樣式3 覆蓋。( CSS 解析器跟 JS 一樣在相同方法上覆蓋之前定義的方法 )
當(dāng)視窗寬度小于等于 640px 時(shí)執(zhí)行樣式3。(有效)
解決辦法:
調(diào)整順序并適當(dāng)修改,
當(dāng) width <= 320px 時(shí),執(zhí)行 樣式1;
當(dāng) 640px <= width <= 321px 時(shí),執(zhí)行 樣式2;(給 min-wdith 的值 +1px 以讓 devic-width 值等于320時(shí) 樣式2 不會(huì)覆蓋 樣式1)
當(dāng) width >= 641px 時(shí),執(zhí)行 樣式3;
代碼如下:
/*樣式1*/ @media (max-width: 320px) {.container{ width: 92%; margin: 4%; } }/*樣式2*/ @media (min-width:321px) and (max-width: 639px){.container{ width: 86%; margin: 7%; } }/*樣式3*/ @media (min-width: 640px) {.container{ width: 80%; margin: 10%; } }所以是不是很簡(jiǎn)單?萬(wàn)能了也。任意分辨率混搭啊。
注意事項(xiàng)總結(jié):
1, 適配順序
max-wdith: number0 小于等于 分辨率從大寫(xiě)到小 如果同一選擇器樣式在更小分辨率下沒(méi)有重寫(xiě)則會(huì)沿用 CSS中定義的基本樣式
mW <= 320; mW <= 480; mW <= 768; mW <= 960; mW <= 1080; mW <= 1280; mW <= 1440; /*@media 則會(huì)根據(jù) `` max-width `` 的大小變化從小到小取值 */(min-width: number1) and (max-width: number2) 大于等于number1 同時(shí)滿足 小于等于 number2
寫(xiě)完 max-wdith 則開(kāi)始寫(xiě)其中間值;
number1 必須在 number0 的基礎(chǔ)上 +1px 以避免覆蓋之前 width <= number0時(shí)的樣式,
number2 則不要求必須在 number3 的基礎(chǔ)上 -1px (因?yàn)楹竺娑x的 width >= number3 就算 width 的 number 相等也會(huì)根據(jù)先后原則覆蓋這個(gè)樣式) 。
min-wdith: number3 大于等于 分辨率從小寫(xiě)到大 如果同一選擇器樣式在更大分辨率下沒(méi)有重寫(xiě)則會(huì)沿用之前 @media 定義的樣式 其次再是 CSS中定義的基本樣式
mW >= 1440; mW >= 1280; mW >= 1080; mW >= 960; mW >= 768; mW >= 480; mW >= 320; /*@media 則會(huì)根據(jù) `` min-width `` 的大小變化從大到小取值 */Bootstrap 的 @media 屬性寫(xiě)法:
@media (max-width: 767px) {// col-xs }@media (min-width: 768px) and (max-width: 991px) {// col-sm }@media (min-width: 992px) and (max-width: 1199px) {// col-md }@media (min-width: 1200px) {// col-lg }apple 的 @media 屬性寫(xiě)法 ( 含 Retina ) PS:前文順序不同 因?yàn)槠涠x的選擇器不是同一組 下列代碼筆者已經(jīng)修改
@mediaonlyscreenand (max-width: 1441px){.container::after{ content: "1441"; } }@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1441px), onlyscreenand (max-width: 1441px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1441px) and (min-resolution: 144dpi){.container::after{ content: "1441 Retina"; } }@mediaonlyscreenand (min-width: 1068px) and (max-width: 1441px){.container::after{ content: "1068 - 1441"; } }@mediaonlyscreenand (max-width: 1068px){.container::after{ content: "1068"; } }@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 1068px), onlyscreenand (max-width: 1068px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 1068px) and (min-resolution: 144dpi){.container::after{ content: "1068 Retina"; } }@mediaonlyscreenand (max-width: 1068px) and (min-width: 735px){.container::after{ content: "735 - 1068"; } }@mediaonlyscreenand (max-width: 735px){.container::after{ content: "735"; } }@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 735px), onlyscreenand (max-width: 735px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 735px) and (min-resolution: 144dpi){.container::after{ content: "735 Retina"; } }@mediaonlyscreenand (max-width: 340px){.container::after{ content: "340"; } }@mediaonlyscreenand (-webkit-min-device-pixel-ratio: 1.5) and (max-width: 340px), onlyscreenand (max-width: 340px) and (min-resolution: 1.5dppx), onlyscreenand (max-width: 340px) and (min-resolution: 144dpi){.container::after{ content: "340 Retina"; } }@mediaonlyscreenand (min-width: 1441px) {.container::after{ content: "1441"; } }總結(jié)
以上是生活随笔為你收集整理的[CSS] 详细解释 @media 属性与 (max-width:) and (min-width) 之间的关系及用法的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: win10 平台VS2019最简安装实现
- 下一篇: css 横线_atom.css正式发布,