站快速加載,是提供良好用戶體驗(yàn)的前提。然而,網(wǎng)站功能的不斷增多,程序包的不斷臃腫,導(dǎo)致網(wǎng)站訪問(wèn)時(shí)較大的下載量,最終影響了響應(yīng)速度。那么如何減少代碼量,為網(wǎng)站減去過(guò)多負(fù)擔(dān)。
去掉不必要的字體
Web字體對(duì)設(shè)計(jì)進(jìn)行了重大改革,減少了基于圖像的字體的使用。使用傳統(tǒng)字體后,網(wǎng)頁(yè)的代碼量往往會(huì)增加數(shù)百KB。所以網(wǎng)站中這種字體的使用盡量控制在兩到三種以內(nèi)。訪問(wèn)速度可獲明顯提升。
檢查內(nèi)容結(jié)構(gòu)
首先,我們需要檢查內(nèi)容結(jié)構(gòu),設(shè)計(jì)完成后,經(jīng)常會(huì)發(fā)現(xiàn)一些內(nèi)容和設(shè)計(jì)不一致,可以做一些調(diào)整來(lái)編輯或刪除這些內(nèi)容。我們需要檢查內(nèi)容是否具有上下文聯(lián)系,如果不是,或者如果內(nèi)容太重,則快速解決問(wèn)題。嘗試找到解決方案,使內(nèi)容更具可讀性。然后可以嘗試使用小黑點(diǎn)、鏈接、圖像、標(biāo)題,將內(nèi)容分割成不同的區(qū)塊,以便可以更流暢地閱讀。
刪掉沒(méi)用的資源
網(wǎng)站一直在變革之中。如果你不再使用某組件,那就刪掉與之關(guān)聯(lián)的CSS和JavaScript。如果它們包含在一個(gè)單獨(dú)文件中,處理起來(lái)就會(huì)很簡(jiǎn)單。
lex自問(wèn)世以來(lái),受到各界的歡迎,因?yàn)椴徽摱嗝磸?fù)雜的布局,只要支持flex的瀏覽器,都能很容易的實(shí)現(xiàn),而且更加通俗易懂。這里我收集了幾個(gè)很優(yōu)秀的布局方案
Flex基礎(chǔ)知識(shí)點(diǎn)復(fù)習(xí)和鞏固
CSS 三欄布局技巧匯總:七種方法行走天下
什么?CSS選擇器是從右往左解析
CSS十五種方法教你如何居中一個(gè)元素
下面,就來(lái)看看Flex如何實(shí)現(xiàn),從1個(gè)點(diǎn)到9個(gè)點(diǎn)的布局。這個(gè)例子可以一步步帶大家熟悉flex的基本知識(shí)點(diǎn),可以清楚看到每個(gè)屬性的作用。這是我為啥把這個(gè)案例放在第一個(gè)的原因
如果不加說(shuō)明,本節(jié)的HTML模板一律如下。
<div class="box"> <span class="item"></span> </div>
上面代碼中,div元素(代表骰子的一個(gè)面)是Flex容器,span元素(代表一個(gè)點(diǎn))是Flex子項(xiàng)。如果有多個(gè)子項(xiàng),就要添加多個(gè)span元素,以此類推。
首先,只有左上角1個(gè)點(diǎn)的情況。Flex布局默認(rèn)就是首行左對(duì)齊,所以一行代碼就夠了。
.box { display: flex; }
設(shè)置項(xiàng)目的對(duì)齊方式,就能實(shí)現(xiàn)居中對(duì)齊和右對(duì)齊。
.box { display: flex; justify-content: center; }
.box { display: flex; justify-content: flex-end; }
設(shè)置交叉軸對(duì)齊方式(垂直方向),可以垂直移動(dòng)主軸。
.box { display: flex; align-items: center; }
.box { display: flex; justify-content: center; align-items: center; }
.box { display: flex; justify-content: center; align-items: flex-end; }
.box { display: flex; justify-content: flex-end; align-items: flex-end; }
如果再增加一個(gè)點(diǎn),可以完成下面的幾種排列布局
.box { display: flex; justify-content: space-between; }
.box { display: flex; flex-direction: column; justify-content: space-between; }
.box { display: flex; flex-direction: column; justify-content: space-between; align-items: center; }
.box { display: flex; flex-direction: column; justify-content: space-between; align-items: flex-end; }
.box { display: flex; } .item:nth-child(2) { align-self: center; }
align-self的作用在這里就很明顯了
.box { display: flex; justify-content: space-between; } .item:nth-child(2) { align-self: flex-end; }
align-self的作用在這里就很明顯了
如果是三個(gè)點(diǎn)呢
.box { display: flex; } .item:nth-child(2) { align-self: center; } .item:nth-child(3) { align-self: flex-end; }
那么四個(gè)點(diǎn)是不是也無(wú)所謂了
.box { display: flex; flex-wrap: wrap; justify-content: flex-end; align-content: space-between; }
flex-wrap: wrap;
如果想看到四個(gè)點(diǎn)在四個(gè)角,需要修改下html布局
<div class="box"> <div class="column"> <span class="item"></span> <span class="item"></span> </div> <div class="column"> <span class="item"></span> <span class="item"></span> </div> </div> .box { display: flex; flex-wrap: wrap; align-content: space-between; } .column { flex-basis: 100%; display: flex; justify-content: space-between; }
實(shí)現(xiàn)5個(gè)點(diǎn)的布局
<div class="column"> <span class="item"></span> <span class="item"></span> </div> <div class="column"> <span class="item"></span> </div> <div class="column"> <span class="item"></span> <span class="item"></span> </div> .box { display: flex; justify-content: space-between; } .column { display: flex; flex-direction: column; justify-content: space-between; } .column:nth-of-type(2) { justify-content: center; }
接下來(lái)是6個(gè)點(diǎn)
.box { display: flex; flex-wrap: wrap; align-content: space-between; }
或者是垂直方向
.box { display: flex; flex-direction: column; flex-wrap: wrap; align-content: space-between; }
相信這一波過(guò)去,大家對(duì)玩色子很感興趣了吧,想迫不及待實(shí)現(xiàn)一個(gè)色子全家桶吧,奔跑吧,皮卡丘!
接下來(lái)是一個(gè)更加激動(dòng)人心的時(shí)刻
現(xiàn)今大部分柵格系統(tǒng)都使用了兩種布局方式中的一種:浮動(dòng) (float) 或者 內(nèi)聯(lián)塊 (inline-block)。但是它們的初衷均不是真的用于布局 (layout),也因此導(dǎo)致了諸多的問(wèn)題和限制。
使用浮動(dòng) (float) 需要清除浮動(dòng),因此牽連出了一堆布局問(wèn)題,最臭名昭著的是清除一個(gè)元素的浮動(dòng)有時(shí)會(huì)強(qiáng)制它出現(xiàn)在一個(gè)不相關(guān)的頁(yè)面部分的下邊 (例如 Bootstrap issue )。并且,使用清除浮動(dòng)通常會(huì)同時(shí)使用 before 和 after 兩個(gè)偽元素,導(dǎo)致你不能將該偽元素使用于其他用途。
內(nèi)聯(lián)塊布局最著名的問(wèn)題是 內(nèi)聯(lián)塊之間空白問(wèn)題, 以及其所有 解決方案 都是 奇技淫巧 和 惱人 的。
Flexbox 布局不僅結(jié)局了這些問(wèn)題,還開(kāi)啟全新可能性的新世界的大門(mén)。
具體請(qǐng)參考 https://magic-akari.github.io/solved-by-flexbox/demos/grids/
圣杯布局 是典型的 CSS 布局問(wèn)題,有著眾多的解決方案。如果你不熟悉圣杯布局的歷史,這篇文章 能夠提供很好的總結(jié),并給出了幾個(gè)眾所周知的解決方案。
圣杯布局由頁(yè)頭 (header),中間部分 (center),頁(yè)腳 (footer),和三欄組成。中間的一欄是主要內(nèi)容,左邊和右邊提供如廣告、導(dǎo)航的鏈接。
具體可以參考 https://magic-akari.github.io/solved-by-flexbox/demos/holy-grail/
因?yàn)檩斎虢M件 CSS 的工作方式,幾乎不可能在一個(gè)元素之前或之后附加另一個(gè)元素,并讓它寬度自適應(yīng)地占滿剩余空間。
當(dāng)前僅有的方法,要么知道輸入組件的寬度,要么使用 display:table-cell ,后者有著自己的問(wèn)題,尤其是絕對(duì)定位在跨瀏覽器時(shí)遭遇的困難。
有了 Flexbox 布局,所有的問(wèn)題都煙消云散,并且代碼也極其簡(jiǎn)單。此外,輸入欄和輸入附加組件默認(rèn)同高。
<!-- appending --> <div class="InputAddOn"> <input class="InputAddOn-field" /> <button class="InputAddOn-item">…</button> </div> <!-- prepending --> <div class="InputAddOn"> <span class="InputAddOn-item">…</span> <input class="InputAddOn-field" /> </div> <!-- both --> <div class="InputAddOn"> <span class="InputAddOn-item">…</span> <input class="InputAddOn-field" /> <button class="InputAddOn-item">…</button> </div> .InputAddOn { display: flex; } .InputAddOn-field { flex: 1; /* field styles */ } .InputAddOn-item { /* item styles */ }
媒體對(duì)象 是面向?qū)ο?CSS 的典型代表 (OOCSS). 它的簡(jiǎn)單實(shí)用讓很多 CSS 開(kāi)發(fā)者(包括我自己)轉(zhuǎn)向了 OOCSS 開(kāi)發(fā)方法。
但是像眾多 CSS 布局技巧一樣,媒體對(duì)象必須求助于各種奇技淫巧來(lái)達(dá)成目標(biāo)。
媒體對(duì)象的正文不能出現(xiàn)在頭像的下邊,通過(guò)創(chuàng)建一個(gè) 塊格式化上下文(block formatting context) 或者使用一個(gè)與圖片等寬的左外邊距(margin)/內(nèi)邊距(padding) 。媒體對(duì)象必須清除 body 的浮動(dòng),通過(guò)指定 overflow:hidden或使用偽元素來(lái)達(dá)成。
有了 Flexbox 布局,一切都解決了。附帶著,F(xiàn)Lexbox 布局還允許我們?cè)O(shè)置任意設(shè)置頭像的垂直對(duì)齊方式。我們可以輕松地把頭像移到右邊而不用改一行源代碼。
更復(fù)雜的嵌套模式
<div class="Media"> <img class="Media-figure" src="" alt="" /> <p class="Media-body">…</p> </div>
CSS 代碼
.Media { display: flex; align-items: flex-start; } .Media-figure { margin-right: 1em; } .Media-body { flex: 1; }
當(dāng)頁(yè)面內(nèi)容稀少時(shí),讓頁(yè)腳粘在頁(yè)面底部,是每一個(gè) Web 開(kāi)發(fā)者在他的生涯中嘗試解決過(guò)的問(wèn)題。并且,可以說(shuō)絕大多數(shù)情況,這是一個(gè)已被解決的問(wèn)題。然而 現(xiàn)存的解決方案 有一個(gè)重大的缺陷 — 如果高度未知,就會(huì)失效。
Flexbox 布局可以完美解決這類問(wèn)題。眾所周知, Flexbox 布局經(jīng)常被用在水平布局中,然而在垂直布局中 Flexbox 布局也格外拿手。你所要做的就是把垂直部分包在 flex 容器中,并選擇一個(gè)元素可以讓它展開(kāi)以高度自適應(yīng)。它們會(huì)自動(dòng)地利用容器所有可用空間。
<body class="Site"> <header>…</header> <main class="Site-content">…</main> <footer>…</footer> </body>
CSS 代碼
.Site { display: flex; min-height: 100vh; /*這里也很重要*/ flex-direction: column; } .Site-content { flex: 1; }
一直以來(lái)缺乏好的垂直居中的方法,是 CSS 的黑點(diǎn)。了解更多,可以查看 CSS十五種方法教你如何居中一個(gè)元素
更糟糕的是,目前的垂直居中的技術(shù)晦澀而又反直覺(jué),最直接的選擇(比如 vertical-align:middle) 從未起過(guò)作用。
目前的垂直解決方案 使用了 從負(fù)外邊距 到 display:table-cell 等荒謬的奇技淫巧,包括全高的偽元素。這些技術(shù)有時(shí)候能夠生效,然而并不是所有情況都能如愿。如果你想垂直居中一個(gè)形狀不確定,或者子元素不是父元素唯一的子元素呢?如果你能用偽元素居中這種奇技淫巧,但是你又想用偽元素做些其他的事呢?
用了 Flexbox 布局,不再糾結(jié)這些麻煩。你可以任意對(duì)齊(垂直或者水平),僅僅設(shè)置align-items, align-self, 和 justify-content 這些屬性就好。
鏈接文章
https://magic-akari.github.io/solved-by-flexbox/
https://davidwalsh.name/flexbox-dice
https://codepen.io/LandonSchropp/pen/KpzzGo
http://www.ruanyifeng.com/blog/2015/07/flex-examples.html
慕小程序是資訊、媒體類小程序,因?yàn)閷?duì)富文本內(nèi)容和媒體內(nèi)容的顯示有較高的需求。對(duì)于富文本解析,微慕小程序以前采用的開(kāi)源的wxParse組件,不過(guò)wxParse組件存在很多的問(wèn)題且已經(jīng)停止維護(hù)支持,隨著微慕小程序功能不斷的增加和優(yōu)化,wxParse組件已經(jīng)無(wú)法適應(yīng),同時(shí)對(duì)wxParse二次開(kāi)發(fā)優(yōu)化的難度比較大,基于此微慕團(tuán)隊(duì)考慮尋找更合適的解析組件,經(jīng)過(guò)朋友的推薦和我們的考察,最終選擇開(kāi)源組件:mp-html(https://jin-yufeng.gitee.io/mp-html),這個(gè)組件堪稱小程序富文本解析利器。微慕團(tuán)隊(duì)對(duì)mp-html組件二次開(kāi)發(fā)后可以與微慕小程序完美兼容,微慕小程序?qū)I(yè)版v3.8.0加入了該組件。mp-html組件給富文本的內(nèi)容提供了不少出色的功能。
小程序大多數(shù)都是基于html標(biāo)簽來(lái)渲染和顯示內(nèi)容的,mp-html組件支持以下列表標(biāo)簽和屬性,同時(shí)支持id、style、class、align、height、width 屬性。幾乎可以完美兼容html的標(biāo)簽內(nèi)容,并保持web內(nèi)容和小程序內(nèi)容在顯示上兼容性,頁(yè)面渲染的性能很強(qiáng)。
標(biāo)簽 | 屬性 |
a | href |
abbr | |
address | |
article | |
aside | |
audio | author, controls, loop, name, poster, src |
b | |
base | href |
big | |
blockquote | |
body | |
br | |
caption | |
center | |
cite | |
code | |
col | span |
colgroup | span |
dd | |
del | |
div | |
dl | |
dt | |
em | |
embed | autostart, loop, src, type |
fieldset | |
font | color, face, size |
footer | |
h2 | |
h2 | |
h3 | |
h4 | |
h5 | |
h6 | |
head | |
header | |
hr | |
html | |
i | |
img | ignore, original-src, src |
ins | |
label | |
legend | |
li | |
mark | |
nav | |
ol | start, type |
p | |
pre | |
q | |
rt | |
ruby | |
s | |
section | |
small | |
source | src |
span | |
strike | |
strong | |
style | |
sub | |
sup | |
table | border, cellpadding, cellspacing |
tbody | |
td | colspan, rowspan |
tfoot | |
th | colspan, rowspan |
thead | |
tr | |
tt | |
u | |
ul | |
video | autoplay, controls, loop, muted, poster, src |
組件對(duì)html標(biāo)簽支持的穩(wěn)定性很好:
1.標(biāo)簽名中可以含有 : 等特殊字符(如 o:p)
2.標(biāo)簽名和屬性名大小寫(xiě)不敏感
3.屬性值可以不加引號(hào)、加單引號(hào)、加雙引號(hào),也可以卻缺省(默認(rèn) true)
4.屬性之間可以沒(méi)有空格(通過(guò)引號(hào)劃分)、有空格(可以多個(gè))、有換行符
5.支持正常格式、CDATA 等多種形式的注釋
同時(shí),對(duì)于一些錯(cuò)誤情況,程序也能夠自動(dòng)處理:
1.標(biāo)簽首尾不匹配
2.屬性值中冒號(hào)不匹配
3.標(biāo)簽未閉合
樣式(css)是富文本中最重要的內(nèi)容之一,組件提供多種樣式設(shè)置的方法,可以進(jìn)行靈活的自定義設(shè)置,讓小程序端的文本顯示更豐富。
1.行內(nèi)樣式
這是最常用的樣式設(shè)置方法,直接將需要的樣式放在對(duì)應(yīng)標(biāo)簽的 style 屬性中即可,這種方式僅作用于單個(gè)標(biāo)簽,優(yōu)先級(jí)最高
2.tag-style
這是本組件獨(dú)有的一種樣式設(shè)置方式,可以給某一種標(biāo)簽名設(shè)置默認(rèn)的樣式,可以通過(guò) tag-style 屬性設(shè)置,具體用法見(jiàn)對(duì)應(yīng)說(shuō)明
3.外部樣式
如果希望將某些樣式固定的用于渲染,可以添加到 tools/config.js 的 externStyle 字段中,該方法僅支持 class 選擇器(2.1.0 版本起支持標(biāo)簽名選擇器),優(yōu)先級(jí)最低。
需要調(diào)整優(yōu)先級(jí)時(shí),可以通過(guò)設(shè)置 !important 實(shí)現(xiàn)。
另外,通過(guò)引入 style 插件,還可以實(shí)現(xiàn)匹配 style 標(biāo)簽中樣式的功能。
在富文本內(nèi)容里圖片顯示非常重要,mp-html在圖片顯示上充分考慮小程序的特點(diǎn),主要提供一下功能:
1。占位圖
支持設(shè)置圖片未加載完成時(shí)的占位圖 loading-img 和加載出錯(cuò)時(shí)的占位圖 error-img
2.懶加載
內(nèi)容較長(zhǎng)、圖片較多時(shí),開(kāi)啟懶加載有助于改善性能,需要時(shí)可通過(guò) lazy-load 屬性開(kāi)啟
3.自動(dòng)預(yù)覽
圖片被點(diǎn)擊時(shí),將自動(dòng)放大預(yù)覽,如不需要,可通過(guò) preview-img 屬性關(guān)閉。還可以在 imgtap 事件中進(jìn)行自定義處理
自動(dòng)預(yù)覽通過(guò)特定的處理,可以實(shí)現(xiàn)左右滑動(dòng)查看所有圖片、預(yù)覽重復(fù)鏈接不錯(cuò)位等效果
4.預(yù)覽高清圖
同一張圖片,可以給顯示時(shí)和預(yù)覽時(shí)設(shè)置不同的鏈接地址以達(dá)到最佳效果
設(shè)置方式 1:給 img 標(biāo)簽增加一個(gè) original-src 即可
設(shè)置方式 2:通過(guò) imgList 的 api 進(jìn)行設(shè)置
5.長(zhǎng)按彈出菜單
微信和百度平臺(tái)支持圖片長(zhǎng)按時(shí)彈出菜單,可以進(jìn)行保存、分享等操作,如不需要,可通過(guò) show-img-menu 屬性關(guān)閉
6.裝飾圖片處理
有時(shí)對(duì)于一些小的裝飾性圖片,可能不希望產(chǎn)生上述效果,此時(shí)可以給 img 標(biāo)簽設(shè)置 ignore 屬性,將屏蔽預(yù)覽、彈出菜單等操作,提升體驗(yàn)。
在鏈接內(nèi)的、src 為 data url 且沒(méi)有設(shè)置 original-src 的圖片,默認(rèn)為不可預(yù)覽的小圖片。
7.支持原大小顯示
本組件通過(guò)合理轉(zhuǎn)換,基本實(shí)現(xiàn)了和 html 中 img 的相同效果:沒(méi)有設(shè)置寬度時(shí)按原大小顯示;設(shè)置了寬度時(shí)按比例縮放;同時(shí)設(shè)置寬高時(shí)按設(shè)置的值顯示。不必去考慮小程序中的 mode 等問(wèn)。。
8.支持 svg
雖然小程序中不支持 svg 系列標(biāo)簽,本組件通過(guò)在解析過(guò)程中轉(zhuǎn)為 data url 圖片的方式實(shí)現(xiàn)了 svg 的顯示。
小程序中沒(méi)有 table 標(biāo)簽,使得顯示表格一直是一個(gè)難題,mp-html解決了這個(gè)問(wèn)題,并支持獨(dú)立橫向滾動(dòng),支持含有合并單元格的表格,常用表格屬性(border, cellspacing, cellpadding, align).
組件主要通過(guò)以下三種方式顯示表格
顯示方式 | 適用情況 | 說(shuō)明 |
rich-text 標(biāo)簽 | 表格內(nèi)部沒(méi)有鏈接、圖片等特殊標(biāo)簽 | 效果最佳,幾乎不需要進(jìn)行轉(zhuǎn)換 |
table 布局 | 表格內(nèi)有特殊標(biāo)簽但沒(méi)有使用合并單元格 | 需要進(jìn)行一定轉(zhuǎn)換,將 table, tr, td 等標(biāo)簽轉(zhuǎn)為對(duì)應(yīng)的布局 |
grid 布局 | 表格內(nèi)有特殊標(biāo)簽且使用了合并單元格 | 需要進(jìn)行復(fù)雜的轉(zhuǎn)換將合并單元格用 grid 布局表現(xiàn)出來(lái) |
對(duì)于列表支持也非常友好,完全兼容html里的列表。
1.支持多層嵌套
支持嵌套多層列表,對(duì)于無(wú)序列表,不同的層級(jí)會(huì)顯示不同的黑點(diǎn)格式。
2.支持多種有序列表格式
通過(guò)設(shè)置 ol 標(biāo)簽的 type 屬性,可以顯示數(shù)字、字母、羅馬數(shù)字等多種形式的標(biāo)號(hào)。
3.支持不顯示標(biāo)號(hào)
支持通過(guò)設(shè)置 list-style:none 的方式不顯示 li 標(biāo)簽開(kāi)頭的標(biāo)號(hào)。
對(duì)于音頻和視頻支持自動(dòng)暫停、多源加載、自動(dòng)添加控件。
1.自動(dòng)暫停
在存在多個(gè)視頻的情況下,同時(shí)播放可能會(huì)影響體驗(yàn),本組件支持在播放一個(gè)視頻的時(shí)候自動(dòng)暫停其他所有視頻,如不需要,可通過(guò) pause-video 屬性關(guān)閉
音頻在引入 audio 插件后也可以實(shí)現(xiàn)此效果
2.多源加載
不同平臺(tái)支持播放的格式不同,只設(shè)置一個(gè) src 可能會(huì)出現(xiàn)兼容性問(wèn)題導(dǎo)致無(wú)法播放,因此本組件支持像 html 中一樣給 video 和 audio 設(shè)置多個(gè) source,將按照順序進(jìn)行加載,直到可以播放,最大程度上避免無(wú)法播放
3.自動(dòng)添加控件
對(duì)于既沒(méi)有設(shè)置 controls 也沒(méi)有設(shè)置 autoplay 的標(biāo)簽將自動(dòng)把 controls 屬性設(shè)置為 true,避免無(wú)法播放,影響體驗(yàn)。
支持小程序包括:微信小程序,qq小程序,百度小程序,支付寶小程序,頭條小程序
*請(qǐng)認(rèn)真填寫(xiě)需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。