Part 1 · HTML5-04-移動端網(wǎng)頁開發(fā)
時間:2023-09-27 19:18:01 | 來源:網(wǎng)站運營
時間:2023-09-27 19:18:01 來源:網(wǎng)站運營
Part 1 · HTML5-04-移動端網(wǎng)頁開發(fā):
Part 1 · HTML5 網(wǎng)頁開發(fā)-04
第四章、移動端網(wǎng)頁應用開發(fā)及項目
第一節(jié)、移動端開發(fā)基礎(chǔ)
1、移動web開發(fā)基礎(chǔ)
- 常見的PC端瀏覽器(谷歌、360、火狐、搜狗、IE瀏覽器、百度等)
注意 :當用H5或CSS3的時候,基本不考慮低版本瀏覽器的兼容性問題了 - 常見的移動端瀏覽器(UC瀏覽器、QQ瀏覽器、百度手機瀏覽器、搜狗手機瀏覽器等
注意 : 國內(nèi)的UC和QQ、百度等手機瀏覽器都是根據(jù)Webkit修改過來的內(nèi)核,國內(nèi)還沒有自主研發(fā)的內(nèi)核
(移動端訪問網(wǎng)址,網(wǎng)址前加個m,比如:m.jd.com 、m.taobao.com)
總結(jié):兼容移動端主流瀏覽器,處理Webkit內(nèi)核瀏覽器就可以了 - 常見的移動端屏幕尺寸 , 可以參考 :
移動端調(diào)試方法:- 谷歌瀏覽器的模擬手機調(diào)試
- 搭建本地web服務器,手機和服務器在一個局域網(wǎng)捏,通過手機訪問服務器
- 使用外網(wǎng)服務器,直接IP或域名訪問
移動端瀏覽器主要對webkit內(nèi)核進行兼容
(移動端碎片化比較嚴重,分辨率和屏幕尺寸大小不一,開發(fā)只需要在意開發(fā)尺寸就好)
2、視口
- 視口(viewport)就是瀏覽器顯示頁面內(nèi)容的屏幕區(qū)域
- 布局視口(layput viewport)
- 視覺視口(visual viewport)
- 理想視口(ideal viewport)對于設(shè)備來說,是最理想的視口尺寸,需要手動添加
<meta>
標簽
<meta>
視口標簽的主要目的:布局視口寬度應該與理想視口寬度一致,設(shè)備有多寬,布局視口就有多寬
<meta>
標簽屬性 | 解釋 |
---|
width | 寬度設(shè)置的是viewport的寬度,可以設(shè)置device-width特殊值 |
initial-scale | 初始縮放比,大于0的數(shù)字 |
maximum-scale | 最大縮放比,大于0的數(shù)字 |
minimum-scale | 最小縮放比,大于0 的數(shù)字 |
user-scalable | 用戶是否可以縮放(yes或no,0或1) |
寫法:<meta name="viewport" content="width=device-width,user-scalable=no,initial-scale=0,minimun-scale=1.0,maximun-scale=1.0">
標準的viewport參數(shù)設(shè)置- 視口寬度和設(shè)備保持一致
- 不允許用戶自行縮放
- 視口的默認最小縮放比例為1.0
- 最大允許的縮放比例1.0
3、物理像素和物理像素比
- 物理像素點是指屏幕顯示的最小顆粒,是物理真實存在的,是廠商在出廠的時候就設(shè)置好了的
- 物理像素比:一個px能顯示的物理像素點個數(shù)
4、二倍圖
- 在標準的viewport設(shè)置中,一般會使用倍圖來提高圖片質(zhì)量,解決在高清設(shè)備中的模糊問題,(通常使用二倍圖)
5、移動端開發(fā)的選項
- 常見的移動端開發(fā):單獨制作移動端頁面、響應式兼容PC頁面移動端
- 市場主流的選擇(單獨制作移動頁面)
6、移動常見的問題解決方案
- webkit 兼容
- CSS初始化 normalize.css
- 官網(wǎng)地址:
box-sizing:border-box;-webkit-box-sizing:border-box;
特殊樣式(需要在初始化頁面的時候加進去)- 點擊高亮我們需要清除
*{ -webkit-tap-highlight-color: transparent; }
- 移動端瀏覽器默認的外觀在IOS上加上這個屬性才能給按鈕和輸入框自定義樣式
input{ -webkit-appearance: none; }
- 禁用長按頁面時的彈出菜單
img,a { -webkit-touch-callout: none; }
7、移動端技術(shù)選型
一、單獨制作移動端頁面(主流)
- 流式布局(百分比布局)流式布局只適合水平方向的布局,垂直方向需要用rem
- flex彈性布局(強烈推薦)
- less+rem+媒體查詢布局
- 混合布局(流式、less、rem、媒體查詢)
二、單獨制作移動端頁面(其次)
第二節(jié)、流式布局
1、流式布局原理
- 流式布局,就是百分比布局,也稱非固定像素布局
通過把盒子的寬度設(shè)置成百分比,從而根據(jù)屏幕寬度來進行伸縮,不受不定像素的限制
流式布局是移動web項目比較常用的方式
注意:
制作過程中,需要定義頁面的最大和最小支持的寬度 - max-width 最大寬度(max-height最大高度)
- min-width 最小寬度(min-height最小高度)
2、移動項目初始化準備內(nèi)容
- 首先 添加 normalize.css
- 其次 添加 index.css
index.css 里面添加特殊樣式部分的內(nèi)容,不用死記硬背,理解原理,復制粘貼/*點擊高亮我們需要清除清除 設(shè)置為transparent 完成透明*/*{ -webkit-tap-highlight-color: transparent; } /*在移動端瀏覽器默認的外觀在iOS上加上這個屬性才能給按鈕和輸入框自定義樣式*/ input{ -webkit-appearance: none; } /*禁用長按頁面時的彈出菜單*/ img,a { -webkit-touch-callout: none; }
新增屬性:設(shè)置垂直對齊
vertical-align: middle; 設(shè)置圖片水平居中
7、二倍精靈圖做法
- 在firework里面把精靈圖等比例縮放為原來的一半
- 然后根據(jù)新的大小測量坐標
- 然后代碼里面的background-size設(shè)置為精靈圖原來寬度的一半
9、線形漸變背景
- MDN文檔里面搜索 background-image
MDN文檔官網(wǎng) :
例:
background-image: linear-gradient(0deg,#f1503b,#c82519 50%);
10、滑動輪播圖布局
圖片格式- dpg圖片壓縮技術(shù)
(京東自主研發(fā)推出的dpg圖片壓縮技術(shù),可以節(jié)省用戶近50%的瀏覽量,能兼容jpeg) - webp圖片壓格式
(谷歌研發(fā)的圖片格式,壓縮體積只有jpeg的2/3)
第三節(jié)、flex布局
1-2、布局體驗布局原理
- 兼容性好
- 布局繁瑣
- 局限性,不能在移動端很好的布局
- 操作方便,布局非常簡單,移動端應用廣發(fā)
- PC端瀏覽器支持情況差
- IE11或更低版本,不支持或者只有部分支持
建議- 如果是PC端頁面布局,還是使用傳統(tǒng)布局
- 如果是移動端或者不考慮兼容性問題的PC端頁面布局,還是使用flex彈性布局
flex布局原理- flex(flexible Box),意為彈性布局
- 當為父盒子設(shè)置為flex布局以后,子元素的float、clear、vertical-align(垂直對齊)屬性將失效
- 伸縮布局=彈性布局=伸縮盒布局=彈性盒布局=flex布局
- 采用flex布局的元素,稱為flex容器,簡稱“容器”,它的所有子元素自動成為容器成員,成為flex項目,簡稱“項目”
flex屬性值:display:flex;
例如:
div { display: flex; width: 400px; height: 100px; background-color: pink; justify-content: space-around; 設(shè)置主軸方向上子元素的排列方式 } span { width: 100px; height: 50px; background-color: burlywood; margin-right:10px ; flex: 1; 設(shè)置flex子項目占的份數(shù) } <div> <span>1</span> <span>2</span> <span>3</span> </div>
3、 flex-direction 屬性
- flex-direction 用來設(shè)置主軸方向的
注意:主軸和側(cè)軸類似于X軸和Y軸,但是主軸側(cè)軸是可以變化的,側(cè)軸隨主軸的設(shè)定而變化,如果設(shè)置橫向為主軸,那么縱向就為側(cè)軸,如果設(shè)置縱向為主軸,那么橫向就為側(cè)軸
屬性值 | 解釋說明 |
---|
row | 主軸默認值從左到右 |
row-reverse | 主軸從右到左 |
column | 主軸從上到下 |
column-reverse | 主軸從下到上 |
4、 justify-content 屬性
- justify-content 用來設(shè)置主軸方向上子元素的排列方式
注意:使用這個屬性之前,一定要確定好主軸是哪個
屬性值 | 解釋說明 |
---|
flex-start | 默認值,如果主軸是X軸,則從左到右 |
felx-end | 從尾部開始排列 |
center | 在主軸居中對齊 |
space-around | 平分主軸剩余的空間 |
space-between | 先兩邊貼邊,剩下的項目,平分主軸中間剩余的部分(重要) |
5、 flex-wrap 屬性
- flex-wrap 用來設(shè)置子元素是否換行
屬性值 | 解釋說明 |
---|
nowrap | 默認值,不換行 |
wrap | 換行 |
6、 align-items 屬性
- align-items 用來設(shè)置側(cè)軸上子元素的排列方式(單行)
該屬性是控制子項在側(cè)軸上的排列方式
在子項為單項的時候使用
屬性值 | 解釋說明 |
---|
flex-start | 默認值,從上到下 |
flex-end | 從下到上 |
center | 擠在一起居中 |
stretch | 拉伸 |
7、 align-content 屬性
align-content 用來設(shè)置側(cè)軸上子元素的排列方式(多行的時候有效)
注意:只能用于子項出現(xiàn)換行的情況下,單行是沒有效果的
屬性值 | 解釋說明 |
---|
flex-start | 在側(cè)軸頭部開始排列 |
flex-end | 在側(cè)軸尾部開始排列 |
center | 在側(cè)軸中間顯示 |
space-around | 子項在側(cè)軸平分剩余的空間 |
space-between | 子項在側(cè)軸兩邊貼邊,剩余子項再平分剩余空間 |
stretch | 設(shè)置子項元素高度平分父元素高度 |
8、 flex-flow 復合屬性
- flex-flow 是復合屬性,用來綜合書寫主軸方向flex-direction和是否換行flex-wrap
例如:
flex-flow:row nowrap;
9-10、flex布局子項常見屬性
- flex子項目占的份數(shù)
- align-self控制子項自己在 側(cè)軸的排列方式
- order屬性定義子項的排列順序(前后順序)
- flex屬性
flex屬性定義子項目分配父盒子的剩余空間,用flex來表示占有多少份
屬性值為數(shù)字,數(shù)字為1時,表示占總份數(shù)中的1份,默認值是0
例:
.item{ flex:2; (表示該子項目占有總份數(shù)中的2份)}
- align-self屬性
align-self屬性定義自己的排列對齊方式,針對個體設(shè)置排列方式,層疊前面設(shè)置的樣式 - order屬性
order屬性用來設(shè)置子項的排列先后順序,數(shù)字越小,越靠前排列,默認值是0
注意:和z-index不一樣,概念不同,不要混淆
例如:
.item{ order:1; 設(shè)置order為1的子項,排列順序在默認值0的子項的后面}
第四節(jié)、less+rem布局
1-2、rem理解
- 流式布局和flex布局只能對寬度進行等比例放大縮小,rem不僅能針對寬度,還能針對高度
- rem單位
rem(root em)是一個相對單位,類似于em ,em是參考父元素字體大小,rem是參考根標簽html字號的大小
rem優(yōu)勢 (參考元素是html,一個頁面只有一個html元素,所以可以實現(xiàn)整體控制)
3、媒體查詢書寫語法
- 媒體查詢書寫語法
媒體查詢(Media Query)是CSS3的新語法
@media 可以針對不同的媒體類型和不同的屏幕尺寸定義不同樣式
書寫規(guī)范:
- 用@media開頭,需要加@符號
- mediatype媒體類型,mediatype的值(all用于所以設(shè)備、print用于打印機、screen用于電腦屏幕、平板電腦、智能手機等)
- 關(guān)鍵字:and、not、only、or
- media feature 媒體特性,必須有小括號包含,media feature 媒體類型的值,暫時了解三個(width、min-width、max-width)
例如:
@media mediatype and | not | only (media feature) {CSS-code;}
在屏幕設(shè)備中,當屏幕大于或者等于800px的時候,背景色為粉色
@media screen an (min-width:80px) { bady{ background-color:pink; }}
4、媒體查詢案例-背景變色
案例思路: 按照從小到大或者從大到小的思路
注意:為了防止混亂,習慣性按照從小到大來寫,這樣代碼也更簡潔
5、媒體查詢+rem實現(xiàn)元素動態(tài)大小變化
定義html內(nèi)元素的根大小,用媒體查詢,定義寬度來縮放rem單位的元素值
6、媒體查詢引入資源的方法
當設(shè)置的樣式比較繁多的時候,可以直接在link里面判斷媒體類型和媒體特性,然后引入CSS文件
例如:
<link rel="stylesheet" media="screen and (min-width:400px)" href="index.css">
7-8、CSS的弊端和解決方法
- css是非程序式的語言,沒有變量、函數(shù)等概念,沒有計算能力,書寫過程中冗余度比較高,不利于維護
為了解決這個問題,引入了less(Leaner Style Sheets)語言- less是一門css的擴展語言,也是css的預處理器
- 在css的語法基礎(chǔ)上,引入了變量,運算以及函數(shù)等功能,簡化了css的編寫,降低css的維護成本
總結(jié):less是一門css的預處理器,擴展了css的動態(tài)功能,可以用更少的代碼做更多的事情
常見的css預處理器:Sass、Less、Stylus
9-12、less的使用
- less 變量
- less 編譯
- less 嵌套
- less 運算
- less變量(變量是指沒有固定的值,可以動態(tài)改變的
寫法:
@變量名:賦值;
變量命名規(guī)范:
- 必須加@前綴
- 不能包含特殊字符
- 不能以數(shù)字開頭
- 大小寫敏感
例如:@color:pink;
變量使用規(guī)范:
直接使用,例:
body{ color:@color;}
2. less 編譯
方法一:用node.js里面的less,使用cmd命令行,把.less文件轉(zhuǎn)換成.css文件,再引用
方法二:vscode里面的easy less插件,寫.less文件,保存后,自動生成.css文件,引用
3. less 編譯嵌套
大結(jié)構(gòu)里面嵌套小結(jié)構(gòu)的寫法,更清晰更美觀
例:
.header{ width:100px; height:100px; .logo{ width:10px; height:10px; }}
注意:如果遇見 交集、偽類、偽元素選擇器
- 當內(nèi)層選擇器前面沒有&符號的時候,被解析為父選擇器的后代
- 當有&符號的時候,就被解析為父元素自身或者父元素的偽類
4. less 運算
- 任何數(shù)字,任何顏色變量都可以參與運算,(+)(-)(*)(/)
注意: - 參與運算的兩個數(shù)字,可以一個有單位,一個沒有單位,最終計算結(jié)果的單位就是參與運算數(shù)字里面唯一的那個單位
- 參與運算的兩個數(shù)字,兩個都有單位,并且單位不同,最終單位取第一個數(shù)字的單位
- less運算符的左右必須加空格(更美觀,計算準確),如果沒有空格,會計算錯誤,例如: 1px + 5em
13-14、適配原理+適配方案
原理:
- 讓一些不能等比自適應的元素,達到設(shè)備尺寸發(fā)生改變的時候,等比例適配當前設(shè)備
- 使用媒體查詢,根據(jù)不同設(shè)備按比例設(shè)置html的字體大小,然后頁面元素使用rem做尺寸單位,當html字體大小發(fā)生變化的時候,尺寸也變化,進而達到等比例縮放的適配
rem實際開發(fā)適配方案
- 按照設(shè)計稿與設(shè)備寬度比例,動態(tài)計算并設(shè)置html根標簽的font-size大?。襟w查詢)
- css中,設(shè)計稿元素的寬,高,相對位置等取值,按照同比例換算為rem為單位的值
- rem適配方案技術(shù)使用(市場主流)
方案1:less+媒體查詢+rem
方案2:flexible.js (更簡單)
15、蘇寧項目
- 項目技術(shù)選型
方案:采用單獨制作移動頁面的方案
技術(shù):布局采用rem適配布局(less+rem+媒體布局)
設(shè)計圖:采用750px設(shè)計尺寸
16、用@import導入less文件
- index.less文件里面引入其他的.less文件:
- 新建index.html
- 將其他.less文件引入到index.less里面
語法:
例如將common.less文件導入到index.less文件: @import "common"
24、適配方案2:flexble.js
<script src="js/flexible.js"></script>
小技巧 :如果不用less計算rem,可以用插件直接轉(zhuǎn)換:
Vscode 將px轉(zhuǎn)換成rem,安裝ceerem插件即可
第五節(jié) 響應式布局
1、響應式頁面兼容移動端
- 媒體查詢
- bootstrap
響應式開發(fā)原理:使用媒體查詢針對不同寬度的設(shè)備進行布局和樣式的設(shè)置,從而適配不同設(shè)備的目的
2-3、響應式布局容器
- 響應式需要一個父級作為布局容器,來配合子級元素實現(xiàn)變化效果
- 原理就是在不同的屏幕下,通過媒體查詢來改變這個布局容器的大小,再改變里面子元素的排列方式和大小,實現(xiàn)不同屏幕下,看到不同的頁面布局和樣式變化
平時響應式尺寸的劃分
- 超小屏幕(手機,小于768px):容器寬度設(shè)置為100%
- 小屏幕(平板,大雨等于768px):容器寬度設(shè)置為750px
- 中等屏幕(桌面顯示器,大于等于992px):容器寬度設(shè)置為970px
- 大屏幕(大桌面顯示器,大于等于1200px):容器寬度設(shè)置為1170px
(也可以根據(jù)實際情況自己定義劃分)
5、bootstrap
- bootstrap簡介:來自(Twitter),是目前最受歡迎的前端框架,bootstrap 是基于HTML、CSS和JavaScript的,使web開發(fā)更簡潔
中文官網(wǎng):官網(wǎng):bootstrap優(yōu)點:- 標準化的html+css編碼規(guī)范
- 提供了一套簡潔直觀強悍的組件
- 有自己的生態(tài)圈,開源框架,不斷更新迭代
- 讓開發(fā)更簡單,提高了效率
6、bootstrap使用方法
注意:控制權(quán)在框架本身,使用者需要按照框架規(guī)定的某種規(guī)范使用它的樣式庫
bootstrap使用使用四部曲:
- 創(chuàng)建文件夾結(jié)構(gòu)
- 創(chuàng)建html骨架結(jié)構(gòu)
- 引入相關(guān)樣式文件
- 書寫內(nèi)容
書寫內(nèi)容:
- 直接拿bootstrap預先定義好的樣式來使用
- 修改bootstrap原來的樣式,注意權(quán)重問題
- 明白它定義了哪些樣式和這些樣式能實現(xiàn)什么樣的效果
7、bootstrap布局容器
bootstrap需要為頁面內(nèi)容和柵格系統(tǒng)包裹一個.container容器,它提供了兩個作此用的類
1.container類
- 響應式布局的容器,固定寬度
- 超小屏幕(手機,小于768px):容器寬度設(shè)置為100%
- 小屏幕(平板,大雨等于768px):容器寬度設(shè)置為750px
- 中等屏幕(桌面顯示器,大于等于992px):容器寬度設(shè)置為970px
- 大屏幕(大桌面顯示器,大于等于1200px):容器寬度設(shè)置為1170px
2.container-fluid類
- 流式布局容器,百分比寬度
- 占據(jù)全部視口(viewport)的寬度
- 適合于制作移動端頁面開發(fā)
例如:
<div class="container">111</div> <div class="container-fluid">222</div>
8、bootstrap柵格系統(tǒng)
- 柵格系統(tǒng)(grid systems),也稱網(wǎng)格系統(tǒng),它是指將頁面布局劃分為等寬的列,然后通過列數(shù)的定義來模塊化頁面布局
- bootstrap提供了一套響應式,移動設(shè)備優(yōu)先的流式柵格系統(tǒng),隨著屏幕或視口(viewport)尺寸的增加,系統(tǒng)會自動分為最多12列
bootstrap柵格系統(tǒng)也能實現(xiàn)響應式效果
移動設(shè)備優(yōu)先使用
9、bootstrap柵格系統(tǒng)使用方法
柵格選項參數(shù)
柵格系統(tǒng)用于通過一系列的行(row)和列(column)的組合來創(chuàng)建頁面布局,內(nèi)容直接放進這些創(chuàng)建好的布局中
| 超小屏幕(手機)<768px | 小屏設(shè)備(平板)>=750px | 中等屏幕>=992px | 寬屏設(shè)備>=1200px |
---|
.container最大寬度 | 自動100% | 750px | 970px | 1170px |
類前綴 | .col-xs- | .col-sm- | .col-md- | .col-lg- |
列(column)數(shù) | 12 | 12 | 12 | 12 |
- 按照不同的屏幕劃分為1-12等份
- xs-extra small 超小
- sm-small 小
- md-medium中等
- lg-large大
- 列如果總數(shù)大于12,多余的列所在的元素將被作為一個整體另起一行排列
- 可以同時為一列指定多個設(shè)備的類名,以便劃分不同的分數(shù),例如class="col-md-4 col-sm-6"
10、列嵌套
- 一行一列里面的子元素可以再嵌套一個row,分成12列
只要有元素的地方,有父子關(guān)系的,都可以在父級設(shè)置一個row,添加柵格
例如:
<div class="col-4 row"> <p class="col-lg-6"> 1 </p> <p class="col-lg-6"> 2 </p> </div>
11、列偏移
使用.col-md-offset- * 類可以將列向右側(cè)偏移,這些類實際是通過使用*選擇器為當前元素增加了左側(cè)的邊距(margin)
例如:row里面的右側(cè)元素 向右偏移4個柵格
<div class="row"> <div class="col-lg-4 ">左側(cè)</div> <div class="col-lg-4 col-lg-offset-4">右側(cè)</div></div>
12、列排序
- .col-md-push- *往右推
- .col-md-pull- *往左拉
通過這兩個類可以改變列(column)的順序
12、bootstrap響應式工具
為了加快對移動設(shè)備友好的頁面開發(fā),利用媒體查詢功能,并且使用這些工具類可以方便針對不同設(shè)備展示或者隱藏頁面內(nèi)容
類名 | 超小屏 | 小屏 | 中屏 | 大屏 |
---|
.hidden-xs | 隱藏 | 可見 | 可見 | 可見 |
.hidden-sm | 可見 | 隱藏 | 可見 | 可見 |
.hidden-md | 可見 | 可見 | 隱藏 | 可見 |
.hidden-lg | 可見 | 可見 | 可見 | 隱藏 |
與之相反的,visible-xs、visible-sm、visible-md、visible-lg 是針對不同設(shè)備顯示某個內(nèi)容
bootstrap其他,參考bootstrap文檔