站快速加载,是提供良好用户体验的前提。然而,网站功能的不断增多,程序包的不断臃肿,导致网站访问时较大的下载量,最终影响了响应速度。那么如何减少代码量,为网站减去过多负担。
去掉不必要的字体
Web字体对设计进行了重大改革,减少了基于图像的字体的使用。使用传统字体后,网页的代码量往往会增加数百KB。所以网站中这种字体的使用尽量控制在两到三种以内。访问速度可获明显提升。
检查内容结构
首先,我们需要检查内容结构,设计完成后,经常会发现一些内容和设计不一致,可以做一些调整来编辑或删除这些内容。我们需要检查内容是否具有上下文联系,如果不是,或者如果内容太重,则快速解决问题。尝试找到解决方案,使内容更具可读性。然后可以尝试使用小黑点、链接、图像、标题,将内容分割成不同的区块,以便可以更流畅地阅读。
删掉没用的资源
网站一直在变革之中。如果你不再使用某组件,那就删掉与之关联的CSS和JavaScript。如果它们包含在一个单独文件中,处理起来就会很简单。
lex自问世以来,受到各界的欢迎,因为不论多么复杂的布局,只要支持flex的浏览器,都能很容易的实现,而且更加通俗易懂。这里我收集了几个很优秀的布局方案
Flex基础知识点复习和巩固
CSS 三栏布局技巧汇总:七种方法行走天下
什么?CSS选择器是从右往左解析
CSS十五种方法教你如何居中一个元素
下面,就来看看Flex如何实现,从1个点到9个点的布局。这个例子可以一步步带大家熟悉flex的基本知识点,可以清楚看到每个属性的作用。这是我为啥把这个案例放在第一个的原因
如果不加说明,本节的HTML模板一律如下。
<div class="box"> <span class="item"></span> </div>
上面代码中,div元素(代表骰子的一个面)是Flex容器,span元素(代表一个点)是Flex子项。如果有多个子项,就要添加多个span元素,以此类推。
首先,只有左上角1个点的情况。Flex布局默认就是首行左对齐,所以一行代码就够了。
.box { display: flex; }
设置项目的对齐方式,就能实现居中对齐和右对齐。
.box { display: flex; justify-content: center; }
.box { display: flex; justify-content: flex-end; }
设置交叉轴对齐方式(垂直方向),可以垂直移动主轴。
.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; }
如果再增加一个点,可以完成下面的几种排列布局
.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的作用在这里就很明显了
如果是三个点呢
.box { display: flex; } .item:nth-child(2) { align-self: center; } .item:nth-child(3) { align-self: flex-end; }
那么四个点是不是也无所谓了
.box { display: flex; flex-wrap: wrap; justify-content: flex-end; align-content: space-between; }
flex-wrap: wrap;
如果想看到四个点在四个角,需要修改下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; }
实现5个点的布局
<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; }
接下来是6个点
.box { display: flex; flex-wrap: wrap; align-content: space-between; }
或者是垂直方向
.box { display: flex; flex-direction: column; flex-wrap: wrap; align-content: space-between; }
相信这一波过去,大家对玩色子很感兴趣了吧,想迫不及待实现一个色子全家桶吧,奔跑吧,皮卡丘!
接下来是一个更加激动人心的时刻
现今大部分栅格系统都使用了两种布局方式中的一种:浮动 (float) 或者 內联块 (inline-block)。但是它们的初衷均不是真的用于布局 (layout),也因此导致了诸多的问题和限制。
使用浮动 (float) 需要清除浮动,因此牵连出了一堆布局问题,最臭名昭著的是清除一个元素的浮动有时会强制它出现在一个不相关的页面部分的下边 (例如 Bootstrap issue )。并且,使用清除浮动通常会同时使用 before 和 after 两个伪元素,导致你不能将该伪元素使用于其他用途。
内联块布局最著名的问题是 内联块之间空白问题, 以及其所有 解决方案 都是 奇技淫巧 和 恼人 的。
Flexbox 布局不仅结局了这些问题,还开启全新可能性的新世界的大门。
具体请参考 https://magic-akari.github.io/solved-by-flexbox/demos/grids/
圣杯布局 是典型的 CSS 布局问题,有着众多的解决方案。如果你不熟悉圣杯布局的历史,这篇文章 能够提供很好的总结,并给出了几个众所周知的解决方案。
圣杯布局由页头 (header),中间部分 (center),页脚 (footer),和三栏组成。中间的一栏是主要内容,左边和右边提供如广告、导航的链接。
具体可以参考 https://magic-akari.github.io/solved-by-flexbox/demos/holy-grail/
因为输入组件 CSS 的工作方式,几乎不可能在一个元素之前或之后附加另一个元素,并让它宽度自适应地占满剩余空间。
当前仅有的方法,要么知道输入组件的宽度,要么使用 display:table-cell ,后者有着自己的问题,尤其是绝对定位在跨浏览器时遭遇的困难。
有了 Flexbox 布局,所有的问题都烟消云散,并且代码也极其简单。此外,输入栏和输入附加组件默认同高。
<!-- 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 */ }
媒体对象 是面向对象 CSS 的典型代表 (OOCSS). 它的简单实用让很多 CSS 开发者(包括我自己)转向了 OOCSS 开发方法。
但是像众多 CSS 布局技巧一样,媒体对象必须求助于各种奇技淫巧来达成目标。
媒体对象的正文不能出现在头像的下边,通过创建一个 块格式化上下文(block formatting context) 或者使用一个与图片等宽的左外边距(margin)/内边距(padding) 。媒体对象必须清除 body 的浮动,通过指定 overflow:hidden或使用伪元素来达成。
有了 Flexbox 布局,一切都解决了。附带着,FLexbox 布局还允许我们设置任意设置头像的垂直对齐方式。我们可以轻松地把头像移到右边而不用改一行源代码。
更复杂的嵌套模式
<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; }
当页面内容稀少时,让页脚粘在页面底部,是每一个 Web 开发者在他的生涯中尝试解决过的问题。并且,可以说绝大多数情况,这是一个已被解决的问题。然而 现存的解决方案 有一个重大的缺陷 — 如果高度未知,就会失效。
Flexbox 布局可以完美解决这类问题。众所周知, Flexbox 布局经常被用在水平布局中,然而在垂直布局中 Flexbox 布局也格外拿手。你所要做的就是把垂直部分包在 flex 容器中,并选择一个元素可以让它展开以高度自适应。它们会自动地利用容器所有可用空间。
<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; }
一直以来缺乏好的垂直居中的方法,是 CSS 的黑点。了解更多,可以查看 CSS十五种方法教你如何居中一个元素
更糟糕的是,目前的垂直居中的技术晦涩而又反直觉,最直接的选择(比如 vertical-align:middle) 从未起过作用。
目前的垂直解决方案 使用了 从负外边距 到 display:table-cell 等荒谬的奇技淫巧,包括全高的伪元素。这些技术有时候能够生效,然而并不是所有情况都能如愿。如果你想垂直居中一个形状不确定,或者子元素不是父元素唯一的子元素呢?如果你能用伪元素居中这种奇技淫巧,但是你又想用伪元素做些其他的事呢?
用了 Flexbox 布局,不再纠结这些麻烦。你可以任意对齐(垂直或者水平),仅仅设置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
慕小程序是资讯、媒体类小程序,因为对富文本内容和媒体内容的显示有较高的需求。对于富文本解析,微慕小程序以前采用的开源的wxParse组件,不过wxParse组件存在很多的问题且已经停止维护支持,随着微慕小程序功能不断的增加和优化,wxParse组件已经无法适应,同时对wxParse二次开发优化的难度比较大,基于此微慕团队考虑寻找更合适的解析组件,经过朋友的推荐和我们的考察,最终选择开源组件:mp-html(https://jin-yufeng.gitee.io/mp-html),这个组件堪称小程序富文本解析利器。微慕团队对mp-html组件二次开发后可以与微慕小程序完美兼容,微慕小程序专业版v3.8.0加入了该组件。mp-html组件给富文本的内容提供了不少出色的功能。
小程序大多数都是基于html标签来渲染和显示内容的,mp-html组件支持以下列表标签和属性,同时支持id、style、class、align、height、width 属性。几乎可以完美兼容html的标签内容,并保持web内容和小程序内容在显示上兼容性,页面渲染的性能很强。
标签 | 属性 |
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 |
组件对html标签支持的稳定性很好:
1.标签名中可以含有 : 等特殊字符(如 o:p)
2.标签名和属性名大小写不敏感
3.属性值可以不加引号、加单引号、加双引号,也可以却缺省(默认 true)
4.属性之间可以没有空格(通过引号划分)、有空格(可以多个)、有换行符
5.支持正常格式、CDATA 等多种形式的注释
同时,对于一些错误情况,程序也能够自动处理:
1.标签首尾不匹配
2.属性值中冒号不匹配
3.标签未闭合
样式(css)是富文本中最重要的内容之一,组件提供多种样式设置的方法,可以进行灵活的自定义设置,让小程序端的文本显示更丰富。
1.行内样式
这是最常用的样式设置方法,直接将需要的样式放在对应标签的 style 属性中即可,这种方式仅作用于单个标签,优先级最高
2.tag-style
这是本组件独有的一种样式设置方式,可以给某一种标签名设置默认的样式,可以通过 tag-style 属性设置,具体用法见对应说明
3.外部样式
如果希望将某些样式固定的用于渲染,可以添加到 tools/config.js 的 externStyle 字段中,该方法仅支持 class 选择器(2.1.0 版本起支持标签名选择器),优先级最低。
需要调整优先级时,可以通过设置 !important 实现。
另外,通过引入 style 插件,还可以实现匹配 style 标签中样式的功能。
在富文本内容里图片显示非常重要,mp-html在图片显示上充分考虑小程序的特点,主要提供一下功能:
1。占位图
支持设置图片未加载完成时的占位图 loading-img 和加载出错时的占位图 error-img
2.懒加载
内容较长、图片较多时,开启懒加载有助于改善性能,需要时可通过 lazy-load 属性开启
3.自动预览
图片被点击时,将自动放大预览,如不需要,可通过 preview-img 属性关闭。还可以在 imgtap 事件中进行自定义处理
自动预览通过特定的处理,可以实现左右滑动查看所有图片、预览重复链接不错位等效果
4.预览高清图
同一张图片,可以给显示时和预览时设置不同的链接地址以达到最佳效果
设置方式 1:给 img 标签增加一个 original-src 即可
设置方式 2:通过 imgList 的 api 进行设置
5.长按弹出菜单
微信和百度平台支持图片长按时弹出菜单,可以进行保存、分享等操作,如不需要,可通过 show-img-menu 属性关闭
6.装饰图片处理
有时对于一些小的装饰性图片,可能不希望产生上述效果,此时可以给 img 标签设置 ignore 属性,将屏蔽预览、弹出菜单等操作,提升体验。
在链接内的、src 为 data url 且没有设置 original-src 的图片,默认为不可预览的小图片。
7.支持原大小显示
本组件通过合理转换,基本实现了和 html 中 img 的相同效果:没有设置宽度时按原大小显示;设置了宽度时按比例缩放;同时设置宽高时按设置的值显示。不必去考虑小程序中的 mode 等问。。
8.支持 svg
虽然小程序中不支持 svg 系列标签,本组件通过在解析过程中转为 data url 图片的方式实现了 svg 的显示。
小程序中没有 table 标签,使得显示表格一直是一个难题,mp-html解决了这个问题,并支持独立横向滚动,支持含有合并单元格的表格,常用表格属性(border, cellspacing, cellpadding, align).
组件主要通过以下三种方式显示表格
显示方式 | 适用情况 | 说明 |
rich-text 标签 | 表格内部没有链接、图片等特殊标签 | 效果最佳,几乎不需要进行转换 |
table 布局 | 表格内有特殊标签但没有使用合并单元格 | 需要进行一定转换,将 table, tr, td 等标签转为对应的布局 |
grid 布局 | 表格内有特殊标签且使用了合并单元格 | 需要进行复杂的转换将合并单元格用 grid 布局表现出来 |
对于列表支持也非常友好,完全兼容html里的列表。
1.支持多层嵌套
支持嵌套多层列表,对于无序列表,不同的层级会显示不同的黑点格式。
2.支持多种有序列表格式
通过设置 ol 标签的 type 属性,可以显示数字、字母、罗马数字等多种形式的标号。
3.支持不显示标号
支持通过设置 list-style:none 的方式不显示 li 标签开头的标号。
对于音频和视频支持自动暂停、多源加载、自动添加控件。
1.自动暂停
在存在多个视频的情况下,同时播放可能会影响体验,本组件支持在播放一个视频的时候自动暂停其他所有视频,如不需要,可通过 pause-video 属性关闭
音频在引入 audio 插件后也可以实现此效果
2.多源加载
不同平台支持播放的格式不同,只设置一个 src 可能会出现兼容性问题导致无法播放,因此本组件支持像 html 中一样给 video 和 audio 设置多个 source,将按照顺序进行加载,直到可以播放,最大程度上避免无法播放
3.自动添加控件
对于既没有设置 controls 也没有设置 autoplay 的标签将自动把 controls 属性设置为 true,避免无法播放,影响体验。
支持小程序包括:微信小程序,qq小程序,百度小程序,支付宝小程序,头条小程序
*请认真填写需求信息,我们会在24小时内与您取得联系。