響應式web-媒體查詢

來源:互聯網
上載者:User

標籤:行動裝置   調整   粘合劑   可見   技術   針對   nowrap   運用   指定   

響應式web-媒體查詢

媒體查詢是一個將很多響應式概念和工具串連在一起的粘合劑。這些查詢語句都是簡單但是功能很強大的,它們允許我們檢測裝置屬性,定義規則,並根據規則等的不同載入不同的 CSS 屬性。例如,你可以為不同的裝置最佳化導覽功能表,將案頭瀏覽器上的完整水平菜單轉換為經常在行動裝置上遇到的 “漢堡包”(垂直或摺疊)菜單結構

 

web響應式布局的核心有兩個,媒體查詢和視圖。在這篇文章中,我們將會看到怎麼運用媒體查詢來建立響應式布局。

媒體查詢是一個將很多響應式概念和工具串連在一起的粘合劑。這些查詢語句都是簡單但是功能很強大的,它們允許我們檢測裝置屬性,定義規則,並根據規則等的不同載入不同的CSS屬性。例如,你可以為不同的裝置最佳化導覽功能表,將案頭瀏覽器上的完整水平菜單轉換為經常在行動裝置上遇到的“漢堡包”(垂直或摺疊)菜單結構。

建立查詢

讓我們來嘗試一個實際的例子。在網站RWDflix(作者在書中建立的視頻網站執行個體)主要內容旁邊的aside標籤中顯示的是公告和新聞,手機和平板的訪客可能專註於看中間的節目列表而不是別的,所以讓我們為小螢幕裝置的使用者把這個元素(aside)隱藏起來。

在本文接下來的部分,我將使用前面所示的@media的方法來進行媒體查詢

將當前aside中的CSS類移除並將其替換成下面的媒體查詢語句:

@media screen and (min-width: 680px) {    aside {        width: 33%;    }}@media screen and (max-width: 680px) {    aside {        display: none;    }}

 

這一對兒媒體查詢語句的作用是:當螢幕寬度大於680px時(通過min-width來詢問螢幕的寬度是否最小為680px),將aside元素中的內容設定為33%螢幕寬度;當螢幕寬度比680px窄時(通過max-width來詢問螢幕的寬度是否最大為680px),將aside元素隱藏。

接下來,當aside標籤隱藏時,將TV視頻列表設定為螢幕的寬度。

 

section.showslisting {    margin-bottom: 25px;}@media screen and (min-width: 680px) {    section.showslisting {        width: 66%;    }}@media screen and (max-width: 680px) {    section.showslisting {        width: 100%;    }}

 

當我們在案頭的瀏覽器中改變頁面大小時,可以看到aside標籤隨著我們頁面寬度的變化而出現或隱藏,頁面內容部分也隨之適宜地調整它的寬度。

當然也可以在我們的媒體查詢中運用一些基本的邏輯,然後我們就可以結合這些邏輯創造出很多種情況。例如,可以使用以下的邏輯:

@media only screen and (min-width: 640px) and (max-width: 1136px) {    …}

上面的代碼將在裝置的寬度在640px和1136px之間時調用CSS樣式。min-width屬性是頁面寬度的最小值,max-width是最大值。

若要匹配以上媒體查詢語句,需要兩個條件都為真。如果在想用邏輯OR(或)時需要用逗號替代AND,此時會在一個條件為真時匹配樣式(木有OR運算式,不要搞混了),下面的查詢語句將用於螢幕(screen)或列印裝置(print):

@media only screen, print {    …}

 

也可以結合AND和OR邏輯來建立更複雜的查詢。下面這個頁面當前在螢幕較寬的手機上橫屏模式渲染:

在上面這張裡,螢幕寬度為732px,已經高出了上面設定的640px。然而aside元素並沒有符合在手機中隱藏的要求,所以需要在螢幕尺寸小於640px時或者當裝置橫向時將它隱藏起來。

 

  orientation:portrait | landscape

    portrait:
    指定輸出裝置中的頁面可見地區高度大於或等於寬度(一般為豎屏)
    landscape:
    除portrait值情況外,都是landscape(一般為橫屏)
@media screen and (max-width: 680px), screen and (orientation: landscape) and (max-width: 750px) {    aside {        display: none;    }}

  以及視頻列表部分相應的媒體查詢:

@media screen and (max-width: 680px), screen and (orientation: landscape) and (max-width: 750px) {    section.showslisting {        width: 100%;    }}

這裡我們增加了一個max-width約束來顯示平板橫屏模式時aside的顯示情況,同時也展示了怎麼將邏輯約束結合起來。

Only和Not的邏輯查詢

我們也可以用only和not來建立精準的媒體查詢。例如,下面這種情況將會匹配至少640px寬度的裝置但是排除了列印媒體類型:

@media not print and (min-width: 640px) {    …}

 

與之相反,下面的查詢語句將僅僅(only)應用於螢幕媒體類型且最小為640px寬度的裝置:

@media only screen and (min-width: 640px) {    …}

 

查詢特性

我們目前所看到的width和height查詢是最廣泛應用的查詢語句,但是也有其他的一些很有用的媒體特性(media feature)來應對不同特性的裝置。包括顏色能力、長寬比、取向、解析度和基於Mozilla-和WebKit-特定供應商(瀏覽器)的特性。這些特性中的大部分都支援min-和max-首碼並且和上面那些查詢語句作用類似。

長寬比 aspect-radio

長寬位元性允許我們限制水平像素與垂直像素的比值,且用一個斜杠隔開。例如:

@media screen and (min-aspect-ratio: 1/1) {    …}

 

上面這條規則匹配螢幕寬高比為1:1或比值更大的裝置,所以可以是正方形屏或是橫屏。

這條規則的常見用途是來檢測更寬一些的裝置,當我們在播放視頻時很有用:

@media screen and (min-aspect-ratio: 16/9) {    …}

 

取向 orientation

就像之前顯示的那樣,這個特性可以檢測裝置是橫屏還是豎屏模式。例如:

@media all and (orientation: landscape) {//橫屏    …}

 

還有:

@media all and (orientation: portrait) {//豎屏    …}

 

顏色 color

這個特性檢查裝置是否可以支援特定的顏色層級。例如,下面的語句可以用來檢測裝置是否至少支援8位顏色(256色):

@media all and (min-color: 8) {    …}

 

顏色指數 color-index

這個參數的功能和color很像,但是檢測顏色的數量而不是位級:

@media all and (min-color-index: 256) {    …}
單色 monochrome

同樣,這個參數也與color類似,但是檢測裝置的灰階:

@media all and (min-color-index: 256) {    …}

 

解析度 resolution

以下語句檢測目標裝置是否有高解析度螢幕:

@media all and (min-resolution: 120dpi) {    …}

 

掃描 scan

掃描媒體功能讓我們檢查電視的掃描過程,選項可以是交錯的interlace或者是漸進的progressive:

@media all and (scan: progressive) {    …}

 

柵格 grid

柵格參數是為了檢測裝置是否是終端裝置。包括舊手機(非智能手機)、可訪問的手機(針對視力不好的人)和盲文裝置。它會在邏輯正確的時候返回一個布爾值:

@media grid {    …}

 

正如大家所見,通過使用維度和基於特性的查詢的組合,我們可以建立複雜的樣式表來有效地針對大量裝置,並對它們進行最有效工作。這是媒體查詢最重要的內容:它們允許我們為特性的裝置配置有選擇性的載入CSS樣式。

簡化的應用程式範例

現在我們已經對媒體查詢有了基本的理解,讓我們來繼續建立媒體查詢,來使樣本網站更加整潔。

首先,整合已經寫好的查詢代碼,將CSS類移動到兩組媒體查詢語句中:

/* Media Queries *//* For example, desktop devices */@media screen and (min-width: 680px) {    aside {        width: 33%;    }    section.showslisting {        width: 66%;    }}/* For example, medium-width screens or smaller screens in landscape */@media screen and (max-width: 680px), screen and (orientation: landscape) and (max-width: 750px) {    aside {        display: none;    }    section.showslisting {        width: 100%;    }}

 

整潔了許多!我們可以繼續為每一個查詢塊添加樣式。

讓我們回顧一下上一節中示範的樣本網站,以便為每個螢幕尺寸最佳化其他內容。下一步要將小螢幕裝置上電視節目的描述隱藏,並且在中型螢幕上將描述縮短。

如果描述性文本有一個類,這將是非常方便的,所以為包含節目描述的p標籤的每個執行個體添加一個類:

<section class="tvshow">    <h3>Show</h3>    <img src="http://placehold.it/350x150" class="thumbnail">    <p class="showdescription">Lorem ipsum dolor sit amet,     consectetur adipiscing elit.</p></section>

 

讓我們添加新的媒體查詢來適應我們想要支援的各種螢幕尺寸,並且整理現有的尺寸分布。

我們想要設計的要迴流(頁面重新渲染)的特定寬度被稱為斷點,我們添加的斷點不可能是詳盡的:因為裝置尺寸是個大範圍,而且新的裝置不停地會出現新的螢幕尺寸,所以試圖用單獨的查詢來針對每個裝置是徒勞的。更好的方法是評估布局設計中需要迴流的點,然後為這些斷點建立媒體查詢。這就是響應性web設計的美妙之處:我們可以確保每個裝置都能得到合適的布局,而不必為每個裝置分別設計。

增加下面的斷點,並將已有的樣式重構為:

/* Media Queries *//* For example, older phones */@media only screen and (min-width: 320px) {    aside {        display: none;    }    section.showslisting {        width: 100%;    }    .showdescription {        display: none;    }}/*For example, newer phones */@ media only screen and (min-width: 480px) {} /*For example, small computer screens and larger tablets */@media only screen and (min-width: 768px) {    .showdescription {        text-overflow: ellipsis;        display: block;        white-space: nowrap;        width: 100px;        overflow: hidden;    }}/* For example, typical desktop monitors or larger tablet devices */@media only screen and (min-width: 992px) {    aside {        width: 33%;        display: block;    }    section.showslisting {        width: 66%;    }    .showdescription {        white-space: normal;        width: 125px;    }}/* Large Devices, for example large monitors and TVs */@media only screen and (min-width: 1200px) {}

 

這些媒體查詢語句的意思很明晰。它們對不同螢幕大小的裝置定義查詢。正如CSS中的C所指的那樣,媒體查詢是*層疊*的:我們可以對更小螢幕的裝置基於斷點建立樣式並且更改不同的屬性。

注意在@media only screen and (min-width: 320px)中針對小螢幕裝置的斷點和@media only screen and (min-width: 768px)中針對中型螢幕裝置的斷點,所有的更改都是在showdescription類上:顯示文本或者隱藏它。然後在@media only screen and (min-width: 992px)中針對大螢幕的斷點上,所有的元素都顯示出來。

小螢幕斷點產生的布局:

中型螢幕斷點產生的布局:
中型螢幕到大螢幕斷點間尺寸的布局:

 

響應式web-媒體查詢

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.