2012-04-24 85 views
25

我正在重新設計我的博客,並考慮到響應式網頁設計和「移動優先」方法 - 總之我試圖使用最小寬度來避免任何類型的複製或css ..沒有顯示:沒有等..CSS特殊性,媒體查詢和最小寬度

我的問題是,當我確實需要覆蓋CSS值時,較低的最小寬度優先。例如:

@media only screen and (min-width: 600px) { 
    h2 { font-size: 2.2em; } 
} 

@media only screen and (min-width: 320px) { 
    h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 
} 

我希望當我在600px的決議和上面得到2.2em H2,而是我得到1.7em。在我開發工具我看到2.2em聲明在那裏,但另一個優先..它沒有任何意義!

我可以繼續使用最小寬度,並在不使用更強選擇器或最大寬度的情況下有效覆蓋更高分辨率的聲明。

+2

要澄清以下BoltClock的答案,這就是瀏覽器在想:它擊中第一個媒體查詢,'哦,我有600的最小寬度!讓我們把我的字體大小設置爲2.2em!'。然後它繼續到下一個媒體查詢,'哦,我有320的最小寬度!現在讓我們設置我的字體!'。 – 2012-04-25 19:18:29

+1

獨角獸的回答是正確的,但也許你應該考慮最大寬度而不是最小寬度。如果你想在較小的屏幕上使用較小的H2大小,你可以在'max-width:599px'的查詢中編寫'font-size:2.2em'而不用媒體查詢,然後'font-size:1.7em'。 – 2012-04-25 19:19:23

+0

最大寬度不是一個很好的做法..很難解釋,但是當您使用最大寬度時,您最終將重新編寫CSS。請檢查http://www.html5rocks.com/en/mobile/responsivedesign/ – 2012-04-25 21:03:34

回答

32

我期望當我在600px及以上的分辨率下獲得2.2em h2,而是我獲得1.7em ..在我的開發工具中,我看到2.2em聲明在那裏,但另一個優先..這是沒有道理的!

它是有道理的。如果媒體滿足min-width: 600px,那麼它也應該滿足min-width: 320px;換句話說,至少600像素寬的任何東西都至少320像素寬,因爲600大於320.

由於兩個媒體查詢的計算結果都爲true,最後發生的規則優先於級聯,你的代碼等價於:

h2 { font-size: 2.2em; } 
h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 

這解釋了爲什麼2.2em出現在你的開發工具,但並沒有採取明顯的影響。

最簡單的解決方法是切換你@media塊左右所以你的規則級聯以正確的順序:

@media only screen and (min-width: 320px) { 
    h2 { font: normal 1.7em/2.1em Helvetica, sans-serif; } 
} 

@media only screen and (min-width: 600px) { 
    h2 { font-size: 2.2em; } 
} 
+1

CSS的特殊性也考慮到外觀的順序......有時你只是錯過了當你在PC前面花12小時時最明顯的東西!謝謝獨角獸:) – 2012-04-25 21:02:40

+0

我不明白。如果至少600px寬的介質的寬度至少爲320px,怎麼辦?是否真的意味着它可能會有320px的寬度(例如,通過調整瀏覽器窗口的大小來縮小)? – 2013-10-07 06:08:52

+0

@John Wang:600px大於320px。所以如果東西是600px或更寬,它也是320px或更寬。這就是「至少」的意思。 – BoltClock 2013-10-07 07:19:54