日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 前端技术 > HTML >内容正文

HTML

前端学习笔记 - 移动端Web开发

發(fā)布時(shí)間:2023/12/31 HTML 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 前端学习笔记 - 移动端Web开发 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

移動(dòng)端基礎(chǔ)

瀏覽器現(xiàn)狀

PC端常見瀏覽器:360瀏覽器、谷歌瀏覽器、火狐瀏覽器、QQ瀏覽器、百度瀏覽器、搜狗瀏覽器、IE瀏覽器

移動(dòng)端常見瀏覽器:UC瀏覽器,QQ瀏覽器,歐朋瀏覽器,百度手機(jī)瀏覽器,360安全瀏覽器,谷歌 瀏覽器,搜狗手機(jī)瀏覽器,獵豹瀏覽器,以及其他雜牌瀏覽器。

  • 國內(nèi)的UC和QQ,百度等手機(jī)瀏覽器都是根據(jù)Webkit修改過來的內(nèi)核,國內(nèi)尚無自主研發(fā)的內(nèi)核,就像國內(nèi)的手機(jī)操作系統(tǒng)都是基于Android修改開發(fā)的一樣

  • 兼容移動(dòng)端主流瀏覽器,處理Webkit內(nèi)核瀏覽器即可

手機(jī)屏幕現(xiàn)狀

移動(dòng)端設(shè)備屏幕尺寸非常多,碎片化嚴(yán)重。

  • Android設(shè)備有多種分辨率:480x800, 480x854, 540x960, 720x1280,1080x1920等,還有傳說中的2K,4k屏。

  • 近年來iPhone的碎片化也加劇了,其設(shè)備的主要分辨率有:640x960, 640x1136, 750x1334, 1242x2208等。

  • 作為開發(fā)者無需關(guān)注這些分辨率,因?yàn)槌S玫某叽鐔挝皇莗x

常見移動(dòng)端屏幕尺寸

設(shè)備尺寸(英寸)開發(fā)尺寸(px)物理像素比
iphone3G3.5320*4801.0
iphone4/4s3.5320*4802.0
iphone5/5s/5c4.0320*5682.0
HTC One M84.5360*6403.0
iphone 64.7375*6672.0
Nexus 44.7384*6402.0
Nexus 5x5.2411*7312.3
iphone6 Plus5.5414*7363.0
Samsung Galaxy Note45.7480*8533.0
Sony Xperia Z Ultra6.4540*9602.0
Nexus 7('12)7.0600*9601.3
iPad Mini7.9768*10241.0

作為前端開發(fā),不建議糾結(jié)dp,dpi,pt,ppi等單位。

移動(dòng)端調(diào)試方法

  • Chrome DevTools(谷歌瀏覽器)的模擬手機(jī)調(diào)試

    • f12→左上角小圖標(biāo)→可以選擇型號(hào),也可以edit添加

  • 搭建本地web服務(wù)器,手機(jī)和服務(wù)器一個(gè)局域網(wǎng)內(nèi),通過手機(jī)訪問服務(wù)器

  • 使用外網(wǎng)服務(wù)器,直接IP或域名訪問

視口

視口(viewport)就是瀏覽器顯示頁面內(nèi)容的屏幕區(qū)域。 視口可以分為布局視口、視覺視口和理想視口

  • 布局視口 layout viewport:一般移動(dòng)設(shè)備的瀏覽器都默認(rèn)設(shè)置了一個(gè)布局視口,用于解決早期的PC端頁面在手機(jī)上顯示的問題

    • iOS, Android基本都將這個(gè)視口分辨率設(shè)置為 980px,所以PC上的網(wǎng)頁大多都能在手機(jī)上呈現(xiàn),只不過元 素看上去很小,一般默認(rèn)可以通過手動(dòng)縮放網(wǎng)頁

  • 視覺視口 visual viewport:是用戶正在看到的網(wǎng)站的區(qū)域

    • 可以通過縮放去操作視覺視口,但不會(huì)影響布局視口,布局視口仍保持原來的寬度

  • 理想視口 ideal viewport

    • 使網(wǎng)站在移動(dòng)端有最理想的瀏覽和閱讀寬度而設(shè)定

    • 理想視口,對(duì)設(shè)備來講,是最理想的視口尺寸

    • 需要手動(dòng)添寫meta視口標(biāo)簽通知瀏覽器操作

      meta視口標(biāo)簽的主要目的:布局視口的寬度應(yīng)該與理想視口的寬度一致,簡單理解就是設(shè)備有多寬,布局的視口就多寬

meta視口標(biāo)簽

<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> 屬性解釋說明
width寬度設(shè)置的是viewport寬度,可以設(shè)置device-width特殊值
initial-scale初始縮放比,大于0的數(shù)字(頁面一打開按照幾倍打開)
maximum-scale最大縮放比,大于0的數(shù)字
minimum-scale最小縮放比,大于0的數(shù)字
user-scalable用戶是否可以縮放,yes或no(1或0)

標(biāo)準(zhǔn)的viewport設(shè)置

  • 視口寬度和設(shè)備保持一致 width=device-width

  • 視口的默認(rèn)縮放比例1.0 initial-scale=1.0

  • 不允許用戶自行縮放 user-scalable=no

  • 最大允許的縮放比例1.0 maximum-scale=1.0

  • 最小允許的縮放比例1.0 minimum-scale=1.0

二倍圖

物理像素&物理像素比

物理像素點(diǎn)指的是屏幕顯示的最小顆粒,是物理真實(shí)存在的。

  • 廠商在出廠時(shí)就設(shè)置好了,比如蘋果6\7\8 是 750* 1334

  • 開發(fā)時(shí)候的1px 不是一定等于1個(gè)物理像素的

  • PC端頁面,1個(gè)px 等于1個(gè)物理像素的,但是移動(dòng)端就不盡相同

  • PC端 和 早前的手機(jī)屏幕 / 普通手機(jī)屏幕: 1CSS像素 = 1 物理像素的

  • 一個(gè)px的能顯示的物理像素點(diǎn)的個(gè)數(shù),稱為物理像素比或屏幕像素比

    • iphone8的物理像素是750,1px開發(fā)像素等于2個(gè)物理像素(375寬的盒子就可以占滿了)

  • Retina(視網(wǎng)膜屏幕)是一種顯示技術(shù),可以將把更多的物理像素點(diǎn)壓縮至一塊屏幕里,從 而達(dá)到更高的分辨率,并提高屏幕顯示的細(xì)膩程度

多倍圖

  • 對(duì)于一張 50px * 50px 的圖片,在手機(jī) Retina 屏中打開,按照剛才的物理像素比會(huì)放大倍數(shù),這樣會(huì)造成圖片模糊

  • 在標(biāo)準(zhǔn)的viewport設(shè)置中,使用倍圖來提高圖片質(zhì)量,解決在高清設(shè)備中的模糊問題

  • 通常使用二倍圖, 因?yàn)閕Phone 6\7\8 的影響,但是現(xiàn)在還存在3倍圖4倍圖的情況,這個(gè)看實(shí)際開發(fā)公司需求

  • 背景圖片 注意縮放問題

? ? ? ?/* 在 iphone8 下面,需要一個(gè)50*50px的圖片,直接放進(jìn)去會(huì)被放大兩倍,100*100就會(huì)模糊,所以要放一個(gè)100*100像素的圖片,然后手動(dòng)把這個(gè)圖片的大小縮小為50*50px *//* 準(zhǔn)備的圖片比實(shí)際需要的大小大兩倍,就是2倍圖 */img {/*原始圖片100*100px*/width: 50px;height: 50px;}/*或*/.box {/*原始圖片100*100px*/background-size: 50px 50px;}

背景縮放 background-size

background-size 屬性規(guī)定背景圖像的尺寸

background-size: 背景圖片寬度 背景圖片高度;

  • 單位: 長度|百分比|cover|contain;

  • cover把背景圖像擴(kuò)展至足夠大,以使背景圖像完全覆蓋背景區(qū)域。

  • contain把圖像圖像擴(kuò)展至最大尺寸,以使其寬度和高度完全適應(yīng)內(nèi)容區(qū)域

  • 只寫一個(gè)參數(shù),算作寬度,高度會(huì)等比例縮放

移動(dòng)端開發(fā)選擇

  • 移動(dòng)端主流方案

    • 單獨(dú)制作移動(dòng)端頁面(主流)

      • 京東商城手機(jī)版、淘寶觸屏版、蘇寧易購手機(jī)版等

    • 響應(yīng)式頁面兼容移動(dòng)端(其次)

      • 三星手機(jī)官網(wǎng)等

單獨(dú)移動(dòng)端頁面(主流)

通常情況下,網(wǎng)址域名前面加 m(mobile) 可以打開移動(dòng)端。通過判斷設(shè)備,如果是移動(dòng)設(shè)備打開,則跳到移動(dòng)端頁面

響應(yīng)式兼容PC移動(dòng)端

三星電子官網(wǎng): www.samsung.com/cn/ ,通過判斷屏幕寬度來改變樣式,以適應(yīng)不同終端。

  • 缺點(diǎn):制作麻煩, 需要花很大精力去調(diào)兼容性問題

移動(dòng)端技術(shù)解決方案

移動(dòng)端瀏覽器

  • 移動(dòng)端瀏覽器基本以 webkit 內(nèi)核為主,因此就考慮webkit兼容性問題。

  • 可以放心使用 H5 標(biāo)簽和 CSS3 樣式。

  • 同時(shí)瀏覽器的私有前綴只需要考慮添加 webkit 即可

CSS初始化 normalize.css

移動(dòng)端 CSS 初始化推薦使用 normalize.css/

Normalize.css:

  • 保護(hù)了有價(jià)值的默認(rèn)值

  • 修復(fù)了瀏覽器的bug

  • 是模塊化的

  • 擁有詳細(xì)的文檔

  • 官網(wǎng)地址: Normalize.css: Make browsers render all elements more consistently.

/*! normalize.css v8.0.1 | MIT License | github.com/necolas/normalize.css */ ? ? /* Document========================================================================== */ ? ? /*** 1. Correct the line height in all browsers.* 2. Prevent adjustments of font size after orientation changes in iOS.*/ ? html {line-height: 1.15;/* 1 */-webkit-text-size-adjust: 100%;/* 2 */ } ? ? /* Sections========================================================================== */ ? ? /*** Remove the margin in all browsers.*/ ? body {margin: 0; } ? ? /*** Render the `main` element consistently in IE.*/ ? main {display: block; } ? ? /*** Correct the font size and margin on `h1` elements within `section` and* `article` contexts in Chrome, Firefox, and Safari.*/ ? h1 {font-size: 2em;margin: 0.67em 0; } ? ? /* Grouping content========================================================================== */ ? ? /*** 1. Add the correct box sizing in Firefox.* 2. Show the overflow in Edge and IE.*/ ? hr {box-sizing: content-box;/* 1 */height: 0;/* 1 */overflow: visible;/* 2 */ } ? ? /*** 1. Correct the inheritance and scaling of font size in all browsers.* 2. Correct the odd `em` font sizing in all browsers.*/ ? pre {font-family: monospace, monospace;/* 1 */font-size: 1em;/* 2 */ } ? ? /* Text-level semantics========================================================================== */ ? ? /*** Remove the gray background on active links in IE 10.*/ ? a {background-color: transparent; } ? ? /*** 1. Remove the bottom border in Chrome 57-* 2. Add the correct text decoration in Chrome, Edge, IE, Opera, and Safari.*/ ? abbr[title] {border-bottom: none;/* 1 */text-decoration: underline;/* 2 */text-decoration: underline dotted;/* 2 */ } ? ? /*** Add the correct font weight in Chrome, Edge, and Safari.*/ ? b, strong {font-weight: bolder; } ? ? /*** 1. Correct the inheritance and scaling of font size in all browsers.* 2. Correct the odd `em` font sizing in all browsers.*/ ? code, kbd, samp {font-family: monospace, monospace;/* 1 */font-size: 1em;/* 2 */ } ? ? /*** Add the correct font size in all browsers.*/ ? small {font-size: 80%; } ? ? /*** Prevent `sub` and `sup` elements from affecting the line height in* all browsers.*/ ? sub, sup {font-size: 75%;line-height: 0;position: relative;vertical-align: baseline; } ? sub {bottom: -0.25em; } ? sup {top: -0.5em; } ? ? /* Embedded content========================================================================== */ ? ? /*** Remove the border on images inside links in IE 10.*/ ? img {border-style: none; } ? ? /* Forms========================================================================== */ ? ? /*** 1. Change the font styles in all browsers.* 2. Remove the margin in Firefox and Safari.*/ ? button, input, optgroup, select, textarea {font-family: inherit;/* 1 */font-size: 100%;/* 1 */line-height: 1.15;/* 1 */margin: 0;/* 2 */ } ? ? /*** Show the overflow in IE.* 1. Show the overflow in Edge.*/ ? button, input {/* 1 */overflow: visible; } ? ? /*** Remove the inheritance of text transform in Edge, Firefox, and IE.* 1. Remove the inheritance of text transform in Firefox.*/ ? button, select {/* 1 */text-transform: none; } ? ? /*** Correct the inability to style clickable types in iOS and Safari.*/ ? button, [type="button"], [type="reset"], [type="submit"] {-webkit-appearance: button; } ? ? /*** Remove the inner border and padding in Firefox.*/ ? button::-moz-focus-inner, [type="button"]::-moz-focus-inner, [type="reset"]::-moz-focus-inner, [type="submit"]::-moz-focus-inner {border-style: none;padding: 0; } ? ? /*** Restore the focus styles unset by the previous rule.*/ ? button:-moz-focusring, [type="button"]:-moz-focusring, [type="reset"]:-moz-focusring, [type="submit"]:-moz-focusring {outline: 1px dotted ButtonText; } ? ? /*** Correct the padding in Firefox.*/ ? fieldset {padding: 0.35em 0.75em 0.625em; } ? ? /*** 1. Correct the text wrapping in Edge and IE.* 2. Correct the color inheritance from `fieldset` elements in IE.* 3. Remove the padding so developers are not caught out when they zero out* ? `fieldset` elements in all browsers.*/ ? legend {box-sizing: border-box;/* 1 */color: inherit;/* 2 */display: table;/* 1 */max-width: 100%;/* 1 */padding: 0;/* 3 */white-space: normal;/* 1 */ } ? ? /*** Add the correct vertical alignment in Chrome, Firefox, and Opera.*/ ? progress {vertical-align: baseline; } ? ? /*** Remove the default vertical scrollbar in IE 10+.*/ ? textarea {overflow: auto; } ? ? /*** 1. Add the correct box sizing in IE 10.* 2. Remove the padding in IE 10.*/ ? [type="checkbox"], [type="radio"] {box-sizing: border-box;/* 1 */padding: 0;/* 2 */ } ? ? /*** Correct the cursor style of increment and decrement buttons in Chrome.*/ ? [type="number"]::-webkit-inner-spin-button, [type="number"]::-webkit-outer-spin-button {height: auto; } ? ? /*** 1. Correct the odd appearance in Chrome and Safari.* 2. Correct the outline style in Safari.*/ ? [type="search"] {-webkit-appearance: textfield;/* 1 */outline-offset: -2px;/* 2 */ } ? ? /*** Remove the inner padding in Chrome and Safari on macOS.*/ ? [type="search"]::-webkit-search-decoration {-webkit-appearance: none; } ? ? /*** 1. Correct the inability to style clickable types in iOS and Safari.* 2. Change font properties to `inherit` in Safari.*/ ? ::-webkit-file-upload-button {-webkit-appearance: button;/* 1 */font: inherit;/* 2 */ } ? ? /* Interactive========================================================================== */ ? ? /** Add the correct display in Edge, IE 10+, and Firefox.*/ ? details {display: block; } ? ? /** Add the correct display in all browsers.*/ ? summary {display: list-item; } ? ? /* Misc========================================================================== */ ? ? /*** Add the correct display in IE 10+.*/ ? template {display: none; } ? ? /*** Add the correct display in IE 10.*/ ? [hidden] {display: none; }

CSS3 盒子模型 box-sizing

CSS3盒子模型: 盒子的寬度 = CSS中設(shè)置的寬度width 里面包含了 border 和 padding,也就是說,CSS3中的盒子模型, padding 和 border 不會(huì)撐大盒子了

/*CSS3盒子模型*/ box-sizing: border-box; /*傳統(tǒng)盒子模型*/ box-sizing: content-box;
  • 移動(dòng)端可以全部CSS3 盒子模型

  • PC端如果完全需要兼容,我們就用傳統(tǒng)模式,如果不考慮兼容性,我們就選擇 CSS3 盒子模型

特殊樣式

? ?<style>div {/*CSS3盒子模型*/box-sizing: border-box;-webkit-box-sizing: border-box;}img,a {/*需要清除點(diǎn)擊高亮,設(shè)置為transparent透明*/-webkit-tap-highlight-color: transparent;/*禁用長按頁面時(shí)的彈出菜單*/-webkit-touch-callout: none;}input {/*在移動(dòng)端瀏覽器默認(rèn)的外觀在iOS上加上這個(gè)屬性才能給按鈕和輸入框自定義樣式*/-webkit-appearance: none;}</style> </head> ? <body><div></div><a href="#">鏈接</a><input type="button" value="按鈕"> </body>

移動(dòng)端常見布局

移動(dòng)端技術(shù)選型

  • 單獨(dú)制作移動(dòng)端頁面(主流)

    • 流式布局(百分比布局)

    • flex 彈性布局(強(qiáng)烈推薦)

    • less+rem+媒體查詢布局

    • 混合布局

  • 響應(yīng)式頁面兼容移動(dòng)端(其次)

    • 媒體查詢

    • bootstrap

流式布局(百分比布局)

流式布局,就是百分比布局,也稱非固定像素布局

  • 通過盒子的寬度設(shè)置成百分比來根據(jù)屏幕的寬度來進(jìn)行伸縮,不受固定像素的限制,內(nèi)容向兩側(cè)填充

  • 主要是看寬度,不看高度

  • 流式布局方式是移動(dòng)web開發(fā)使用的比較常見的布局方式

  • max-width 最大寬度 (max-height 最大高度)

  • min-width 最小寬度 (min-height 最小高度)

京東移動(dòng)端首頁

  • 訪問地址:m.jd.com

  • 技術(shù)選型

    • 方案:單獨(dú)制作移動(dòng)頁面方案

    • 技術(shù):采取流式布局

  • 搭建相關(guān)文件夾結(jié)構(gòu)

  • 設(shè)置視口標(biāo)簽以及引入初始化樣式

  • ? <meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=no,maximum-scale=1.0,minimum-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!-- 引入我們的css初始化文件 --><link rel="stylesheet" href="css/normalize.css"><!-- 引入我們首頁的css --><link rel="stylesheet" href="css/index.css">
  • 常用初始化樣式

  • body {width: 100%;min-width: 320px;max-width: 640px;margin: 0 auto;font-size: 14px;font-family: -apple-system, Helvetica, sans-serif;color: #666;line-height: 1.5; }
  • 圣杯布局:左右固定,中間自適應(yīng)

  • 二倍精靈圖做法

    • 在firework里面把精靈圖等比例縮放為原來的一半,之后再測量坐標(biāo)

    • 注意代碼里面background-size也要寫精靈圖原來寬度的一半

  • 圖片格式

    • DPG圖片壓縮技術(shù):京東自主研發(fā)推出DPG圖片壓縮技術(shù),經(jīng)測試,該技術(shù)可直接節(jié)省用戶近50%的瀏覽流量,極大的提升了用戶的網(wǎng)頁打開速度。能夠兼容jpeg,實(shí)現(xiàn)全平臺(tái)、全部瀏覽器的兼容支持,經(jīng)過內(nèi)部和外部上萬張圖片的人眼瀏覽測試后發(fā)現(xiàn),壓縮后的圖片和webp的清晰度對(duì)比沒有差距。

    • webp 圖片格式:谷歌開發(fā)的一種旨在加快圖片加載速度的圖片格式。圖片壓縮體積大約只有JPEG的2/3,并 能節(jié)省大量的服務(wù)器寬帶資源和數(shù)據(jù)空間

    flex彈性布局

    傳統(tǒng)布局與flex布局

    傳統(tǒng)布局flex 彈性布局
    兼容性好操作方便,布局極為簡單,移動(dòng)端應(yīng)用很廣泛
    布局繁瑣PC端瀏覽器支持情況較差
    局限性,不能再移動(dòng)端很好的布局IE 11或更低版本,不支持或僅部分支持
    • 建議:

      • 如果是PC端頁面布局,我們還是傳統(tǒng)布局。

      • 如果是移動(dòng)端或者不考慮兼容性問題的PC端頁面布局,我們還是使用flex彈性布局布局原理

    布局原理

    <!DOCTYPE html> <html lang="en"> ? <head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>div {display: flex;width: 80%;height: 300px;background-color: pink;justify-content: space-around;}div span {/* width: 150px; */height: 100px;background-color: purple;margin-right: 5px;flex: 1;}</style> </head> ? <body><div><span>1</span><span>2</span><span>3</span></div> </body> ? </html>

    flex 是 flexible Box 的縮寫,意為"彈性布局",用來為盒狀模型提供最大的靈活性,任何一個(gè)容器都可以 指定為 flex 布局

    • 當(dāng)為父盒子設(shè)為 flex 布局以后,子元素的 float、clear 和 vertical-align 屬性將失效。

    • 子元素會(huì)被轉(zhuǎn)換成塊級(jí)元素

    • 伸縮布局 = 彈性布局 = 伸縮盒布局 = 彈性盒布局 =flex布局

    采用 Flex 布局的元素,稱為 Flex 容器(flex container),簡稱"容器"。它的所有子元素自動(dòng)成為容器成 員,稱為 Flex 項(xiàng)目(flex item),簡稱"項(xiàng)目"

    • 體驗(yàn)中 div 就是 flex父容器。

    • 體驗(yàn)中 span 就是 子容器 flex項(xiàng)目

    • 子容器可以橫向排列也可以縱向排列

    總結(jié)flex布局原理:就是通過給父盒子添加flex屬性,來控制子盒子的位置和排列方式

    常見父項(xiàng)屬性

    以下由6個(gè)屬性是對(duì)父元素設(shè)置的

    • flex-direction:設(shè)置主軸的方向

    • justify-content:設(shè)置主軸上的子元素排列方式

    • flex-wrap:設(shè)置子元素是否換行

    • align-content:設(shè)置側(cè)軸上的子元素的排列方式(多行)

    • align-items:設(shè)置側(cè)軸上的子元素排列方式(單行)

    • flex-flow:復(fù)合屬性,相當(dāng)于同時(shí)設(shè)置了 flex-direction 和 flex-wrap

    flex-direction 設(shè)置主軸的方向

    • 主軸與側(cè)軸:在 flex 布局中,是分為主軸和側(cè)軸兩個(gè)方向,同樣的叫法有 : 行和列、x 軸和y 軸

      • 默認(rèn)主軸方向就是 x 軸方向,水平向右

      • 默認(rèn)側(cè)軸方向就是 y 軸方向,水平向下

    • 屬性值

      • flex-direction 屬性決定主軸的方向(即項(xiàng)目的排列方向)

      • 注意:

      • 主軸和側(cè)軸是會(huì)變化的,就看 flex-direction 設(shè)置誰為主軸,剩下的就是側(cè)軸(如flex-direction: column;那么x軸就是側(cè)軸)。而子元素是跟著主軸來排列的

    屬性值說明
    row默認(rèn)值從左到右
    row-reverse從右到左
    column從上到下
    column-reverse從下到上

    justify-content 設(shè)置主軸上的子元素排列方式

    justify-content屬性定義了項(xiàng)目在主軸上的對(duì)齊方式

    • 注意: 使用這個(gè)屬性之前一定要確定好主軸是哪個(gè)

    屬性值說明
    flex-start(默認(rèn)值)從頭部開始;如果主軸是x軸,則從左到右
    flex-end從尾部開始排列
    center在主軸居中對(duì)齊(如果主軸是x軸則水平居中)
    space-around平分剩余空間
    space-between先兩邊貼邊,再平分剩余空間(重要)

    flex-wrap 設(shè)置子元素是否換行

    默認(rèn)情況下,項(xiàng)目都排在一條線(又稱”軸線”)上

    • flex-wrap屬性定義,flex布局中默認(rèn)是不換行的,如果裝不開,會(huì)縮小子元素

    屬性值說明
    nowrap(默認(rèn)值)不換行
    wrap換行

    align-items 設(shè)置側(cè)軸上的子元素排列方式(單行)

    控制子項(xiàng)在側(cè)軸(默認(rèn)是y軸)上的排列方式,在子項(xiàng)為單項(xiàng)(單行)的時(shí)候使用

    屬性值說明
    flex-start從上到下
    flex-end從下到上
    center擠在一起居中(垂直居中)
    stretch拉伸(默認(rèn)值 )

    讓子元素既水平居中對(duì)齊又垂直對(duì)齊:在主軸(justify-content),再在側(cè)軸(align-items)

    align-content 設(shè)置側(cè)軸上的子元素的排列方式(多行)

    設(shè)置子項(xiàng)在側(cè)軸上的排列方式 并且只能用于子項(xiàng)出現(xiàn)換行的情況(多行)(必須設(shè)置了flex-wrap :wrap;),在單行下是沒有效果的。

    屬性值說明
    flex-start(默認(rèn)值)在側(cè)軸的頭部開始排列
    flex-end在側(cè)軸的尾部開始排列
    center在側(cè)軸中間顯示
    space-around子項(xiàng)在側(cè)軸平分剩余空間
    space-between子項(xiàng)在側(cè)軸先分布在兩頭,再平分剩余空間
    stretch設(shè)置子項(xiàng)元素高度平分父元素高度

    align-content 和 align-items 區(qū)別

    • align-items 適用于單行情況下, 只有上對(duì)齊、下對(duì)齊、居中和拉伸

    • align-content 適應(yīng)于換行(多行)的情況下(單行情況下無效), 可以設(shè)置 上對(duì)齊、 下對(duì)齊、居中、拉伸以及平均分配剩余空間等屬性值。

    • 總結(jié)就是單行找 align-items 多行找 align-content

    flex-flow

    flex-flow 屬性是 flex-direction 和 flex-wrap 屬性的復(fù)合屬性

    flex-flow:row wrap;

    常見子項(xiàng)屬性

    flex 屬性

    定義子項(xiàng)目分配剩余空間,用flex來表示占多少份數(shù),也可以寫百分比

    .item {flex: <number>; /* default 0 */ } <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>section {display: flex;width: 60%;height: 150px;background-color: pink;margin: 0 auto;}section div:nth-child(1) {width: 100px;height: 150px;background-color: red;}section div:nth-child(2) {flex: 1;background-color: green;}section div:nth-child(3) {width: 100px;height: 150px;background-color: blue;}p {display: flex;width: 60%;height: 150px;background-color: pink;margin: 100px auto;}p span {flex: 1;}p span:nth-child(2) {flex: 2;background-color: purple;}</style> </head><body><section><div></div><div></div><div></div></section><p><span>1</span><span>2</span><span>3</span></p> </body></html>

    align-self 控制子項(xiàng)自己在側(cè)軸上的排列方式

    align-self 屬性允許單個(gè)項(xiàng)目有與其他項(xiàng)目不一樣的對(duì)齊方式,可覆蓋 align-items 屬性。

    • 默認(rèn)值為 auto,表示繼承父元素的 align-items 屬性,如果沒有父元素,則等同于 stretch。

    span:nth-child(2) {/* 設(shè)置自己在側(cè)軸上的排列方式 */align-self: flex-end;}

    order 屬性定義項(xiàng)目的排列順序

    數(shù)值越小,排列越靠前,默認(rèn)為0

    • 注意:和 z-index 不一樣

    .item {order: <number>; }

    攜程網(wǎng)移動(dòng)端首頁

    訪問地址:m.ctrip.com

  • 技術(shù)選型

    • 方案:單獨(dú)制作移動(dòng)頁面方案

    • 技術(shù):采取flex布局

  • 搭建相關(guān)文件夾結(jié)構(gòu)

  • 設(shè)置視口標(biāo)簽以及引入初始化樣式

  • <meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0"> <link rel="stylesheet" href="css/normalize.css"> <link rel="stylesheet" href="css/index.css">
  • 常用初始化樣式

  • body { max-width: 540px; min-width: 320px; margin: 0 auto; font: normal 14px/1.5 Tahoma,"Lucida Grande",Verdana,"Microsoft Yahei",STXihei,hei; color: #000; background: #f2f2f2; overflow-x: hidden; -webkit-tap-highlight-color: transparent; }
  • 常見模塊命名

  • 常見flex布局思路

  • 背景線性漸變

  • background: linear-gradient(起始方向, 顏色1, 顏色2, ...); background: -webkit-linear-gradient(left, red , blue); background: -webkit-linear-gradient(left top, red , blue);
    • 背景漸變必須添加瀏覽器私有前綴

    • 起始方向可以是: 方位名詞或者度數(shù) , 如果省略默認(rèn)就是 top

    rem適配布局

    rem單位

    rem (root em)是一個(gè)相對(duì)單位,類似于em,em是父元素字體大小

    不同的是rem的基準(zhǔn)是相對(duì)于html元素的字體大小

    • 比如,根元素(html)設(shè)置font-size=12px; 非根元素設(shè)置width:2rem; 則換成px表示就是24px

    • rem的優(yōu)勢:

      • 父元素文字大小可能不一致, 但是整個(gè)頁面只有一個(gè)html,可以通過修改html里面的文字大小來改變頁面中元素的大小,可以整體控制

    /* 根html 為 12px */html {font-size: 12px;}/* 此時(shí) div 的字體大小就是 24px */ div {font-size: 2rem;}

    媒體查詢

    媒體查詢(Media Query)是CSS3新語法

    • 使用 @media 查詢,可以針對(duì)不同的媒體類型定義不同的樣式

    • @media 可以針對(duì)不同的屏幕尺寸設(shè)置不同的樣式

    • 當(dāng)你重置瀏覽器大小的過程中,頁面也會(huì)根據(jù)瀏覽器的寬度和高度重新渲染頁面

    • 目前針對(duì)很多蘋果手機(jī)、Android手機(jī),平板等設(shè)備都用得到多媒體查詢

    語法規(guī)范

    @media mediatype and|not|only (media feature) {CSS-Code;}
    • 用 @media 開頭 注意@符號(hào)

    • mediatype 媒體類型

    • 關(guān)鍵字 and not only

    • media feature 媒體特性 必須有小括號(hào)包含

    mediatype 查詢類型

    將不同的終端設(shè)備劃分成不同的類型,稱為媒體類型

    值說明
    all用于所有設(shè)備
    print用于打印機(jī)和打印預(yù)覽
    screen用于電腦屏幕,平板電腦,智能手機(jī)等

    關(guān)鍵字

    關(guān)鍵字將媒體類型或多個(gè)媒體特性連接到一起做為媒體查詢的條件

    值說明
    and可以將多個(gè)媒體特性連接到一起,相當(dāng)于“且”的意思
    not排除某個(gè)媒體類型,相當(dāng)于“非”的意思,可以省略
    only指定某個(gè)特定的媒體類型,可以省略

    媒體特性

    每種媒體類型都具體各自不同的特性,根據(jù)不同媒體類型的媒體特性設(shè)置不同的展示風(fēng)格。我們暫且了解三個(gè)。 注意他們要加小括號(hào)包含

    值說明
    width定義輸出設(shè)備中頁面可見區(qū)域的寬度
    min-width定義輸出設(shè)備中頁面最小可見區(qū)域?qū)挾?/td>
    max-width定義輸出設(shè)備中頁面最大可見區(qū)域?qū)挾?/td>
    /* 在屏幕上并且最大寬度是800像素,設(shè)置想要的樣式 *//* 在屏幕上小于等于800px的時(shí)候背景顏色變色 *//* 可以根據(jù)不同的屏幕尺寸改變不同的樣式 */ @media screen and (max-width:800px) {body {background-color: pink;}}@media screen and (max-width:500px) {body {background-color: skyblue;}}

    根據(jù)頁面寬度改變背景變色

    ① 按照從大到小的或者從小到大的思路 ② 注意最大值 max-width 和最小值 min-width都是包含等于的 ③ 當(dāng)屏幕小于540像素, 背景顏色變?yōu)樗{(lán)色 (x <= 539) ④ 當(dāng)屏幕大于等于540像素 并且小于等于 969像素的時(shí)候 背景顏色為 綠色 ( 540=<x <= 969) ⑤ 當(dāng)屏幕大于等于 970像素的時(shí)候,背景顏色為紅色 ( x >= 970)

    • 注意: 為了防止混亂,媒體查詢要按照從小到大或者從大到小的順序來寫,但推薦從小到大來寫,這樣代碼更簡潔

    <style>/* 1. 媒體查詢一般按照從大到小或者 從小到大的順序來 *//* 2. 小于540px 頁面的背景顏色變?yōu)樗{(lán)色 */@media screen and (max-width: 539px) {body {background-color: blue;}}/* 3. 540 ~ 970 我們的頁面顏色改為 綠色 *//* @media screen and (min-width: 540px) and (max-width: 969px) {body {background-color: green;}} */@media screen and (min-width: 540px) {body {background-color: green;}}/* 4. 大于等于970 我們頁面的顏色改為 紅色 */@media screen and (min-width: 970px) {body {background-color: red;}}/* 5. screen 還有 and 必須帶上不能省略的 *//* 6. 我們的數(shù)字后面必須跟單位 970px 這個(gè) px 不能省略的 */</style>

    媒體查詢+rem實(shí)現(xiàn)元素變化

    • rem單位是跟著html來走的,有了rem頁面元素可以設(shè)置不同大小尺寸

    • 媒體查詢可以根據(jù)不同設(shè)備寬度來修改樣式

    • 媒體查詢+rem 就可以實(shí)現(xiàn)不同設(shè)備寬度,實(shí)現(xiàn)頁面元素大小的動(dòng)態(tài)變化

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>* {margin: 0;padding: 0;}/* html {font-size: 100px;} *//* 從小到大的順序 */@media screen and (min-width: 320px) {html {font-size: 50px;}}@media screen and (min-width: 640px) {html {font-size: 100px;}}.top {height: 1rem;font-size: .5rem;background-color: green;color: #fff;text-align: center;line-height: 1rem;}</style> </head><body><div class="top">購物車</div> </body></html>

    引入資源

    當(dāng)樣式比較繁多的時(shí)候,可以針對(duì)不同的媒體使用不同 stylesheets(樣式表)。

    • 原理:直接在link中判斷設(shè)備的尺寸,然后引用不同的css文件

    • 語法規(guī)范:<link rel="stylesheet" media="mediatype and|not|only (media feature)" href="mystylesheet.css">

    • 示例

    <link rel="stylesheet" href="styleA.css" media="screen and (min-width: 400px)"> <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>/* 當(dāng)我們屏幕大于等于 640px以上的,我們讓div 一行顯示2個(gè) *//* 當(dāng)我們屏幕小于640 我們讓div一行顯示一個(gè) *//* 一個(gè)建議: 我們媒體查詢最好的方法是從小到大 *//* 引入資源就是 針對(duì)于不同的屏幕尺寸 調(diào)用不同的css文件 */</style><link rel="stylesheet" href="style320.css" media="screen and (min-width: 320px)"><link rel="stylesheet" href="style640.css" media="screen and (min-width: 640px)"> </head><body><div>1</div><div>2</div> </body></html>
    • style320.css

    div {width: 100%;height: 100px; }div:nth-child(1) {background-color: pink; }div:nth-child(2) {background-color: purple; }
    • style640.css

    div {float: left;width: 50%;height: 100px; }div:nth-child(1) {background-color: pink; }div:nth-child(2) {background-color: purple; }

    Less 基礎(chǔ)

    維護(hù) css 的弊端

    CSS 是一門非程序式語言,沒有變量、函數(shù)、SCOPE(作用域)等概念。

    • CSS 需要書寫大量看似沒有邏輯的代碼,CSS 冗余度是比較高的。

    • 不方便維護(hù)及擴(kuò)展,不利于復(fù)用。

    • CSS 沒有很好的計(jì)算能力

    • 非前端開發(fā)工程師來講,往往會(huì)因?yàn)槿鄙?CSS 編寫經(jīng)驗(yàn)而很難寫出組織良好且易于維護(hù)的 CSS 代碼項(xiàng)目

    Less 介紹

    Less (Leaner Style Sheets 的縮寫) 是一門 CSS 擴(kuò)展語言,也成為CSS預(yù)處理器。

    • 做為 CSS 的一種形式的擴(kuò)展,它并沒有減少 CSS 的功能,而是在現(xiàn)有的 CSS 語法上,為CSS加入程序式語言的特性。

    • 它在 CSS 的語法基礎(chǔ)之上,引入了變量,Mixin(混入),運(yùn)算以及函數(shù)等功能,大大簡化了 CSS 的編寫,并且降低了 CSS 的維護(hù)成本,就像它的名稱所說的那樣,Less 可以讓我們用更少的代碼做更多的事情。

    • Less中文網(wǎng)址: Less 中文網(wǎng)

    • 常見的CSS預(yù)處理器:Sass、Less、Stylus

    • Less 是一門 CSS 預(yù)處理語言,它擴(kuò)展了CSS的動(dòng)態(tài)特性

    Less 安裝

    • 如果使用vscode無需安裝less:安裝easy less插件

      • 修改less自動(dòng)生成的css的路徑:easy less插件的設(shè)置圖標(biāo),'擴(kuò)展設(shè)置','在setting.json中編輯',在''less.compile: {}''加上"out": "../css/"

    • 未安裝Vscode:

    ① 安裝nodejs,可選擇版本(8.0),網(wǎng)址:下載 | Node.js 中文網(wǎng) ② 檢查是否安裝成功,使用cmd命令(win10 是 window +r 打開 運(yùn)行輸入cmd) --- 輸入“ node –v ”查看版本即可 ③ 基于nodejs在線安裝Less,使用cmd命令“ npm install -g less ”即可 ④ 檢查是否安裝成功,使用cmd命令“ lessc -v ”查看版本即可

    Less 變量

    新建一個(gè)后綴名為less的文件, 在這個(gè)less文件里面書寫less語句

    變量是指沒有固定的值,可以改變的。因?yàn)镃SS中的一些顏色和數(shù)值等經(jīng)常使用

    @變量名:值;

    • 變量命名規(guī)范

      • 必須有@為前綴

      • 不能包含特殊字符

      • 不能以數(shù)字開頭

      • 大小寫敏感

    @color: pink;
    • 變量使用規(guī)范

    //直接使用 body {color: @color; }a:hover {color: @color; }

    Less 編譯

    本質(zhì)上,Less 包含一套自定義的語法及一個(gè)解析器,用戶根據(jù)這些語法定義自己的樣式規(guī)則,這些規(guī)則 最終會(huì)通過解析器,編譯生成對(duì)應(yīng)的 CSS 文件。

    • 所以,需要把less文件,編譯生成為css文件,這樣html頁面才能使用

    • vocode Less 插件

      • Easy LESS 插件用來把less文件編譯為css文件

      • 安裝完畢插件,重新加載 vscode

      • 只要保存Less文件,就會(huì)自動(dòng)生成CSS文件(再保存,css文件也會(huì)自動(dòng)更新)

    Less 嵌套

    經(jīng)常用到選擇器的嵌套

    #header .logo {width: 300px; }
    • Less 嵌套寫法:子元素的樣式直接寫到父元素里面

    #header {.logo {width: 300px;} }
    • 如果有 (交集|偽類|偽元素選擇器)

      • 內(nèi)層選擇器的前面沒有&符號(hào),則它被解析為父選擇器的后代

      • 如果有& 符號(hào),它就被解析為父元素自身或父元素的偽類

    .header {width: 200px;height: 200px;background-color: pink;// 1. less嵌套:子元素的樣式直接寫到父元素里面a {color: red;// 2. 如果有偽類、交集選擇器、 偽元素選擇器,內(nèi)層選擇器的前面需要加&&:hover { // 相當(dāng)于a:hovercolor: blue;}} } .nav {.logo {color: green;}&::before { // 相當(dāng)于.nav::beforecontent: "";} }

    Less 運(yùn)算

    任何數(shù)字、顏色或者變量都可以參與運(yùn)算。Less提供了加(+)、減(-)、乘(*)、除(/)算術(shù)運(yùn)算。

    • 注意:

      • 乘號(hào)(*)和除號(hào)(/)的寫法

      • 運(yùn)算符中間左右有個(gè)空格隔開 如1px + 5

      • 對(duì)于兩個(gè)不同的單位的值之間的運(yùn)算,運(yùn)算結(jié)果的值取第一個(gè)值的單位

      • 如果兩個(gè)值之間只有一個(gè)值有單位,則運(yùn)算結(jié)果就取該單位

      • 新版本除法需要加括號(hào) 如width: (44rem / @baseFont);

    @baseFont: 50px; html {font-size: @baseFont; } @border: 5px + 5; div {width: 200px - 50;height: (200px + 50px ) * 2;border: @border solid red;background-color: #666 - #222; } img {width: 82rem / @baseFont;height: 82rem / @baseFont; } // 1. 運(yùn)算符的左右兩側(cè)必須敲一個(gè)空格隔開 // 2. 兩個(gè)數(shù)參與運(yùn)算 如果只有一個(gè)數(shù)有單位,則最后的結(jié)果就以這個(gè)單位為準(zhǔn) // 3. 兩個(gè)數(shù)參與運(yùn)算,如果2個(gè)數(shù)都有單位,而且不一樣的單位 最后的結(jié)果以第一個(gè)單位為準(zhǔn)

    rem適配方案

    • 適配的目標(biāo):讓一些不能等比自適應(yīng)的元素,達(dá)到當(dāng)設(shè)備尺寸發(fā)生改變的時(shí)候,等比例適配當(dāng)前設(shè)備

    • 達(dá)成目標(biāo)的方法:使用媒體查詢根據(jù)不同設(shè)備按比例設(shè)置html的字體大小,然后頁面元素使用rem做尺寸單位,當(dāng)html字體大小變化元素尺寸也會(huì)發(fā)生變化,從而達(dá)到等比縮放的適配

    rem實(shí)際開發(fā)適配方案

    ① 按照設(shè)計(jì)稿與設(shè)備寬度的比例,動(dòng)態(tài)計(jì)算并設(shè)置 html 根標(biāo)簽的 font-size 大小(媒體查詢) ② CSS 中,設(shè)計(jì)稿元素的寬、高、相對(duì)位置等取值,按照同等比例換算為 rem 為單位的值;

    rem適配方案技術(shù)使用(市場主流)

    • 技術(shù)方案1

      • less

      • 媒體查詢

      • rem

    • 技術(shù)方案2(推薦)

      • flexible.js

      • rem

    • 總結(jié):

      • 兩種方案現(xiàn)在都存在

      • 方案2更簡單

    方案1(rem + 媒體查詢 + less 技術(shù))

    設(shè)計(jì)稿常見尺寸寬度

    設(shè)備常見寬度
    iphone 4/5640px
    iphone 6/7/8750px
    Android常見320px、360px、375px、384px、400px、414px、500px、720px;大部分4.7~5寸的安卓設(shè)備為720px

    一般情況下,以一套或兩套效果圖適應(yīng)大部分的屏幕,放棄極端屏或?qū)ζ鋬?yōu)雅降級(jí),犧牲一些效果,現(xiàn)在基本以750px為準(zhǔn)

    動(dòng)態(tài)設(shè)置html標(biāo)簽 font-size 大小

    ① 假設(shè)設(shè)計(jì)稿是750px ② 假設(shè)把整個(gè)屏幕劃分為15等份(劃分標(biāo)準(zhǔn)不一可以是20份也可以是10等份) ③ 每一份作為html字體大小,這里就是50px ④ 那么在320px設(shè)備的時(shí)候,字體大小為320/15 就是 21.33px ⑤ 用頁面元素的大小除以不同的html字體大小會(huì)發(fā)現(xiàn)他們比例還是相同的

    • 比如以750為標(biāo)準(zhǔn)設(shè)計(jì)稿

      • 一個(gè)100*100像素的頁面元素在750px屏幕下, 就是100/50轉(zhuǎn)換為rem, 2 rem * 2 rem,比例是1比1

      • 320屏幕下, html字體大小為21.33,則2rem = 42.66px,此時(shí)寬和高都是 42.66,但是寬和高的比例還是1比1

      • 但是已經(jīng)能實(shí)現(xiàn)不同屏幕下頁面元素盒子等比例縮放的效果

    元素大小取值方法

    • 最后的公式: 頁面元素的rem值 = 頁面元素值(px) / (屏幕寬度 / 劃分的份數(shù))

      • 屏幕寬度/劃分的份數(shù)就是1rem,即html的font-size大小

      • 或: 頁面元素的rem值 = 頁面元素值(px) / html font-size字體大小

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>@media screen and (min-width: 320px) {html {font-size: 21.33px;}}@media screen and (min-width: 750px) {html {font-size: 50px;}}div {width: 2rem;height: 2rem;background-color: pink;}/* 1. 首先我們選一套標(biāo)準(zhǔn)尺寸 750為準(zhǔn) 2. 我們用屏幕尺寸 除以 我們劃分的份數(shù) 得到了 html 里面的文字大小 但是我們知道不同屏幕下得到的文字大小是不一樣的 *//* 3. 頁面元素的rem值 = 頁面元素在 750像素的下px值 / html 里面的文字大小 */</style> </head><body><div></div> </body></html>

    方案2 flexible.js

    手機(jī)淘寶團(tuán)隊(duì)出的簡潔高效移動(dòng)端適配庫

    • 不需要在寫不同屏幕的媒體查詢,因?yàn)槔锩鎗s做了處理

    • 原理是把當(dāng)前設(shè)備劃分為10等份,但是不同設(shè)備下,比例還是一致的。

    • 確定好當(dāng)前設(shè)備的html文字大小就可以了

    • 比如當(dāng)前設(shè)計(jì)稿是750px, 只需要把html文字大小設(shè)置為 75px(750px / 10) 就可以

    • 里面頁面元素rem值: 頁面元素的px值 / 75

    • 剩余的,讓flexible.js來去算

    VSCode - px轉(zhuǎn)換rem插件:cssrem

    插件默認(rèn)的html文字大小 cssroot是16px

    設(shè)置html字體大小基準(zhǔn)值

  • 打開 設(shè)置 快捷鍵是 ctrl + 逗號(hào)

  • 或:右鍵插件,打開擴(kuò)展設(shè)置,修改root font size

    蘇寧網(wǎng)首頁案例

    訪問地址:m.suning.com

  • 技術(shù)選型

    • 方案:采取單獨(dú)制作移動(dòng)頁面方案

    • 技術(shù):采取rem適配布局(less + rem + 媒體查詢)

    • 設(shè)計(jì)圖: 本設(shè)計(jì)圖采用 750px 設(shè)計(jì)尺寸

  • 搭建相關(guān)文件夾結(jié)構(gòu)

  • 設(shè)置視口標(biāo)簽以及引入初始化樣式

  • 設(shè)置公共common.less文件

    • 新建common.less 設(shè)置好最常見的屏幕尺寸,利用媒體查詢設(shè)置不同的html字體大小,因?yàn)槌耸醉撈渌撁嬉残枰?/p>

    • 常見的尺寸有 320px、360px、375px、384px、400px、414px、424px、480px、540px、720px、750px

    • 劃分的份數(shù)定為15等份

    • 因?yàn)閜c端也可以打開蘇寧移動(dòng)端首頁,默認(rèn)html字體大小為 50px,注意這句話寫到最上面

  • 新建index.less文件

    • 新建index.less 這里面寫首頁的樣式

    • 將剛才設(shè)置好的 common.less引入到index.less里面 語法如下:

    // 在 index.less 中導(dǎo)入 common.less 文件 // @import可以把一個(gè)樣式文件導(dǎo)入到另外一個(gè)樣式文件里面 // link 是把一個(gè)樣式文件引入到html頁面里面 @import “common”;
    • 生成index.css 引入到 index.html 里面

  • body樣式

  • body {min-width: 320px;width: 15rem;margin: 0 auto;line-height:?1.5;font-family:?Arial,Helvetica;background:?#F2F2F2; }

    flexible方案(與上面不同的地方)

    body {min-width: 320px;max-width: 750px;/* flexible劃分了10等份 */width: 10rem;margin: 0 auto;line-height: 1.5;font-family: Arial, Helvetica;background: #f2f2f2; }@media screen and (min-width: 750px) {html {font-size: 75px!important;} }

    黑馬面面

    一、目的

  • 了解移動(dòng)端頁面開發(fā)流程

  • 掌握移動(dòng)端常見布局思路

  • 1.1 技術(shù)方案

    1. 彈性盒子 + rem + LESS 4. 最小適配設(shè)備為iphone5 320px 最大設(shè)配設(shè)備為iphone8plus(ipad能正常查看內(nèi)容即可)

    1.2 代碼規(guī)范

    1. 類名語義化,盡量精短、明確,必須以字母開頭命名,且全部字母為小寫,單詞之間統(tǒng)一使用下劃線“_” 連接 2. 類名嵌套層次盡量不超過三層 3. 盡量避免直接使用元素選擇器 4. 屬性書寫順序布局定位屬性:display / position / float / clear / visibility / overflow尺寸屬性:width / height / margin / padding / border / background文本屬性:color / font / text-decoration / text-align / vertical-align其他屬性(CSS3):content / cursor / border-radius / box-shadow / text-shadow 5. 避免使用id選擇器 6. 避免使用通配符*和!important

    1.2 目錄規(guī)范

    項(xiàng)目文件夾:heimamm樣式文件夾:css業(yè)務(wù)類圖片文件夾:images樣式類圖片文件夾: icons字體類文件夾: fonts

    二、流程開發(fā)

    2.1 藍(lán)湖/摹客協(xié)作平臺(tái)

    • UI設(shè)計(jì)師 psd效果圖完成后,會(huì)上傳到藍(lán)湖//摹客里面,同時(shí)會(huì)拉前端工程師進(jìn)入開發(fā)

    • 大部分情況下,UI會(huì)把圖片按照前端設(shè)計(jì)要求給切好

    • UI設(shè)計(jì)師 上傳藍(lán)湖到或者/摹客(了解)

    1. /摹客官網(wǎng)地址: https://www.mockplus.cn/ 注冊一個(gè)賬號(hào) 2. 下載moke ps插件 3. PS 安裝/摹客/藍(lán)湖插件 3. 打開PS/摹客/藍(lán)湖插件 4. 上傳(需要切圖,需要先標(biāo)注切圖) 5. 查看項(xiàng)目 6. 邀請(qǐng)成員進(jìn)入(分享按鈕,鏈接地址)
    • 前端設(shè)計(jì)師可以直接/摹客/藍(lán)湖測量取值

    2.2 適配方案

    • flex 布局

    • 百分比布局

    • rem布局

    • vw/vh布局

    • 響應(yīng)式布局

    • 本次案例 flex + rem + + flexible.js + LESS

    2.3 初始化文件

    • 引入 normalize.css

    • less 中 初始化body樣式

    • 約束范圍

    • @media screen and (min-width: 750px) {html {font-size: 37.5px !important;} }

    2.4 布局模塊

  • 頭部模塊 .header 高度為 80px

  • nav 模塊制作 多用 flex

  • 充電學(xué)習(xí) 陰影

    box-shadow: 0 0px 10px rgba(0, 0, 0, 0.1)
  • 2.5 swiper 插件使用

    官網(wǎng)地址:Swiper中文網(wǎng)-輪播圖幻燈片js插件,H5頁面前端開發(fā)

    • 下載需要的css和js文件 html頁面中 引入相關(guān)文件

    • 官網(wǎng)找到類似案例,復(fù)制html結(jié)構(gòu),css樣式 js 語法

    • 根據(jù)需求定制修改模塊

    2.6 圖標(biāo)字體上傳下載

    上傳步驟:

  • 讓UI美工準(zhǔn)備好 圖標(biāo)字體(必須是svg格式)

  • 點(diǎn)上傳按鈕(保留顏色并提交)

  • 生成之后加入購物車即可

  • 點(diǎn)擊下載 --- 下載代碼

  • 小技巧: 如何批量下載全部字體圖標(biāo)呢?

    var span = document.querySelectorAll('.icon-cover'); for (var i = 0, len = span.length; i < len; i++) {console.log(span[i].querySelector('span').click()); }

    2.7 上傳碼云并發(fā)布部署靜態(tài)網(wǎng)站

    準(zhǔn)備工作: 需要下載git軟件 需要碼云注冊賬號(hào)

    git 可以把我們的本地網(wǎng)站提交上傳到遠(yuǎn)程倉庫(碼云 gitee)里面 類似以前的 ftp

    碼云 就是遠(yuǎn)程倉庫, 類似服務(wù)器

  • 碼云創(chuàng)建新的倉庫。 heimamm

  • 利用git 提交 把本地網(wǎng)站提交到 碼云新建的倉庫里面

    • 在網(wǎng)站根目錄右鍵-- Git Bash Here

    • 如果是第一次利用git提交,請(qǐng)配置好全局選項(xiàng)

      git config --global user.name "用戶名" git config --global user.email "你的郵箱地址"
    • 初始化倉庫

      git init
    • 把本地文件放到暫存區(qū)

      git add .
    • 把本地文件放到本地倉庫里面

      git commit -m '提交黑馬面面網(wǎng)站'
    • 鏈接遠(yuǎn)程倉庫

      git remote add origin 你新建的倉庫地址
    • 把本地倉庫的文件推送到遠(yuǎn)程倉庫 push

      git push -u origin master
  • 碼云部署發(fā)布靜態(tài)網(wǎng)站

    • 在當(dāng)前倉庫中,點(diǎn)擊 “服務(wù)” 菜單

    • 選擇 Gitee Pages

    • 選擇 “啟動(dòng)” 按鈕

    • 稍等之后,會(huì)拿到地址,就可以利用這個(gè)地址來預(yù)覽網(wǎng)頁了

    • 也可以繼續(xù)利用 草料二維碼 把網(wǎng)址生成二維碼 草料二維碼生成器

  • 響應(yīng)式布局

    響應(yīng)式開發(fā)

    響應(yīng)式開發(fā)原理

    使用媒體查詢針對(duì)不同寬度的設(shè)備進(jìn)行布局和樣式的設(shè)置,從而適配不同設(shè)備

    設(shè)備劃分尺寸區(qū)間
    超小屏幕(手機(jī))< 768px
    小屏設(shè)備(平板)>= 768px ~ < 992px
    中等屏幕(桌面顯示器)>= 992px ~ <1200px
    寬屏設(shè)備(大桌面顯示器)>= 1200px

    響應(yīng)式布局容器

    響應(yīng)式需要一個(gè)父級(jí)做為布局容器(一般叫做container),來配合子級(jí)元素來實(shí)現(xiàn)變化效果

    • 原理:在不同屏幕下,通過媒體查詢來改變這個(gè)布局容器的大小,再改變里面子元素的排列方式和大小,從而實(shí)現(xiàn)不同屏幕下,看到不同的頁面布局和樣式變化

    • 響應(yīng)式尺寸劃分:

      • 超小屏幕(手機(jī),小于 768px):設(shè)置寬度為 100%

      • 小屏幕(平板,大于等于 768px):設(shè)置寬度為 750px

      • 中等屏幕(桌面顯示器,大于等于 992px):寬度設(shè)置為 970px

      • 大屏幕(大桌面顯示器,大于等于 1200px):寬度設(shè)置為 1170px

      • 也可以根據(jù)實(shí)際情況自己定義劃分

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>.container {height: 150px;background-color: pink;margin: 0 auto;}/* 1. 超小屏幕下 小于 768 布局容器的寬度為 100% */@media screen and (max-width: 767px) {.container {width: 100%;}}/* 2. 小屏幕下 大于等于768 布局容器改為 750px */@media screen and (min-width: 768px) {.container {width: 750px;}}/* 3. 中等屏幕下 大于等于 992px 布局容器修改為 970px */@media screen and (min-width: 992px) {.container {width: 970px;}}/* 4. 大屏幕下 大于等于1200 布局容器修改為 1170 */@media screen and (min-width: 1200px) {.container {width: 1170px;}}</style> </head><body><!-- 響應(yīng)式開發(fā)里面,首先需要一個(gè)布局容器 --><div class="container"></div> </body></html>

    響應(yīng)式導(dǎo)航

    ① 當(dāng)屏幕大于等于768像素,給container寬度為750px ②container里面包含8個(gè)小li盒子,每個(gè)盒子的寬度定為93.75(750/8), 高度為30px,浮動(dòng)一行顯示。 ③ 當(dāng)屏幕縮放,寬度小于768像素的時(shí)候, container寬度修改為100%寬度。 ④container里面的8個(gè)小li,寬度修改為 33.33%,這樣一行就只能顯示3個(gè)小li ,剩余下行顯示

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>* {margin: 0;padding: 0;}ul {list-style: none;}.container {width: 750px;margin: 0 auto;}.container ul li {float: left;width: 93.75px;height: 30px;background-color: green;}@media screen and (max-width: 767px) {.container {width: 100%;}.container ul li {width: 33.33%;}}</style> </head><body><div class="container"><ul><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li><li>導(dǎo)航欄</li></ul></div> </body></html>

    Bootstrap前端開發(fā)框架

    Bootstrap 簡介

    Bootstrap 來自 Twitter(推特),是目前最受歡迎的前端框架。Bootstrap 是基于 HTML、CSS 和 JAVASCRIPT 的,它簡潔靈活,使得Web開發(fā)更加快捷

    • 網(wǎng)址

      • 中文官網(wǎng):Bootstrap中文網(wǎng)

      • 官網(wǎng):Bootstrap · The most popular HTML, CSS, and JS library in the world.

      • 推薦使用:Bootstrap v3 中文文檔 · Bootstrap 是最受歡迎的 HTML、CSS 和 JavaScript 框架,用于開發(fā)響應(yīng)式布局、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目。 | Bootstrap 中文網(wǎng)

    • 框架:顧名思義就是一套架構(gòu),它有一套比較完整的網(wǎng)頁功能解決方案,而且控制權(quán)在框架本身,有預(yù)制樣式庫、組件和插件。使用者要按照框架所規(guī)定的某種規(guī)范進(jìn)行開發(fā)

    • 優(yōu)點(diǎn):

      • 標(biāo)準(zhǔn)化的html+css編碼規(guī)范

      • 提供了一套簡潔、直觀、強(qiáng)悍的組件

      • 有自己的生態(tài)圈,不斷的更新迭代

      • 讓開發(fā)更簡單,提高了開發(fā)的效率

    • 版本:

      • 2.x.x:停止維護(hù),兼容性好,代碼不夠簡潔,功能不夠完善。

      • 3.x.x:目前使用最多,穩(wěn)定,但是放棄了 IE6-IE7。對(duì) IE8 支持但是界面效果不好,偏向用于開發(fā)響應(yīng)式布局、移動(dòng)設(shè)備優(yōu)先的 WEB 項(xiàng)目。

      • 4.x.x :最新版,目前還不是很流行

    Bootstrap 使用

    控制權(quán)在框架本身,使用者要按照框架所規(guī)定的某種規(guī)范進(jìn)行開發(fā)

    • Bootstrap 使用四步曲:

  • 創(chuàng)建文件夾結(jié)構(gòu):新建bootstrap文件夾,把下載下來的里面三個(gè)文件夾復(fù)制進(jìn)去

    • bootstrap.min.css:經(jīng)過壓縮的

  • 創(chuàng)建 html 骨架結(jié)構(gòu)

    • 基本模板

    <!doctype html> <html lang="zh-CN"><head><meta charset="utf-8"><!--要求當(dāng)前網(wǎng)頁使用IE瀏覽器最高版本的內(nèi)核來渲染--><meta http-equiv="X-UA-Compatible" content="IE=edge"><!--視口的設(shè)置:視口的寬度和設(shè)備一致,默認(rèn)的縮放比例和PC端一致,用戶不能自行縮放--> <meta name="viewport" content="width=device-width, initial-scale=1"><!-- 上述3個(gè)meta標(biāo)簽*必須*放在最前面,任何其他內(nèi)容都*必須*跟隨其后! --><title>Bootstrap 101 Template</title><!-- Bootstrap --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu" crossorigin="anonymous"><!-- HTML5 shim 和 Respond.js 是為了讓 IE8 支持 HTML5 元素和媒體查詢(media queries)功能 --><!-- 警告:通過 file:// 協(xié)議(就是直接將 html 頁面拖拽到瀏覽器中)訪問頁面時(shí) Respond.js 不起作用 --><!--解決ie9以下瀏覽器對(duì)html5新增標(biāo)簽的不識(shí)別,并導(dǎo)致CSS不起作用的問題--><!--解決ie9以下瀏覽器對(duì) css3 Media Query 的不識(shí)別 --><!--[if lt IE 9]> <script src="https://cdn.jsdelivr.net/npm/html5shiv@3.7.3/dist/html5shiv.min.js"></script> <script src="https://cdn.jsdelivr.net/npm/respond.js@1.4.2/dest/respond.min.js"></script><![endif]--></head><body><h1>你好,世界!</h1><!-- jQuery (Bootstrap 的所有 JavaScript 插件都依賴 jQuery,所以必須放在前邊) --><script src="https://cdn.jsdelivr.net/npm/jquery@1.12.4/dist/jquery.min.js" integrity="sha384-nvAa0+6Qg9clwYCGGPpDQLVpLNn0fRaROjHqs13t4Ggj3Ez50XnGQqc/r8MhnRDZ" crossorigin="anonymous"></script><!-- 加載 Bootstrap 的所有 JavaScript 插件。也可以根據(jù)需要只加載單個(gè)插件。 --><script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd" crossorigin="anonymous"></script></body> </html>
  • 引入相關(guān)樣式文件

  • 書寫內(nèi)容

    • 直接拿Bootstrap 預(yù)先定義好的樣式來使用

      • 通過類來控制,可以把類添加到想要效果的元素上

    • 修改Bootstrap 原來的樣式,注意權(quán)重問題

      • 自己寫一個(gè)新的類名,寫樣式,覆蓋原來的

    • 學(xué)好Bootstrap 的關(guān)鍵在于知道它定義了哪些樣式,以及這些樣式能實(shí)現(xiàn)什么樣的效果

    布局容器

    Bootstrap 需要為頁面內(nèi)容和柵格系統(tǒng)包裹一個(gè) .container 容器,它提供了兩個(gè)作此用處的類

    • container類

      • 響應(yīng)式布局的容器 固定寬度

      • 大屏 ( >=1200px) 寬度定為 1170px

      • 中屏 ( >=992px) 寬度定為 970px

      • 小屏 ( >=768px) 寬度定為 750px

      • 超小屏 (100%)

    • container-fluid類

      • 流式布局容器 百分百寬度

      • 占據(jù)全部視口(viewport)的容器

    Bootstrap柵格系統(tǒng)

    柵格系統(tǒng)簡介

    柵格系統(tǒng)英文為“grid systems”,也有人翻譯為“網(wǎng)格系統(tǒng)”,它是指將頁面布局劃分為等寬的列,然后通過列數(shù) 的定義來模塊化頁面布局。

    • Bootstrap 提供了一套響應(yīng)式、移動(dòng)設(shè)備優(yōu)先的流式柵格系統(tǒng),隨著屏幕或視口(viewport)尺寸的增加,系統(tǒng)會(huì)自動(dòng)分為最多12列

    • rem是把整個(gè)屏幕(window)分成多少等份,而柵格系統(tǒng)是把頁面分成等份,即把container分成12等份

    • Bootstrap里面container是固定的,但是在不同屏幕下,container的寬度不同,再把container分為12等份

    柵格選項(xiàng)參數(shù)

    柵格系統(tǒng)用于通過一系列的行(row)與列(column)的組合來創(chuàng)建頁面布局,內(nèi)容就可以放入這些創(chuàng)建好的布局中

    超小屏幕(手機(jī))< 768px小屏設(shè)備(平板)>=768px中等屏幕(桌面顯示器)>=992px寬屏設(shè)備(大桌面顯示器)>=1200px
    .container 最大寬度自動(dòng)(100%)750px970px1170px
    類前綴.col-xs-.col-sm-.col-md-.col-lg-
    列(column)數(shù)12121212
    • 按照不同屏幕劃分為1~12 等份

      • 每一個(gè)元素占了幾份

    • 行(row)必須放到container布局容器里

    • 行(row)可以去除父容器作用15px的邊距

    • 想實(shí)現(xiàn)列的平均劃分,需要給列添加類前綴

      • xs-extra small:超小; sm-small:小; md-medium:中等; lg-large:大;

    • 列(column)大于 12,多余的“列(column)”所在的元素將被作為一個(gè)整體另起一行排列

    • 每一列默認(rèn)有左右15像素的padding

    • 可以同時(shí)為一列指定多個(gè)設(shè)備的類名,以便劃分不同份數(shù) 例如 class="col-md-4 col-sm-6"

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><!-- 一定不要忘記引入bootstrap 的樣式文件 --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><title>Document</title><style>[class^="col"] {border: 1px solid #ccc;}.row:nth-child(1) {background-color: pink;}</style> </head><body><div class="container"><div class="row"><!-- 寬屏里一個(gè)占3份,有4個(gè)盒子 --><div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">1</div><div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">2</div><div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">3</div><div class="col-lg-3 col-md-4 col-sm-6 col-xs-12">4</div></div><!-- 如果孩子的份數(shù)相加等于12,則孩子能占滿整個(gè)container的寬度 --><div class="row"><!-- 第一個(gè)盒子寬 --><div class="col-lg-6">1</div><div class="col-lg-2">2</div><div class="col-lg-2">3</div><div class="col-lg-2">4</div></div><!-- 如果孩子的份數(shù)相加小于12,則占不滿整個(gè)container的寬度,會(huì)有空白 --><div class="row"><div class="col-lg-6">1</div><div class="col-lg-2">2</div><div class="col-lg-2">3</div><div class="col-lg-1">4</div></div><!-- 如果孩子的份數(shù)相加大于12,則多余的那一列會(huì)另起一行顯示 --><div class="row"><div class="col-lg-6">1</div><div class="col-lg-2">2</div><div class="col-lg-2">3</div><div class="col-lg-3">4</div></div></div> </body></html>

    列嵌套

    柵格系統(tǒng)內(nèi)置的柵格系統(tǒng)將內(nèi)容再次嵌套。簡單理解就是一個(gè)列內(nèi)再分成若干份小列。可以通過添加一個(gè)新的 .row 元素和一系列 .col-sm-* 元素到已經(jīng)存在的 .col-sm-* 元素內(nèi)

    • 列嵌套最好加1個(gè)行row,這樣可以取消父元素的padding值,而且高度自動(dòng)和父級(jí)一樣高

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><!-- 一定不要忘記引入bootstrap 的樣式文件 --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><title>Document</title><style>.row>div {height: 50px;background-color: pink;/* margin: 0 10px; */}</style> </head><body><div class="container"><div class="row"><div class="col-md-4"><!-- 列嵌套最好加1個(gè)行 row 這樣可以取消父元素的padding值 而且高度自動(dòng)和父級(jí)一樣高 --><div class="row"><div class="col-md-4">a</div><div class="col-md-8">b</div></div></div><div class="col-md-4">2</div><div class="col-md-4">3</div></div></div> </body></html>

    列偏移

    使用 .col-md-offset-* 類可以將列向右側(cè)偏移。這些類實(shí)際是通過使用 * 選擇器為當(dāng)前元素增加了左側(cè)的邊距(margin)

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><!-- 一定不要忘記引入bootstrap 的樣式文件 --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><title>Document</title><style>.row div {height: 50px;background-color: pink;}</style> </head><body><div class="container"><div class="row"><div class="col-md-3">左側(cè)</div><!-- 偏移的份數(shù)就是(12 - 兩個(gè)盒子的份數(shù) = 6) --><div class="col-md-3 col-md-offset-6">右側(cè)</div></div><div class="row"><!-- 如果只有一個(gè)盒子,那么就偏移 = (12 - 8) /2 --><div class="col-md-8 col-md-offset-2">中間盒子</div></div></div> </body></html>

    列排序

    通過使用 .col-md-push-(往右推)* 和 .col-md-pull-(往左拉)* 類就可以很容易的改變列(column)的順序

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><!-- 一定不要忘記引入bootstrap 的樣式文件 --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><title>Document</title><style>.row div {height: 50px;background-color: pink;}</style> </head><body><div class="container"><div class="row"><div class="col-md-4 col-md-push-8">左側(cè)</div><div class="col-md-8 col-md-pull-4">右側(cè)</div></div></div> </body></html>

    響應(yīng)式工具

    為了加快對(duì)移動(dòng)設(shè)備友好的頁面開發(fā)工作,利用媒體查詢功能,并使用這些工具類可以方便的針對(duì)不同設(shè)備展示 或隱藏頁面內(nèi)容

    類名超小屏小屏中屏大屏
    .hidden-xs隱藏可見可見可見
    .hidden-sm可見隱藏可見可見
    .hidden-md可見可見隱藏可見
    .hidden-lg可見可見可見隱藏
    • 與之相反的是visible-xs visible-sm visible-md visible-lg是顯示某個(gè)頁面的內(nèi)容

    Bootstrap 其他(按鈕、表單、表格) 請(qǐng)參考Bootstrap文檔

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><!--[if lt IE 9]><script src="https://oss.maxcdn.com/html5shiv/3.7.2/html5shiv.min.js"></script><script src="https://oss.maxcdn.com/respond/1.4.2/respond.min.js"></script><![endif]--><!-- 一定不要忘記引入bootstrap 的樣式文件 --><link rel="stylesheet" href="bootstrap/css/bootstrap.min.css"><title>Document</title><style>.row div {height: 300px;background-color: purple;}.row div:nth-child(3) {background-color: pink;}span {font-size: 50px;color: #fff;}</style> </head><body><div class="container"><div class="row"><div class="col-xs-3"><!-- 僅在大屏幕才顯示 --><span class="visible-lg">我會(huì)顯示哦</span></div><div class="col-xs-3">2</div><div class="col-xs-3 hidden-md hidden-xs">我會(huì)變魔術(shù)哦</div><div class="col-xs-3">4</div></div></div> </body></html>

    阿里百秀移動(dòng)端首頁

  • 技術(shù)選型

    • 方案:響應(yīng)式頁面開發(fā)方案

    • 技術(shù):bootstrap框架

    • 設(shè)計(jì)圖: 本設(shè)計(jì)圖采用 1280px 設(shè)計(jì)尺寸

  • 頁面布局分析

  • 屏幕劃分分析

  • ① 通過屏幕縮放發(fā)現(xiàn),中屏幕和大屏幕布局是一致的。 因此列定義為 col-md- 就可以了,md 是大于等于970 以上的 ②通過屏幕縮放發(fā)現(xiàn),小屏幕布局發(fā)生變化,因此需要為小屏幕根據(jù)需求改變布局 ③ 通過屏幕縮放發(fā)現(xiàn), 超小屏幕布局又發(fā)生變化,因此需要為超小屏幕根據(jù)需求改變布局 ④ 策略: 先布局md以上的pc端布局,最后根據(jù)實(shí)際需求在修改小屏幕和超小屏幕的特殊布局樣式

  • container 寬度修改

  • 因?yàn)楸拘Ч麍D采取 1280的寬度, 而Bootstrap 里面 container寬度 最大為 1170px,因此需要手動(dòng)改下container寬度

    /* 修改container的最大寬度為 1280 (根據(jù)設(shè)計(jì)稿來走的) */@media screen and (min-width: 1280px) {.container {width: 1280px;} }
  • 輪播圖模塊

  • 引入jquery的js文件和bootstrap的js文件

  • <!-- 先引入jquery js文件 --><script src="bootstrap/js/jquery.min.js"></script><script src="bootstrap/js/bootstrap.min.js"></script>

    2. 復(fù)制結(jié)構(gòu)進(jìn)去

    3. 把復(fù)制進(jìn)去的盒子和里面的圖片的高和寬設(shè)置成與父盒子一致

    4. 把下面的caption文字寫進(jìn)去并修改樣式

    5. 把mothods里面的定時(shí)播放js復(fù)制進(jìn)去

    vw/vh移動(dòng)端布局

    移動(dòng)端布局主要使用flex布局,為了實(shí)現(xiàn)可以適配移動(dòng)端,頁面元素的寬度和高度可以等比例縮放,需要溪東段適配有如下方案:

    • rem(市場比較常見)

      • 需要不斷修改html文字大小

      • 需要媒體查詢media

      • 需要flexible.js

    • vw/vh(未來趨勢)

      • 省去各種判斷和修改

      • 如b站等

    vw/vh簡介

    • 是一個(gè)相對(duì)單位(類似于em和rem相對(duì)單位)

      • vw是viewport width 視口寬度單位

      • vh是viewport height 視口高度單位

    • 相對(duì)視口的尺寸計(jì)算結(jié)果

      • 1vw = 1/100視口寬度

      • 1vh = 1/100視口高度

      • 例如,當(dāng)前屏幕視口是375像素,則1vw就是3.75像素,如果當(dāng)前視口為414,則1vw就是4.14像素

    • 與百分比有區(qū)別,百分比%是相對(duì)于父元素來說的,而vw和vh總是針對(duì)于當(dāng)前視口來說的

    vw/vh使用

    • 元素單位直接使用新單位vw/vh即可

    • vw/vh是相對(duì)單位,所以不同視口(屏幕)下,寬高一起變化完成適配

    <style>div {width: 10vw;height: 10vh;background-color: pink;} </style><body><div></div> </body>
    • 還原設(shè)計(jì)稿:如果設(shè)計(jì)稿按照iPhone6/7/8來設(shè)計(jì),有個(gè)盒子是50px*50px

      • 美工是按照750px做的設(shè)計(jì)稿,做vw的時(shí)候是按照視口寬度來做的(iPhone6/7/8是375px)

      • Pxcook切換到'2x'模式,把它當(dāng)做一個(gè)二倍圖,然后選'vw/vh'

      • 那么1vw就是375/100=3.75px

      • 盒子寬高50/3.75=13.3333vw

    • 注意:

      • 因?yàn)樯婕暗酱罅康某?#xff0c;所以常搭配less使用

      • 本質(zhì)是根據(jù)視口寬度來等比例縮放頁面元素高度和寬度的,所以開發(fā)中使用vw就基本夠了,vh很少使用

      • 兼容性:網(wǎng)站 Can I use... Support tables for HTML5, CSS3, etc

    • Vscode插件:px2vw

      • 點(diǎn)設(shè)置圖標(biāo),'拓展設(shè)置',修改design width至我們需要的數(shù)值(這里是375)

    移動(dòng)端網(wǎng)頁特效(JavaScript)

    觸屏事件

    觸屏事件概述

    移動(dòng)端瀏覽器兼容性較好,我們不需要考慮以前 JS 的兼容性問題,可以放心的使用原生 JS 書寫效果,但是移動(dòng) 端也有自己獨(dú)特的地方。比如觸屏事件 touch(也稱觸摸事件),Android 和 IOS 都有

    • touch 對(duì)象代表一個(gè)觸摸點(diǎn)。觸摸點(diǎn)可能是一根手指,也可能是一根觸摸筆。觸屏事件可響應(yīng)用戶手指(或觸控筆)對(duì)屏幕或者觸控板操作

    觸屏touch事件說明
    touchstart手指觸摸到一個(gè)DOM元素時(shí)觸發(fā)
    touchmove手指在一個(gè)DOM元素上滑動(dòng)時(shí)觸發(fā)
    touchend手指從一個(gè)DOM元素上移開時(shí)觸發(fā)

    觸摸事件對(duì)象(TouchEvent)

    TouchEvent 是一類描述手指在觸摸平面(觸摸屏、觸摸板等)的狀態(tài)變化的事件。這類事件用于描述一個(gè)或多 個(gè)觸點(diǎn),使開發(fā)者可以檢測觸點(diǎn)的移動(dòng),觸點(diǎn)的增加和減少,等等

    • touchstart、touchmove、touchend 三個(gè)事件都會(huì)各自有事件對(duì)象

    觸摸列表說明
    touches正在觸摸屏幕的所有手指的一個(gè)列表
    targetTouches正在觸摸當(dāng)前DOM元素的手指列表(如果偵聽的是一個(gè)DOM元素,與touches是一樣的)
    changedTouches手指狀態(tài)發(fā)生了改變的列表,從無到有,或從有到無變化

    因?yàn)槠綍r(shí)都是給元素注冊觸摸事件,所以重點(diǎn)記住 targetTocuhes

    <style>div {width: 100px;height: 100px;background-color: pink;}</style> </head><body><div></div><script>// 觸摸事件對(duì)象// 1. 獲取元素// 2. 手指觸摸DOM元素事件var div = document.querySelector('div');div.addEventListener('touchstart', function(e) {// console.log(e);// touches 正在觸摸屏幕的所有手指的列表 // targetTouches 正在觸摸當(dāng)前DOM元素的手指列表// 如果偵聽的是一個(gè)DOM元素,他們兩個(gè)是一樣的// changedTouches 手指狀態(tài)發(fā)生了改變的列表 從無到有 或者 從有到無// 因?yàn)橐话愣际怯|摸元素,所以最經(jīng)常使用的是 targetTouchesconsole.log(e.targetTouches[0]);// targetTouches[0] 就可以得到正在觸摸dom元素的第一個(gè)手指的相關(guān)信息,比如手指的坐標(biāo)等});// 3. 手指在DOM元素身上移動(dòng)事件div.addEventListener('touchmove', function() {});// 4. 手指離開DOM元素事件div.addEventListener('touchend', function(e) {// console.log(e);// 當(dāng)手指離開屏幕的時(shí)候,就沒有了 touches 和 targetTouches 列表// 但是會(huì)有 changedTouches});</script> </body>

    移動(dòng)端拖動(dòng)元素

    touchstart、touchmove、touchend 可以實(shí)現(xiàn)拖動(dòng)元素,但是拖動(dòng)元素需要當(dāng)前手指的坐標(biāo)值,可以使用 targetTouches[0] 里面的pageX和pageY

    • 移動(dòng)端拖動(dòng)的原理: 手指移動(dòng)中,計(jì)算出手指移動(dòng)的距離。然后用盒子原來的位置 + 手指移動(dòng)的距離

    • 手指移動(dòng)的距離: 手指滑動(dòng)中的位置 減 手指剛開始觸摸的位置

    • 拖動(dòng)元素三步曲: (1) 觸摸元素 touchstart: 獲取手指初始坐標(biāo),同時(shí)獲得盒子原來的位置 (2) 移動(dòng)手指 touchmove: 計(jì)算手指的滑動(dòng)距離,并且移動(dòng)盒子 (3) 離開手指 touchend

    • 注意: 手指移動(dòng)也會(huì)觸發(fā)滾動(dòng)屏幕所以這里要阻止默認(rèn)的屏幕滾動(dòng)e.preventDefault();

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title><style>div {position: absolute;left: 0;width: 100px;height: 100px;background-color: pink;}</style> </head><body><div></div><script>// (1) 觸摸元素 touchstart: 獲取手指初始坐標(biāo),同時(shí)獲得盒子原來的位置// (2) 移動(dòng)手指 touchmove: 計(jì)算手指的滑動(dòng)距離,并且移動(dòng)盒子// (3) 離開手指 touchend:var div = document.querySelector('div');var startX = 0; //獲取手指初始坐標(biāo)var startY = 0;var x = 0; //獲得盒子原來的位置var y = 0;div.addEventListener('touchstart', function(e) {// 獲取手指初始坐標(biāo)startX = e.targetTouches[0].pageX;startY = e.targetTouches[0].pageY;x = this.offsetLeft;y = this.offsetTop;});div.addEventListener('touchmove', function(e) {// 計(jì)算手指的移動(dòng)距離: 手指移動(dòng)之后的坐標(biāo)減去手指初始的坐標(biāo)var moveX = e.targetTouches[0].pageX - startX;var moveY = e.targetTouches[0].pageY - startY;// 移動(dòng)我們的盒子 盒子原來的位置 + 手指移動(dòng)的距離this.style.left = x + moveX + 'px';this.style.top = y + moveY + 'px';e.preventDefault(); // 阻止屏幕滾動(dòng)的默認(rèn)行為});</script> </body></html>

    classList 屬性

    classList屬性是HTML5新增的一個(gè)屬性,返回元素的類名。但是ie10以上版本支持。該屬性用于在元素中添加,移除及切換 CSS 類

    • 查看元素所有類名:console.log(element.classList);

    • 查看元素的第一個(gè)類名:console.log(element.classList[0]);

    • 添加類:element.classList.add(’類名’); 在后面追加類名,不會(huì)覆蓋以前的類名

    • 移除類:element.classList.remove(’類名’);

    • 切換類:element.classList.toggle(’類名’);原來有這個(gè)類名,就刪掉;原來沒有這個(gè)類名,就加上

    • 注意:以上方法里面,所有類名都不帶點(diǎn)

    移動(dòng)端輪播圖

    移動(dòng)端輪播圖功能和基本PC端一致。

    • 可以自動(dòng)播放圖片

    • 手指可以拖動(dòng)播放輪播圖

  • 自動(dòng)播放功能

    • 開啟定時(shí)器

    • 移動(dòng)端移動(dòng),可以使用translate移動(dòng)

    • 想要圖片優(yōu)雅地移動(dòng),要添加過渡效果(移動(dòng)端不需要考慮兼容性,所以用css3的transform來做)

    • 和pc端輪播圖相同,先復(fù)制第一張圖片到最后一個(gè)

    • 移動(dòng)端手指右滑會(huì)劃出東西,所以也要把最后一張圖片復(fù)制到第一個(gè)

  • 自動(dòng)播放功能-無縫滾動(dòng)

    • 注意,判斷條件是要等圖片滾動(dòng)完畢再去判斷,就是過渡完成后判斷

      • 此時(shí)需要添加檢測過渡完成事件transitionend

    • 判斷條件: 如果索引號(hào)等于3說明走到最后一張圖片,此時(shí)索引號(hào)要復(fù)原為 0

      • 此時(shí)圖片去掉過渡效果,然后移動(dòng)

    • 如果索引號(hào)小于0, 說明是倒著走, 索引號(hào)等于2

      • 此時(shí)圖片,去掉過渡效果,然后移動(dòng)

  • 小圓點(diǎn)跟隨變化效果

    • 把ol里面li帶有current類名的選出來去掉類名(remove)

    • 讓當(dāng)前索引號(hào)的小li 加上 current (add)

    • 但是,是等著過渡結(jié)束之后變化,所以這個(gè)寫到 transitionend事件里面

  • 手指滑動(dòng)輪播圖

    • 本質(zhì)就是ul跟隨手指移動(dòng),簡單說就是移動(dòng)端拖動(dòng)元素

    • 觸摸元素 touchstart: 獲取手指初始坐標(biāo)

    • 移動(dòng)手指 touchmove: 計(jì)算手指的滑動(dòng)距離,并且移動(dòng)盒子

    • 離開手指 touchend: 根據(jù)滑動(dòng)的距離分不同的情況

    • 如果移動(dòng)距離小于 某個(gè)像素(這里是50px) 就回彈原來位置

    • 如果移動(dòng)距離大于某個(gè)像素就上一張下一張滑動(dòng)。

    • 滑動(dòng)也分為左滑動(dòng)和右滑動(dòng) 判斷的標(biāo)準(zhǔn)是 移動(dòng)距離正負(fù) 如果是負(fù)值就是左滑 反之右滑

    • 如果是左滑 就播放下一張 (index++)

    • 如果是右滑 就播放上一張 (index--)

    click 延時(shí)解決方案

    移動(dòng)端 click 事件會(huì)有 300ms 的延時(shí),原因是移動(dòng)端屏幕雙擊會(huì)縮放(double tap to zoom) 頁面。

    • 解決方案:

      • 禁用縮放。 瀏覽器禁用默認(rèn)的雙擊縮放行為并且去掉 300ms 的點(diǎn)擊延遲:<meta name="viewport" content="user-scalable=no">

      • 利用touch事件自己封裝這個(gè)事件解決 300ms 延遲

        • 原理:

        • 當(dāng)手指觸摸屏幕,記錄當(dāng)前觸摸時(shí)間

        • 當(dāng)手指離開屏幕, 用離開的時(shí)間減去觸摸的時(shí)間

        • 如果時(shí)間小于150ms,并且沒有滑動(dòng)過屏幕, 那么我們就定義為點(diǎn)擊

      • 使用插件: fastclick 插件解決 300ms 延遲

    //封裝tap,解決click 300ms 延時(shí)function tap(obj, callback) {var isMove = false;var startTime = 0; // 記錄觸摸時(shí)候的時(shí)間變量obj.addEventListener('touchstart', function(e) {startTime = Date.now(); // 記錄觸摸時(shí)間});obj.addEventListener('touchmove', function(e) {isMove = true; // 看看是否有滑動(dòng),有滑動(dòng)算拖拽,不算點(diǎn)擊});obj.addEventListener('touchend', function(e) {if (!isMove && (Date.now() - startTime) < 150) { // 如果手指觸摸和離開時(shí)間小于150ms 算點(diǎn)擊callback && callback(); // 執(zhí)行回調(diào)函數(shù)}isMove = false; // 取反 重置startTime = 0;});} //調(diào)用tap(div, function() { // 執(zhí)行代碼 });

    移動(dòng)端常用開發(fā)插件

    JS 插件是js文件,它遵循一定規(guī)范編寫,方便程序展示效果,擁有特定功能且方便調(diào)用。如輪播圖和瀑布流插件。

    • 特點(diǎn):它一般是為了解決某個(gè)問題而專門存在,其功能單一,并且比較小。

      • 以前寫的animate.js 也算一個(gè)最簡單的插件

    • 使用:

    • 引入 js 插件文件

    • 按照規(guī)定語法使用

    fastclick插件

    解決 300ms 延遲。 使用延時(shí)

    • GitHub官網(wǎng)地址: GitHub - ftlabs/fastclick: Polyfill to remove click delays on browsers with touch UIs

    • 引入

    <script type='application/javascript' src='/path/to/fastclick.js'></script>
    • 在body里使用

    <script> if ('addEventListener' in document) {document.addEventListener('DOMContentLoaded', function() {FastClick.attach(document.body);}, false); } </script>

    Swiper 插件

    • 中文官網(wǎng)地址: Swiper中文網(wǎng)-輪播圖幻燈片js插件,H5頁面前端開發(fā)

    • 使用:

      • 下載Swiper壓縮包

      • 引入css文件和js文件(帶min的是壓縮過的,一般引入這個(gè)即可)(先引入swiper的js再引入自己的js)

      <!-- 引入我們的css初始化文件 --><link rel="stylesheet" href="css/normalize.css"><!-- 引入我們首頁的css --><link rel="stylesheet" href="css/index.css"><!-- 引入swipercss文件 --><link rel="stylesheet" href="css/swiper.min.css"><!-- 引入swiper js 文件 --><script src="js/swiper.min.js"></script><!-- 引入我們自己的js文件 --><script src="js/index.js"></script><title>Document</title>
      • 打開Swiper演示,找到想要的輪播圖樣式,在下載的文件里的demos文件里找到,打開html文件

      • 查看網(wǎng)頁源代碼,復(fù)制body里的結(jié)構(gòu)部分到需要的地方,注意不要更改里面的結(jié)構(gòu)和類名

      • 把里面的“silde1”等文字替換成我們所需的img

      • 繼續(xù)復(fù)制html文件里style里有關(guān)silde的css樣式部分到自己的index.css里

      • 繼續(xù)復(fù)制html文件里body里面的script部分到自己的index.js里

      • 自行修改css樣式或根據(jù)官網(wǎng)API文檔可以按照需求修改js的參數(shù)

    zy.media.js 移動(dòng)端視頻插件

    • H5提供了 video 標(biāo)簽,但是瀏覽器的支持情況不同。

    • 不同的視頻格式文件,可以通過source 解決。

    • 但是外觀樣式,還有暫停,播放,全屏等功能只能自己寫代碼解決。這個(gè)時(shí)候可以使用插件方式來制作。

    其他移動(dòng)端常見插件

    superslide: SuperSlide | TouchSlide 官方網(wǎng)站 大話主席

    iscroll: GitHub - cubiq/iscroll: Smooth scrolling for the web

    插件的使用總結(jié)

  • 確認(rèn)插件實(shí)現(xiàn)的功能

  • 去官網(wǎng)查看使用說明

  • 下載插件

  • 打開demo實(shí)例文件,查看需要引入的相關(guān)文件,并且引入

  • 復(fù)制demo實(shí)例文件中的結(jié)構(gòu)html,樣式css以及js代碼

  • 移動(dòng)端常用開發(fā)框架

    框架,顧名思義就是一套架構(gòu),它會(huì)基于自身的特點(diǎn)向用戶提供一套較為完整的解決方案。框架的控制權(quán)在框架 本身,使用者要按照框架所規(guī)定的某種規(guī)范進(jìn)行開發(fā)。

    • 前端常用的框架有 Bootstrap、Vue、Angular、React 等。既能開發(fā)PC端,也能開發(fā)移動(dòng)端

    • 前端常用的移動(dòng)端插件有swiper、superslide、iscroll等。

    • 插件一般是為了解決某個(gè)問題而專門存在,其功能單一,并且比較小。

    • 框架: 大而全,一整套解決方案

    • 插件: 小而專一,某個(gè)功能的解決方案

    Bootstrap(見響應(yīng)式布局里)

    Bootstrap 是一個(gè)簡潔、直觀、強(qiáng)悍的前端開發(fā)框架,它讓 web 開發(fā)更迅速、簡單。它能開發(fā)PC端,也能開發(fā)移動(dòng)端

    • Bootstrap JS插件使用步驟:

  • 引入相關(guān)js 文件

  • 復(fù)制HTML 結(jié)構(gòu)

  • 修改對(duì)應(yīng)樣式

  • 修改相應(yīng)JS 參數(shù)

  • 本地存儲(chǔ)

    隨著互聯(lián)網(wǎng)的快速發(fā)展,基于網(wǎng)頁的應(yīng)用越來越普遍,同時(shí)也變的越來越復(fù)雜,為了滿足各種各樣的需求,會(huì)經(jīng) 常性在本地存儲(chǔ)大量的數(shù)據(jù),HTML5規(guī)范提出了相關(guān)解決方案

    • 本地存儲(chǔ)特性

      • 數(shù)據(jù)存儲(chǔ)在用戶瀏覽器中

      • 設(shè)置、讀取方便、甚至頁面刷新不丟失數(shù)據(jù)

      • 容量較大,sessionStorage約5M、localStorage約20M

      • 只能存儲(chǔ)字符串,可以將對(duì)象JSON.stringify() 編碼后存儲(chǔ)

    window.sessionStorage

    • 生命周期為關(guān)閉瀏覽器窗口

    • 在同一個(gè)窗口(頁面)下數(shù)據(jù)可以共享

    • 以鍵值對(duì)的形式存儲(chǔ)使用

    • 查看:f12,點(diǎn)擊"application","Storage","Session Storage"

    存儲(chǔ)數(shù)據(jù):sessionStorage.setItem(key, value);

    獲取數(shù)據(jù):sessionStorage.getItem(key);

    刪除數(shù)據(jù):sessionStorage.removeItem(key);

    刪除所有數(shù)據(jù):sessionStorage.clear();

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><input type="text"><button class="set">存儲(chǔ)數(shù)據(jù)</button><button class="get">獲取數(shù)據(jù)</button><button class="remove">刪除數(shù)據(jù)</button><button class="del">清空所有數(shù)據(jù)</button><script>console.log(localStorage.getItem('username'));var ipt = document.querySelector('input');var set = document.querySelector('.set');var get = document.querySelector('.get');var remove = document.querySelector('.remove');var del = document.querySelector('.del');set.addEventListener('click', function() {// 點(diǎn)擊了之后,就可以把表單里面的值存儲(chǔ)起來var val = ipt.value;sessionStorage.setItem('uname', val);sessionStorage.setItem('pwd', val);});get.addEventListener('click', function() {// 點(diǎn)擊了之后,就可以把表單里面的值獲取過來console.log(sessionStorage.getItem('uname'));});remove.addEventListener('click', function() {// sessionStorage.removeItem('uname');});del.addEventListener('click', function() {// 點(diǎn)擊了之后,清除所有的sessionStorage.clear();});</script> </body></html>

    window.localStorage

    • 生命周期永久生效,除非手動(dòng)刪除,否則關(guān)閉頁面也會(huì)存在

    • 可以多窗口(頁面)共享(同一瀏覽器可以共享)

    • 以鍵值對(duì)的形式存儲(chǔ)使用

    存儲(chǔ)數(shù)據(jù):localStorage.setItem(key, value)

    獲取數(shù)據(jù):localStorage.getItem(key)

    刪除數(shù)據(jù):localStorage.removeItem(key)

    刪除所有數(shù)據(jù):localStorage.clear()

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><input type="text"><button class="set">存儲(chǔ)數(shù)據(jù)</button><button class="get">獲取數(shù)據(jù)</button><button class="remove">刪除數(shù)據(jù)</button><button class="del">清空所有數(shù)據(jù)</button><script>var ipt = document.querySelector('input');var set = document.querySelector('.set');var get = document.querySelector('.get');var remove = document.querySelector('.remove');var del = document.querySelector('.del');set.addEventListener('click', function() {var val = ipt.value;localStorage.setItem('username', val);})get.addEventListener('click', function() {console.log(localStorage.getItem('username'));})remove.addEventListener('click', function() {localStorage.removeItem('username');})del.addEventListener('click', function() {localStorage.clear();})</script> </body></html>

    記住用戶名

    如果勾選記住用戶名, 下次用戶打開瀏覽器,就在文本框里面自動(dòng)顯示上次登錄的用戶名

    ① 把數(shù)據(jù)存起來,用到本地存儲(chǔ) ② 關(guān)閉頁面,也可以顯示用戶名,所以用到localStorage ③ 打開頁面,先判斷是否有這個(gè)用戶名,如果有,就在表單里面顯示用戶名,并且勾選復(fù)選框 ④ 當(dāng)復(fù)選框發(fā)生改變的時(shí)候 change事件 ⑤ 如果勾選,就存儲(chǔ),否則就移除

    <!DOCTYPE html> <html lang="en"><head><meta charset="UTF-8"><meta name="viewport" content="width=device-width, initial-scale=1.0"><meta http-equiv="X-UA-Compatible" content="ie=edge"><title>Document</title> </head><body><input type="text" id="username"> <input type="checkbox" name="" id="remember"> 記住用戶名<script>var username = document.querySelector('#username');var remember = document.querySelector('#remember');if (localStorage.getItem('username')) {username.value = localStorage.getItem('username');remember.checked = true;}remember.addEventListener('change', function() {if (this.checked) {localStorage.setItem('username', username.value);} else {localStorage.removeItem('username');}})</script> </body>

    總結(jié)

    以上是生活随笔為你收集整理的前端学习笔记 - 移动端Web开发的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。