1. 程式人生 > >【25】手把手教你響應式佈局(一)

【25】手把手教你響應式佈局(一)

一:佈局方式有如下幾種:

1. 固定佈局:固定佈局以PX(畫素)作為單位的,在PC端,設計稿多少PX就寫多少PX,前幾年都是這種佈局,常見的是以960px或者1000px來設計的,但是這樣設計有如下缺點:

1.1.頁面很死板,在更大的螢幕上,頁面左右2邊留白。

1.2.不適應響應性佈局。

2.  流式佈局:流式佈局是以百分比作為單位的,我們要牢記如下公式:

百分比寬度 = 目標元素寬度 / 上下文元素寬度

這種佈局優點:可以自適應佈局,根據不同的解析度顯示不同的寬度。

缺點:在行高或者marginTop在大螢幕下看起來太高,在小螢幕下看起來太窄。

3   彈性佈局:彈性佈局是以em作為單位的,同樣彈性佈局也支援如下公式:

百分比尺寸 = 目標元素尺寸 / 上下文元素尺寸

使用em將文字畫素px轉換為相對單位,現在瀏覽器預設文字的大小是16px,如果一個文字大小是48px,上下文元素是(瀏覽器),那麼轉換成em 就是 48/16 = 3em. 但是如果一個h1標籤的font-size是48px, h1標籤內部span標籤font-size 是24px,那麼h1標籤的font-size = 48 / 16 = 3em  h1 span {font-size = 24/16 =1.5em}.彈性佈局也支援響應性web設計。

二: 媒體查詢:

根據特定的環境查詢各種屬性值,比如裝置的寬度,是否橫向使用不同的css樣式來渲染。

媒體查詢使用如下:比如內聯樣式可以如下寫:

1. 最大寬度960px一種佈局:

 @media screen and (max-width:960px) {<=960}

2. 最小寬度600px 另一種佈局:

@media screen and (min-width:600px) {>=600}

3. 寬度在600px 到 960px之間,如下:

@media screen (min-width:600px) and (max-width:960px) {600<=x<=900}

4.外聯樣式使用link標籤來引用樣式:

<link rel=”stylesheet” href=”xx1.css” media=”screen and (max-width:960px)”/>

<link rel=”stylesheet” href=”xx2.css” media=”screen and (min-width:600px)”/>

<link rel=”stylesheet” href=”xx3.css” media=”screen and (min-width:600px) and (max-width):960px”/>

如果對於像ipad來說,我們可以在上面增加一個屬性 orientation(landscape或portrait) 橫屏或者豎屏。

理解meta各個屬性的含義:

h5頁面移動端開發需要在head標籤內引入下面這句話。(如果沒有引入的話,頁面的字型等大小就不正常了)。

<meta name="viewport" content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no" />

具體含義如下:

Width: 控制viewport的大小。如device-width為裝置的寬度。

initial-scale: 初始縮放比例,頁面第一次載入時的縮放比例。

maximum-scale 允許使用者縮放到的最大比例,範圍從0到10.0

minimum-scale: 允許使用者縮放到的最小比例,範圍從0到10.0

user-scalable: 使用者是否可以手動縮放,值可以是:

1,  yes,true允許使用者縮放;

2,  no、false不允許使用者縮放。 (只設置這一個屬性,有的瀏覽器並不生效,我們需要配合maxinum-scale和mininum-scale最大縮放與最小縮放分別為1:1)。

綜合:流式佈局和彈性佈局及配合媒體查詢 是 響應性佈局的最好方式

但是針對響應性web佈局使用媒體查詢也有缺點的,缺點如下:

對於設計師:要針對不同的螢幕大小設計不同的設計,(例如寬屏下的三欄設計、普通螢幕下的兩欄設計以及移動裝置上的單欄設計等)。對於前端對於不同的螢幕要寫不同的樣式,增加了工作量,同時維護起來不是很方便(要維護幾份不同的css)。

三:圖片

1. 對於背景圖片來說css3有個屬性 background-size可以等比例縮放背景圖片。

但是對於小螢幕的移動裝置去載入大背景圖片的話,有缺點的,最主要的缺點是要更大的頻寬,浪費流量。所以我們要想做的更好的話,可以使用媒體查詢根據裝置的寬度來渲染不同大小的背景圖片。

2. 對於頁面上的<img/>標籤圖片的話:

2.1. 如果只是頁面上靜態圖片的話,不考慮頻寬的情況下,可以使用width=100%”等比例縮放,如:<img src=”XX.png” width=”100%”/>

2.2. 如果是商品圖或者頁面上有多個的話,考慮不浪費不必要的頻寬,需要後臺根據不同的裝置寬度大小來返回不同的json資料的圖片來給我們前端,之後我們前端使用JS動態的渲染出來。

在現代瀏覽器中(包括IE8+)中要實現圖片隨著流動佈局相應縮放非常簡單,只需要在css中加上這麼一句程式碼:

img { max-width:100%; }

含義是:確保圖片的最大寬度不會超過瀏覽器的視窗或其容器可視部分的寬度,所以當視窗或容器的可視部分變窄時,圖片的最大寬度值也會相應的變小,圖片本身永遠不會覆蓋容器。

四:理解css單位px,em,rem的區別:

1.  Px是css中最基本的長度單位,在PC端,設計稿多少畫素,頁面css就寫多少畫素。

2.  em 是相對單位,相對於上下文元素而言,一般情況下,瀏覽器預設的字型大小是16px,也就是1em等於16px;比如:

3. rem也是相對單位rem是相對於html根元素來計算的,這就是說只要在根節點設定好參考值,那麼全篇的1rem都相等,計算方式同 em,預設1rem=16px; 同理你可以 設定html { font-size:62.5% } 那麼1rem就等於10px,以此類推。。。

比如設定html根元素 如下程式碼:

html {font-size: 62.5%; /*10 ÷ 16 × 100% = 62.5%*/}

當一個p元素是24px的話,那麼轉換成rem為單位的話,那麼只需要如下這樣寫即可:

p {font-size: 2.4rem; /*2.4 × 10px = 24px */ }

五:元素未知寬度居中。

我們先來介紹一下未知寬度,元素居中的方法,對於響應性web設計是有幫助的,我們可以來了解下。

第一種方法:

假如頁面html結構如下:

<div>

<p>What is CSS?</p>

</div>

只需要給父級元素div 設定 文字對齊是 居中對齊。子元素設定display:inline-block即可。如下程式碼:

div{text-align:center}

p{display:inline-block}

第二種方法如下:

div{position:relative; left:50%; float:left;}

p{position:relative; left:-50%;}

六:媒體查詢標準寫法:media queries

@media 裝置型別 and (裝置特性-寬度) {

     // css 樣式

}

css2.1中定義了10種裝置型別,分別如下:

可以指定的值      含義

all      所有裝置

screen     顯示器

print      列印用紙或列印預覽檢視

handled      便攜裝置

tv      電視機型別的裝置

speech      語音和音訊合成器

braille  盲人用點字法觸覺回饋裝置

embossed      盲人印表機

projection      各種投影裝置

tty      使用固定密度字母柵格的媒介,比如電傳打字機和終端

Css裝置特性共有13種,是一個類似於CSS屬性的集合。但與CSS屬性不同的是,大部分裝置特性的指定值接受min/max的字首,用來表示大於等於或小於等於的邏輯,以此避免使用<和>這些字元。

裝置特性如下表:

 特性      可指定的值      是否允許使用min/max字首      特性說明

 width      帶單位的長度數值      允許      瀏覽器視窗的寬度  css

 height      帶單位的長度數值      允許      瀏覽器視窗的高度

 device-width      帶單位的長度數值      允許      裝置螢幕解析度的寬度值

 device-height      帶單位的長度數值      允許      裝置螢幕解析度的高度值

 orientation      只能指定兩個值:portrait或landscape      不允許      視窗的方向是縱向還是橫向

 aspect-ratio      比例值,例如:16/9      允許      視窗的縱橫比,比例值為瀏覽器視窗的寬度值/高度值

 device-aspect-ratio      比例值,例如:16/9      允許      裝置螢幕解析度的縱橫比,比例值為裝置螢幕解析度的寬度值/高度值

 color      整數值      允許      裝置使用多少位的顏色值,如果不是彩色裝置,該值為0

 color-index      整數值      允許      色彩表中的色彩數

 monochrome      整數值      允許      單色幀緩衝器中每畫素的位元組數

 resolution      解析度值,譬如300dpi      允許      裝置的解析度

 scan      只能指定兩個值:progressive或interlace      不允許      電視機型別裝置的掃描方式,progressive表示逐行掃描,interlace表示隔行掃描

 grid      只能指定兩個值:0或1      不允許      裝置是基於柵格還是基於點陣圖。基於柵格時該值為1,否則該值為0

上面是一些響應式web設計的基本知識點,下面我們可以詳細講解下響應式web設計如何實踐

1. 首先需要在頁面頭部引入這行meta程式碼,如下:

<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale=1, user-scalable=0" />

還要引入這一句:

 <meta content="telephone=no,email=no" name="format-detection" />

我們的程式碼有類似於電話這樣的數字的時候,因為有的手機上它會自動轉換成可以撥打電話,所以我們加上這句就不會了。

2. 響應性web設計需要使用css3媒體查詢media來寫不同的css樣式

在移動端瀏覽器中或者某些桌面瀏覽器中,window物件有一個devicePixelRatio屬性,它的官方定義為,裝置的物理畫素與裝置的獨立畫素的比例,也就是 devicePixelRatio = 裝置的物理畫素/ 裝置的獨立畫素。這三個引數不是固定的,只要其中2個確定了,那麼就可以知道第三個引數了,裝置的物理畫素我們可以對映到裝置的解析度的寬度獨立畫素我們可以對映到媒體查詢media定義的寬度。而比列devicePixelRatio我們可以理解為css中的1畫素(px)在裝置上佔用多少個物理畫素。比如我們目前常見的手機解析度如下:

 手機型別:      解析度

 小米3      1080*1920

 小米2      720*1280

 紅米Note      720*1280

 魅族4      1152*1920

 魅族3      1080*1800

 魅族2      800*1280

 iphone6      750*1334

iphone5s       640*1136

iphone4s       480*800

 iphone3s      320*480

 三星      720*1280

 三星      480*800

如上小米3解析度為1080,獨立畫素為360px,那麼比列為3,也就是一個css的1px,佔用3個物理畫素,小米2和紅米Note解析度為720,獨立畫素還是360px,所以比列為2,所以小米3相對於小米2與紅米Note更清晰。同理iphone和其他型別的手機也一樣。

而上面說的獨立畫素就是360px,正是我們css中的媒體查詢關聯的。

如下我們可以在css加上這樣的媒體查詢就可以匹配到樣式了;如下:

/* 針對手機螢幕的寬度是360 384等螢幕的寬度

 *width(寬度可以設定為384px) max-width:384來計算 但是邊距 字型大小等還是安裝360px來計算

 *****************************************/

@media (min-width:360px) and (max-width: 399px) {}

而我們目前的獨立畫素有320,400的,我們也可以增加css媒體查詢。如下:

/* min-width:320px

* 針對裝置獨立畫素為320px 的css

* min-width:320 和 max-width:639之間 320-639公用樣式也包含在裡面

============================*/

@media (min-width: 320px) and (max-width:639px){}

/*

* 針對裝置獨立畫素為400px

========================*/

@media (min-width: 400px) and (max-width:401px){}

但是也還有些目前還未知的獨立畫素,比如未來的某時刻有大於640px的獨立畫素,或者是說我們手機移到豎屏時候,我們也可以針對適應的做一點匹配。如下我們針對640px-999px做一個匹配。

/* min-width:640px

* 針對裝置獨立畫素為640px 的css

* min-width:640 和 max-width:999之間

============================*/

@media (min-width: 640px) and (max-width:999px){}

但是在PC端,我們為了適應PC端,所以針對寬度為1000以上也做一個顯示處理。

/* 最小寬度1000樣式

*為了適應PC端 所以PC端在設計時候 預設以1000px來設計的

=======================*/

@media screen and (min-width:1000px) {}

我們都知道在IE6-8下 IE是不支援css3中的媒體查詢的,所以在網上有大牛已經幫我們考慮到這個問題了,所以只需要在網上下載 respond.js下來放到我們本地,然後頁面上引入即可。respond.js的github地址如下:

通過以上:我們可以對編寫css響應性web設計有一個規範,如下:(當然如果大家有更好的方法也可以提出來。)

1. 頭部reset.css 是否要獨立出來一個css檔案,或者不獨立出來 直接放在css頂部。

2. 公用的頭部或者尾部樣式 直接放在css檔案頂部,及公用的頁面css樣式放在頂部(添加註釋。)

3. 媒體查詢css樣式分別如下組織:

1. 移動端開發css媒體查詢 程式碼組織如下:

/* min-width:320px

* 針對獨立畫素為320px 的css

=======================================================================================================*/

@media (min-width: 320px) and (max-width:639px){

/* css style*/

}

/* 針對獨立畫素的寬度是360 384等

* max-width:384來計算 但是邊距 字型大小等還是安裝360px來計算

*****************************************/

@media (min-width:360px) and (max-width: 399px) {

/* css style*/

}

/* 針對獨立畫素為400px

=======================================================================================================*/

@media (min-width: 400px){

/* css style*/

}

/* 針對獨立畫素大於640以上的 小於999的

=======================================================================================================*/

@media (min-width: 640px) and (max-width:999){

/* css style*/

}

2. 在PC端 1000以上的媒體查詢寫在如下里面:

@media screen and (min-width:1000px) {

/* css style*/

}

4. 基本的編碼規範注意事項如下:

1.給html根元素字型大小定義相對單位(rem)如下:

html {font-size: 62.5%;/*10 ÷ 16 × 100% = 62.5%*/}

之後的元素字型使用rem作為單位。比如h2字型大小是24px,那麼在移動端 字型大小設定為 font-size:2.4rem 在媒體查詢@media (min-width:1000) {}內 字型大小希望可以寫2個,font-size:24px;font-size:2.4rem,這是為了未來的移動裝置獨立畫素超過1000後能使用rem作單位。

2.根據設計稿給body元素設定預設的font-size及color,之後的媒體查詢根據自身的條件需要覆蓋font-size及color的話 就覆蓋掉。

3.在對應的裝置媒體查詢內,有很多公用的css樣式希望合併,比如這樣的:

.six-qa li .q{line-height:26px;font-size:1.6rem;}

.six-qa li .a{line-height:26px;font-size:1.6rem;}

可以直接合併成如下:

.six-qa li .q,.six-qa li .a{line-height:26px;font-size:1.6rem;}

編寫響應性web設計css媒體查詢更好的方案思考?

我們都知道,為了自適應各種裝置,我們需要編寫不同的css進行適配,比如寬度,外邊距,內邊距,字型大小等不同,需要不同的適配,那麼我們現在能不能編寫一份css呢,比如我編寫一份針對:獨立畫素為400螢幕寬度的 編寫一份css樣式,然後其他的樣式,比如320的,384的,360的或者640以上的,針對這些css樣式,我們能不能使用NodeJS來自動讀取400的css,然後分別對上面獨立畫素大小的螢幕進行比例一下,比如螢幕400畫素的 font-size:24px 那麼 320px的螢幕字型大小就是 font-size = Math.floor(320*24/400),其他css屬性都按照這種方式來做,那麼在本地就可以生成不同的版本css了(比如針對320版本的,針對640以上css版本的),然後在head頭部分別引入不同的css版本,比如如下引入:

<link rel="stylesheet" href="320.css" media="all and (min-width:320px) and (max-width:321px)"/>

<link rel="stylesheet" href="360.css" media="all and (min-width:360px) and (max-width:399px)"/>

<link rel="stylesheet" href="400.css" media="all and (min-width:400px) and (max-width:401px)"/>

<link rel="stylesheet" href="640.css" media="all and (min-width:640px) and (max-width:999px)"/>

<link rel="stylesheet" href="1000.css" media="all and (min-width:1000px)"/>

我們知道,只要裝置的寬度在以上任何一種的時候 只會渲染一份css,其他的css不渲染,所以我們可以按照這種方式來做一份css。至於這種方案我以後會使用nodeJS來做出來的。

相關推薦

25手把手響應佈局

一:佈局方式有如下幾種: 1. 固定佈局:固定佈局以PX(畫素)作為單位的,在PC端,設計稿多少PX就寫多少PX,前幾年都是這種佈局,常見的是以960px或者1000px來設計的,但是這樣設計有如下缺點: 1.1.頁面很死板,在更大的螢幕上,頁面左右2邊留白。 1.2.不適

爬蟲手把手寫網路爬蟲1

介紹 什麼是爬蟲? 先看看百度百科的定義: 簡單的說網路爬蟲(Web crawler)也叫做網路鏟(Web scraper)、網路蜘蛛(Web spider),其行為一般是先“爬”到對應的網頁上,再把需要的資訊“鏟”下來。 為什麼學習爬蟲? 看到這裡,有人就要問了:Google、百度等

手把手樹莓派3 裝機

概述 raspberry pi其實可以看做一個微型的計算機,我們可以在上面裝各種作業系統,然後搭建伺服器,當然這只是它的一小點功能罷了。。。與我們常用的PC機不同的是,ras pi有GPIO,我們可以讓raspberry pi來控制這些引腳,從而傳送一些物理訊號給其他的裝置

手把手安卓入門

部落格 學院 下載 GitChat 論壇 寫部落格 發Chat

Android開發之手把手寫ButterKnife框架

系列文章目錄導讀: 一、概述 JakeWharton我想在Android界無人不知,無人不曉的吧, ButterKnife這個框架就是出自他隻手。這個框架我相信很多人都用過,本系列部落格就是帶大家更加深入的認識這個框架,ButterKnife截至目前

手把手實現SVM演算法

什麼是機器學習 (Machine Learning)       機器學習是研究計算機怎樣模擬或實現人類的學習行為,以獲取新的知識或技能,重新組織已有的知識結構使之不斷改善自身的效能。它是人工智慧的核心,是使計算機具有智慧的根本途徑,其應用遍及人工智慧的各個領域。 機器學習

Redis手把手Windows中redis的下載,安裝,設定及啟動

文章目錄 1、系統環境 2、Redis下載 3、Redis在Windows中安裝 4、Redis啟動 5、環境變數設定

PyCharm手把手在Windows上安裝PyCharm--詳細介紹多圖,手機流量慎入

0 系統環境 Windows 10 PyCharm 2018.2.4 1 下載軟體 Q: 如何看待某些人下載軟體喜歡到官網的偏好? A:同學,你沒有中國百度全家桶吧? ----摘自 知乎 官網下載軟體,請按圖索驥。 1.1 搜尋官網 1.2 準備下載

專欄 - 手把手如何用nginx開發自己的伺服器

手把手教你如何用nginx開發自己的伺服器 博主希望能夠通過自己的nginx學習經驗,給希望學習nginx的同學一些參考的經驗,這個專欄的目的是教會完全不懂nginx的同學如何利用nginx去開發自己的web伺服器或者代理伺服器

圖文教程手把手如何安裝ubuntuWindows基礎上雙系統

  準備工作:  1.一個格式化後 U盤  2.從官網下載下來ubuntu14.04.1的映象檔案  3.UltraISO最新版本  4.如果想要雙系統。準備一個安裝ubuntu的空盤。大小自己定吧,按自己的需求來。我一般分50G就夠了。安裝過程:開啟後最開始是這樣的然後選擇

手把手實現自定義的應用層協議

原文: https://my.oschina.net/u/2245781/blog/1622414   報錯了, 在Linux系統中,/usr/include/ 是C/C++等的標頭檔案放置處,     -----------------------

專欄 - 手把手從零實現Linux裝置驅動程式(基於友善之臂4412開發板)

手把手教你從零實現Linux裝置驅動程式(基於友善之臂4412開發板) ARM-tiny4412這款CPU是基於ARMv7架構的晶片,目前在網上開發現成資源較少,為了彌補這一缺陷,本人決定將我所學所用的這塊晶片的開發技巧和方法共享

震驚手把手用python做繪圖工具

在這篇部落格裡將為你介紹如何通過numpy和cv2進行結和去建立畫布,包括空白畫布、白色畫布和彩色畫布。建立畫布是製作繪圖工具的前提,有了畫布我們就可以在畫布上盡情的揮灑自己的藝術細胞。 還在為如何去繪圖煩惱的小夥伴趕緊看過來,這裡手把手教你解決問題~~~~ 當然還是講究一下規則:先點贊再看,尊重一下作者

響應框架

在真正開始編寫自己的響應式框架之前,我們先來從觀察者模式說起。已經對觀察者模式很熟悉的可以直接掠過。 基本概念 觀察者模式屬於物件行為模式之一,也可叫做釋出——訂閱模式。它定義了一種以對多的依賴關係,讓多個觀察者(訂閱者)同時觀察(監聽)一個被觀察者(主

手把手寫網路爬蟲2:迷你爬蟲架構

語言&環境 有需要Python學習資料的小夥伴嗎?小編整理【一套Python資料、原始碼和PDF】,感興趣者可以加學習群:548377875或者加小編微信:【mmp9972】反正閒著也是閒著呢,不如學點東西啦~~ 語言:帶足彈藥,繼續用Python開路! t

手把手寫網路爬蟲8:徹底解決亂碼問題

字元編解碼是爬蟲裡必學的一項知識,在我們的爬蟲生涯中早晚會爬到亂碼的網頁,與其遇到時驚慌失措,不如早學早好,徹底避免亂碼問題。 字元編碼簡介 什麼是字符集 在介紹字元編碼之前,我們先了解下什麼是字符集。 字元(Character)是各種文字和符號的總稱,包括各國家文字、標點

手把手寫指令碼引擎——簡單的高階語言3,符號表

手把手教你寫指令碼引擎(五)——簡單的高階語言(3,符號表) 陳梓瀚 華南理工大學軟體本科05級 符號表的結構的複雜度跟語言的語義規則的複雜度有關。對於C#來說,每一個符號都附帶了一大堆資訊,譬如位置啦,所在的namespace啦,型別啦什麼的。對於JavaScript來說,

手把手智慧硬體開發 開關按鈕

第5節 按鈕開關 對於硬體的控制,我們常用硬體開關來控制Arduino開發板上其他外接硬體的通斷邏輯。比如,一盞LED燈,硬體上最好有個開關,按一下開關,就讓LED燈亮,再按一下開關,就讓LED燈關閉。 開關的外形有多種式樣,四根引腳、三根引腳。不論是三引腳

手把手智慧硬體開發 藍芽傳輸

第4節 藍芽傳輸 智慧硬體基本上都需要和手機相連,然後讓手機控制這些硬體的工作。相連的方式不外乎以下三種, 資料線有線連線,通過一根資料線把智慧硬體和手機連線起來。採用這種方式,需要一個特殊的帶USB HOST功能的擴充套件板; WIFI連線,智慧硬體和手

手把手寫網路爬蟲5:PhantomJS實戰

有需要Python學習資料的小夥伴嗎?小編整理【一套Python資料、原始碼和PDF】,感興趣者可以加學習群:548377875或者加小編微信:【mmp9972】反正閒著也是閒著呢,不如學點東西啦~~ 如果想看到更多專案,並不能像網易雲音樂那樣點“下一頁”翻頁,而是