前端知道分享,移動端布局

一、下面我將簡單的介紹移動端布

局的八種方式:

1.固定布局

2.流動布局

3.浮動布局

4.定位布局

5.混合布局

6.flex布局

7.rem布局

8.響應式布局

9.**圣杯布局10.**雙飛翼布局

1.固定布局方法里把加好,然后根據設計稿設定相應的寬度即可,其他地方類似于pc端。優點思路沿用pc端,上手比較快缺點

大屏手機顯示網頁比較寬,而固定布局寬度參照永遠是固定的寬度(設計稿的大小),導致左右兩邊會有空白。手機橫屏的時候兩邊空白更亮。

2.流動布局

方法

適用百分比(%)做單位。

優點能更很好的適應各個屏幕分辨率的手機。缺點

不夠靈活,添加元素時,需要更改其他元素的值。

3.浮動布局方法

float+clearfix(清除浮動)

/--不需兼容老版本--/

.clearfix:after{

content:"";

display:block;

clear:both;

}

--需要兼容老版本--/

clearfix:after{

content:"";

display:block;

clear:both;

height:0;

visibility:hidden;

}

**優點**? ? ? ? 這是傳統的浮動方式,寫法簡單,實現效果起來干脆利落? ? **缺點**對浮動元素要求比較嚴格,布局也不太靈活

4.定位布局方法在布局當中很常用,利用position+四個方位的具體值(top/left/right/bottom)相互配合,實現起來也比較容易優點

實現簡單,在移動端中,定位很常用,尤其是彈窗,

.mask{

position:fixed;

left:50%;

top:50%;

-webkit-transform:translate3d(-50%,-50%,0);

transform:translate3d(-50%,-50%,0);

}

缺點

移動端中頻繁的使用定位,會出現一些莫名的bug;

fixed+input在ios上存在bug,會出現使用fixed布局的元素亂掉。在android手機上當input框獲取焦點時,換氣鍵盤,會出現定位的元素被抬升至手機鍵盤的上方。(了解)

5.混合布局方法所謂混合布局,就是把所有學到的知識靈活運用在布局中。例如:rem+百分比(流動布局) flex+rem等優點布局靈活,集合其他布局的優勢達到自己的布局要求缺點

代碼有點累贅;代碼不統一,維護困難

6.flex布局(重點)

方法

也叫彈性布局。

/--只需父元素設置--/

{

display:-webkit-box; /android2.1-3.0 ios 3.2-4.3/

display:-moz-box; /firefox/

display:-webkit-flex; /chrome 21+/

display:-ms-flexbox; /wp ie 10/

display:flex; /android 4.4/

}

/--然后子元素設置相應的比例--/

{

-webkit-box-flex:1;

-webkit-flex:1;

-ms-flex:1;

flex:1;

}

這個是最簡單的flex布局了,其實彈性布局里面還有很多簡單高效實用的屬性,很方便移動端的布局。? ? **優點**? ? ? ? 自適應很好,靈活性很強,目前在移動端應用的還是比較廣泛。? ? **缺點**需要寫很多兼容代碼。

7.rem布局方法rem是通過根元素進行適配的,網頁中的根元素指的是html我們通過設置html的font-size大小就可以控制rem的大小。有以下兩種適配方式:

1.rem+@media(通過媒體查詢設置html的font-size值,達到自適應)

html{

-webkit-text-size-adjust:none;

font-size:10px;

}

@media screen and (min-width:321px) and (max-width:375px){

html{

font-size:10px;

}

}

@media screen and (min-width:376px) and (max-width:414px){

html{

font-size:10.25px;

}

}

@media screen and (min-width:415px) and (max-width:454px){

html{

font-size:10.5px;

}

}

@media screen and (min-width:455px) and (max-width:554px){

html{

font-size:10.75px;

}

}

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

html{

font-size:11px;

}

}

2.rem+js(通過js自動獲取設備寬度,計算得到相應設備下html的font-size值達到自適應)(了解)

!function(n) {

var e = n.document,

t = e.documentElement,

i = 720,

d = i / 100,

o = "orientationchange" in n ? "orientationchange": "resize",

a = function() {

var n = t.clientWidth || 320;

n > 720 && (n = 720),

t.style.fontSize = n / d + "px"

};

e.addEventListener && (n.addEventListener(o, a, !1), e.addEventListener("DOMContentLoaded", a, !1))

} (window);

優點在任何設備下都可以達到完全適配,頁面布局樣式完全自適應缺點

rem+@media這種方式不能所有設備全適配

8.響應式布局方法使用@media(媒體查詢)設置頁面在不同的屏幕寬度下達到自適應以及響應式(根據不同屏幕大小,頁面布局,樣式會做出相應的調整)典型案例(bootStrap官網)優點不僅在不同的屏幕下達到自適應,還會在相應的屏幕下對頁面布局,樣式做出相應的調整,達到更加的用戶體驗缺點

兼容各種設備工作量大,效率低下;代碼累贅,會出現隱藏無用的元素,加載時間過長;一定程度上改變了網站原有的布局結構,會出現用戶混淆的情況;增加UI和開發的工作量。

9.圣杯布局

利用float來實現,首先將三列放到一個父元素內后左浮動,之后給左右中分別設置寬度200px,250px,100%。

之后給中間,右邊分別設置margin-left為-200px,-250px。之后再將左右兩列進行相對定位position:relative;并分別設置left:-200px;right:-250px;最后便是等高布局了,給左中右設置padding-bottom:2000px;margin-bottom:-2000px;給其父元素設置overflow:hidden即可。

[圖片上傳中。。。(1)]

10.雙飛翼布局

用float來實現,首先將左中右分別設置寬度為200px,100%,250px。中右分別設置margin-left為-200px和-250px.中間元素下有一個子元素,設置margin-left和margin-right分別為200px余250px。最后便是等高布局了,給左中右設置padding-bottom:2000px;margin-bottom:-2000px;給其父元素設置overflow:hidden即可。

[圖片上傳中。。。(2)]

[圖片上傳中。。。(3)]

二、雜貨

手機端字體標準font-family: Helvetica, "Microsoft Yahei", "Heiti SC", "Droid Sans", "Droidsansfallback", SimSun, sans-serif;

1.觸摸事件touch

touchstart 手指放在屏幕上觸發

touchmove 手指在屏幕上移動,連續觸發

touchend 手指離開屏幕觸發

touchcancel 當系統停止跟蹤時觸發,當一些更高級別的事件發生的時候(如電話接入或者彈出信息)會取消當前的touch操作,即觸發ontouchcancel。一般會在ontouchcancel時暫停游戲、存檔等操作。

注意:

移動端的事件會觸發瀏覽器的默認行為,所以在調用事件的時候要把默認行為阻止了ev.preventDefault。

document.addEventListener('touchstart',function(ev){

ev.preventDefault();

});

var box=document.getElementById("box");

box.addEventListener('touchstart',function(){

this.innerHTML='手指按下了';

});

box.addEventListener('touchmove',function(){

this.innerHTML='手指移動了';

});

box.addEventListener('touchend',function(){

this.innerHTML='手指離開了';

});

2.touch事件對象

ev.touches 當前屏幕的手指列表

ev.targetTouches 當前元素上的手指列表

ev.changedTouches 觸發當前事件的手指列表

每個touch對象都包含了以下幾個屬性(打印ev.touches如下):

[圖片上傳中。。。(4)]

clientX //觸摸目標在視口中的X坐標。 clientY //觸摸目標在視口中的Y坐標。 Identifier //標示觸摸的唯一ID。 pageX //觸摸目標在頁面中的X坐標。 pageY //觸摸目標在頁面中的Y坐標。 screenX//觸摸目標在屏幕中的X坐標。 screenY //觸摸目標在屏幕中的Y坐標。

target // 觸摸的DOM節點目標。

代碼:

var box=document.getElementById("box");

//相當于mousedown

box.addEventListener('touchstart',function(ev){

//console.log(ev.touches);

this.innerHTML=ev.touches.length;//按下手指數

});

3.設備加速度事件devicemotion(了解:知道有這么個東西,面試移動端時項目會問到)

devicemotion 封裝了運動傳感器數據的事件,可以獲取手機運動狀態下的運動加速度等數據。

其中加速度的數據包含以下三個方向:

x:橫向貫穿手機屏幕;

y:縱向貫穿手機屏幕;

z:垂直手機屏幕

[圖片上傳中。。。(5)]

鑒于有些設備沒有排除重力的影響,所以該事件會返回兩個屬性:

1、accelerationIncludingGravity(含重力的加速度)

2、acceleration(排除重力影響的加速度)

注意:這個事件只能放在window身上

demo1:顯示重力加速度的值

代碼:

window.addEventListener('devicemotion',function(ev){

var motion=ev.accelerationIncludingGravity;

box.innerHTML='x:'+motion.x+'
'+'y:'+motion.y+'
'+'z:'+motion.z;

});

demo2:方塊跟著重力左右移動

window.addEventListener('devicemotion',function(ev){

var motion=ev.accelerationIncludingGravity;

var x=parseFloat(getComputedStyle(box).left);//box目前的left值

box.style.left=x+motion.x+'px';

});

demo3:搖一搖應用原理

var box=document.getElementById('box');

var lastRange=0; //上一次搖晃的幅度

var isShake=false; //決定用戶到底有沒有大幅度搖晃

window.addEventListener('devicemotion',function(ev){

var motion=ev.accelerationIncludingGravity;

var x=Math.abs(motion.x);

var y=Math.abs(motion.y);

var z=Math.abs(motion.z);

varrange=x+y+z;//當前搖晃的幅度if(range-lastRange>100){//這個條件成立說明用戶現在已經在大幅度搖晃isShake=true;}if(isShake &&range<50){//這個條件成立,說明用戶搖晃的幅度很小了就要停了box.innerHTML='搖晃了';? ? isShake=false;}

});

4.media

min-width:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 當屏幕大小 大于等于 某個值的時候識別max-width:? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? 當屏幕大小 小于等于 某個值的時候識別? ? ? ? ? ? ? ? ? 關鍵字:and only not@mediaall and (min-width:500px) {? ? ? ? ? ? #box{background-color: green;? ? ? ? ? ? }? ? ? ? }

5.引入方式

1.2.@importurl(01.css) (min-width:400px);3.@media all and (min-width:500px) {? ? ? ? ? ? ? ? #box{background-color:green;? ? ? ? ? ? ? ? }? ? }

6.關于bootstrap

1.柵格化系統 :將一行分為12列

容器:

container

固定寬度

container-fluid? ? 百分比寬度

行:row

列:lg 大屏幕 大桌面顯示器 (≥1200px)

md 中等屏幕 桌面顯示器 (≥992px)

sm 小屏幕 平板 (≥768px)

xs 超小屏幕 手機 (<768px)


body{

margin: 0;

}

div{

height: 100px;

background-color: #f00;

font-size: 50px;

color: #fff;

}

.row div{

height: 100px;

background-color: yellow;

border: 1px solid #000;

}

2.col-md-offset-設置列偏移

1

2

3..col-md-push-(往后) 和 .col-md-pull-*(往前) 列排序4. hidden-xs 超小屏幕消失

visible-xs 超小屏幕顯示

7.移動端適配

1.百分比適配

弊端:height無法設置

2.viewport 適配

原理:就是用js把所有設備的viewport設置成一樣的

3.rem適配

1rem=根節點的字體大小

動態設置根節點的字體大小

8.了解(meta)

頁面描述

頁面關鍵詞

為移動設備添加 viewport

百度禁止轉碼

禁止數字自動識別為電話號碼


禁止自動自動識別地址


禁止自動自動識別日期


關閉電話號碼的自動識別:

開啟電話功能

123456

開啟短信功能:

123456

禁止自動自動識別 Email


郵箱的自動識別:

同樣地,我們也可以通過標簽屬性來開啟長按郵箱地址彈出郵件發送的功能:

dooyoe@gmail.com

還有一種情況,在IE8下只有不使用兼容模式頁面才能顯示正常,但是如果設定為IE8的模式,在IE9中卻會導致CSS3失效。看來,需要針對 IE8、IE9 分別 禁用兼容模式。怎么辦呢?可以在后臺判斷瀏覽器版本,如果是 IE8就輸出content="IE=8",如果是IE9就輸出 content="IE=9"。其實還可以單純通過HTML來實現的,HTML代碼如下:

9.彈性盒子

1. box-sizing:border-box/ (沒有繼承) 給自己加

效果,壓邊框到盒子里

padding-box/content-box 沒用

chrome51:padding-box不好使

FF47: padding-box好使

盒模型:width+padding+border

border-box: width代碼:box-sizing*{margin:0;padding:0;? }.box{width:100%;height:100px;background: cornflowerblue;border:10pxsolid#000;padding:010px;box-sizing: border-box;? ? }nav{height:100px;margin-top:50px;background:#f60;width:100%;? ? }navul{width:100%;display:-webkit-box;? ? }.nav1{-webkit-box-direction:reverse;/*翻轉*/}navulli{height:100px;-webkit-box-flex:1;list-style: none;background:aqua;? ? }.ben{width:100px;height:500px;background: red;display:-webkit-box;? ? }.benli{list-style: none;-webkit-box-flex:1;? ? }aaaaaa--box-sizing:border-box; 對border和padding都有效果,? ? ? ? 都會壓進去(沒有繼承)給自己加。ie8+,chrome,ff。其他兩個值不好用,? ? ? ? padding-box在chrome5.1不好用ff47好用

1

2

3

4

5

1

2

3

4

5

內陰影:m

box-shadow:inset 0 2px 2px #ccc;

彈性盒子:

父級:

display:-webkit-box;

-webkit-box-orient:vertical; 豎直方向-webkit-box-direction:reverse; 翻轉-webkit-box-pack:center; 水平居中start/end-webkit-box-align:center; 垂直居中start/end

子級:

-webkit-box-flex:1;

1:占幾份

{margin: 0; padding: 0;}

div{

width: 200px;

height: 500px;

}

ul{

-webkit-box-orient:vertical; /豎直方向*/

}

ul li{

-webkit-box-flex:1;

list-style: none;

background: red;

margin: 20px 0;

}

1

1

1

1

1

bootstrap常用的東西自己下去了解

[圖片上傳中。。。(6)] [圖片上傳中。。。(7)] [圖片上傳中。。。(8)] [圖片上傳中。。。(9)] [圖片上傳中。。。(10)] [圖片上傳中。。。(11)] [圖片上傳中。。。(12)] [圖片上傳中。。。(13)] [圖片上傳中。。。(14)] [圖片上傳中。。。(15)]

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 一、下面我將簡單的介紹移動端布局的八種方式:** 1.固定布局**2.流動布局3.浮動布局4.定位布局5.混...
    張憲宇閱讀 1,568評論 0 2
  • 移動開發基本知識點 一.使用rem作為單位 html { font-size: 100px; } @media(m...
    橫沖直撞666閱讀 3,514評論 0 6
  • H5移動端知識點總結 閱讀目錄 移動開發基本知識點 calc基本用法 box-sizing的理解及使用 理解dis...
    Mx勇閱讀 4,625評論 0 26
  • 閱讀目錄移動開發基本知識點 calc基本用法box-sizing的理解及使用理解display:box的布局理解f...
    張憲宇閱讀 1,568評論 0 1
  • 總有一群人,看著很多心靈文章,一直不停的說著,我要成為一個很好的人,要更好的成長,然而回到現實中,還是原來的那個你...
    蔣瑩閱讀 490評論 0 1