云顶娱乐-云顶娱乐游戏平台官网
做最好的网站
当前位置: 云顶娱乐 > 云顶娱乐 > 正文

h5开辟有关内容总计,移动前端开采之viewport的深

时间:2019-10-11 00:30来源:云顶娱乐
有线质量优化:Composite 2016/04/26 · 基本功本领 ·无线 原稿出处: Taobao前端团队(FED)-冬萌    叁个 Web 页面包车型地铁彰显,一句话来讲能够以为经历了以下下多少个步骤。 JavaScri

有线质量优化:Composite

2016/04/26 · 基本功本领 · 无线

原稿出处: Taobao前端团队(FED)- 冬萌   

图片 1

叁个 Web 页面包车型地铁彰显,一句话来讲能够以为经历了以下下多少个步骤。

图片 2

  • JavaScript:一般的话,我们会动用 JavaScript 来落实部分视觉变化的效应。譬如做一个卡通恐怕往页面里加多一些 DOM 成分等。
  • Style:计算样式,那些进度是依靠 CSS 选择器,对每一个 DOM 成分配对应的 CSS 样式。这一步结束之后,就确定了种种 DOM 元素上该行使什么 CSS 样式法则。
  • Layout:布局,上一步明确了各类 DOM 成分的样式法规,这一步正是现实性测算各类 DOM 成分最后在显示屏上突显的高低和职位。web 页面巧月素的布局是相持的,因而二个要素的布局产生变化,会联合浮动地掀起任何因素的布局产生变化。譬喻,`` 成分的肥瘦的改造会影响其子成分的大幅,其子元素宽度的浮动也会一连对其外甥成分发生耳濡目染。因而对于浏览器来讲,布局进度是时有时无发出的。
  • Paint:绘制,本质上就是填充像素的经过。满含绘制文字、颜色、图像、边框和阴影等,也便是三个DOM 成分全数的可视效果。通常的话,那个绘制进度是在多少个层上完结的。
  • Composite:渲染层合併,由上一步可以知道,对页面中 DOM 元素的绘图是在四个层上海展览中心开的。在各种层上形成绘制进度之后,浏览器会将全体层遵照客观的次第合併成多个图层,然后展现在显示器上。对于有岗位重叠的要素的页面,这几个进度越是珍贵,因为假设图层的集合顺序出错,将会招致成分呈现十分。

自然,本文大家只来关怀 Composite 部分。

word-break:break-all 和 word-wrap:break-word 的区别

2015/11/19 · CSS · 2 评论 · word-break

初藳出处: 张鑫旭   

移步前端开拓之viewport的深深了然

2016/11/07 · 基本功本事 · viewport

初藳出处: 无双   

在运动器械上进展网页的重构或支付,首先得搞了解的便是移动器材上的viewport了,独有知道了viewport的定义以致弄领会了跟viewport有关的meta标签的应用,才具更加好地让我们的网页适配或响应各样差别分辨率的运动装备。

一、viewport的概念

初阶的讲,移动器具上的viewport正是器具的荧屏上能用来显示我们的网页的那一块区域,在具体一点,正是浏览器上(也恐怕是一个app中的webview)用来显示网页的那某些区域,但viewport又不局限于浏览器可视区域的高低,它大概比浏览器的可视区域要大,也也许比浏览器的可视区域要小。在默许意况下,日常来说,移动器械上的viewport都是要抢先浏览器可视区域的,那是因为牵挂到运动设备的分辨率相对于桌面计算机来讲都相当的小,所认为了能在移动设备上平常展现那几个古板的为桌面浏览器设计的网址,移动设备上的浏览器都会把温馨默许的viewport设为980px或1024px(也恐怕是别的值,这么些是由器械自个儿调节的),但带来的结局就是浏览器会合世横向滚动条,因为浏览器可视区域的宽度是比这么些私下认可的viewport的宽窄要小的。下图列出了有些装置上浏览器的暗许viewport的幅度。

图片 3

 

二、css中的1px并不等于设备的1px

在css中大家经常采纳px作为单位,在桌面浏览器中css的1个像素往往都以对应着计算机荧屏的1个大意像素,那大概会促成大家的一个错觉,那正是css中的像素正是装备的情理像素。但实际上境况却其实否则,css中的像素只是贰个空洞的单位,在不相同的设施或不相同的情况中,css中的1px所表示的装置物理像素是差别的。在为桌面浏览器设计的网页中,大家不必对那几个津津计较,但在移动器具上,必需弄领会这一点。在原先的移位设备中,显示屏像素密度都极低,如iphone3,它的分辨率为320×480,在iphone3上,贰个css像素确实是相等一个显示器物理像素的。后来乘机工夫的升高,移动设备的荧屏像素密度进一步高,从iphone4起头,苹果集团便推出了所谓的Retina屏,分辨率进步了一倍,形成640×960,但显示屏尺寸却没变化,这就象征一样大小的荧屏上,像素却多了一倍,那时,一个css像素是万分八个轮廓像素的。别的牌子的移位设备也是这几个道理。举个例子安卓设备依照显示器像素密度可分为ldpi、mdpi、hdpi、xhdpi等不等的阶段,分辨率也是一应俱全,安卓设备上的一个css像素也正是有些个显示器物理像素,也因设备的例外而各异,未有贰个结论。

再有一个要素也会唤起css中px的变型,那正是顾客缩放。比方,当客商把页面放大一倍,那么css中1px所表示的物理像素也会增添一倍;反之把页面降低一倍,css中1px所代表的大意像素也会压缩一倍。关于这一点,在篇章前边的局地还或许会讲到。

在活动端浏览器中以至有些桌面浏览器中,window对象有一个devicePixelRatio属性,它的合法的概念为:设备物理像素和设施独立像素的百分比,也正是devicePixelRatio = 物理像素 / 独立像素。css中的px就足以当做是器具的独立像素,所以通过devicePixelRatio,大家能够清楚该器材上七个css像素代表有个别个轮廓像素。例如,在Retina屏的iphone上,devicePixelRatio的值为2,也正是说1个css像素也就是2个大要像素。可是要注意的是,devicePixelRatio在分化的浏览器中还设有多少的包容性难题,所以大家前些天还并不可能完全相信那一个事物,具体的动静可以看下那篇小说。

devicePixelRatio的测量检验结果:

图片 4

 

三、PPK的关于多个viewport的辩白

ppk大神对此活动道具上的viewport有着相当多的斟酌(第一篇,第二篇,第三篇),风野趣的校友能够去看一下,本文中有比很多数码和眼光也是缘于这里。ppk感觉,移动器具上有八个viewport。

率先,移动设备上的浏览器以为自身必得能让全部的网址都例行展现,纵然是那么些不是为移动设备设计的网址。但一旦以浏览器的可视区域作为viewport的话,因为移动设备的荧屏都不是很宽,所以那么些为桌面浏览器设计的网址放到移动设备上呈现时,必然会因为运动器材的viewport太窄,而挤作一团,以至布局怎么着的都会乱掉。也可以有人会问,以往不是有不少部手提式有线电话机分辨率都格外大啊,举例768×1024,大概1080×一九一七那样,那那样的无绳电话机用来显示为桌面浏览器设计的网址是没难点的啊?前边大家早已说了,css中的1px并不是意味着荧屏上的1px,你分辨率越大,css中1px意味的物理像素就能够越来越多,devicePixelRatio的值也越大,那很好精晓,因为您分辨率增大了,但荧屏尺寸并不曾变比比较多少,必得让css中的1px意味着越来越多的大体像素,技巧让1px的事物在显示屏上的轻重缓急与那几个低分辨率的设备差不离,不然就能因为太小而看不清。所以在1080×1918如此的配备上,在暗许情形下,只怕你若是把一个div的肥瘦设为300多px(视devicePixelRatio的值而定),便是满屏的增长幅度了。回到正题上来,假使把活动设备上浏览器的可视区域设为viewport的话,有些网址就能够因为viewport太窄而显得错乱,所以这几个浏览器就决定暗许景况下把viewport设为三个较宽的值,比方980px,那样的话尽管是这一个为桌面设计的网址也能在运动浏览器上健康显示了。ppk把那个浏览器暗中认可的viewport叫做 *layout viewport。*那个layout viewport的幅度能够通过 document.documentElement.clientWidth 来赢得。

然而,layout viewport 的涨幅是过量浏览器可视区域的上涨的幅度的,所以大家还索要一个viewport来表示 浏览器可视区域的轻重,ppk把那么些viewport叫做 visual viewport。visual viewport的肥瘦能够由此window.innerWidth 来获得,但在Android 2, Oprea mini 和 UC 第88中学不恐怕正确获取。

图片 5      图片 6

今昔大家已经有五个viewport了:layout viewportvisual viewport。但浏览器感到还远远不足,因为前些天进一步多的网址都会为移动设备进行独立的规划,所以必得还要有贰个能健全适配移动设备的viewport。所谓的布帆无恙适配指的是,首先没有必要客户缩放和横向滚动条就能够符合规律的查阅网站的装有内容;第二,呈现的文字的轻重是适当,比方一段14px分寸的文字,不会因为在三个高密度像素的显示器里展示得太小而高不可攀看清,理想的情形是这段14px的文字无论是在何种密度显示器,何种分辨率下,显示出来的分寸都以大半的。当然,不只是文字,别的因素像图片什么的也是那么些道理。ppk把这些viewport叫做 ideal viewport,约等于第多个viewport——移动器材的上佳viewport。

ideal viewport并未贰个定位的尺寸,分歧的器材具备有例外的ideal viewport。全部的iphone的ideal viewport宽度都以320px,无论它的显示器宽度是320依旧640,相当于说,在iphone中,css中的320px就代表iphone显示屏的上涨的幅度。
图片 7          图片 8

而是安卓设备就比较复杂了,有320px的,有360px的,有384px的等等,关于分化的装备ideal viewport的肥瘦都为多少,可以到http://viewportsizes.com去查看一下,里面收罗了累累器械的地道宽度。

再下结论一下:ppk把运动道具上的viewport分为layout viewport  、 visual viewport  ideal viewport  三类,在那之中的ideal viewport是最符合运动器械的viewport,ideal viewport的小幅度等于移动设备的显示屏宽度,只要在css中把某一成分的宽窄设为ideal viewport的宽窄(单位用px),那么这一个因素的幅度便是道具显示屏的肥瘦了,也正是小幅度为百分百的法力。ideal viewport 的含义在于,无论在何种分辨率的显示器下,这几个针对ideal viewport 而安顿的网址,无需客户手动缩放,也不要求出现横向滚动条,都足以圆满的表现给客户。

 

四、利用meta标签对viewport实行调整

挪动设备私下认可的viewport是layout viewport,也便是不行比显示器要宽的viewport,但在扩充活动器具网址的支付时,大家需要的是ideal viewport。那么怎么技巧收获ideal viewport呢?这就该轮到meta标签出场了。

我们在支付移动设备的网址时,最广大的的贰个动作就是把下边这几个事物复制到我们的head标签中:

XHTML

<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

1
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">

该meta标签的意义是让眼下viewport的升幅等于设备的升幅,同一时候不容许客户手动缩放。只怕允不一样意顾客缩放分歧的网址有不一致的须要,但让viewport的大幅度等于设备的大幅度,那一个理应是大家都想要的功效,假设你不这么的设定以来,那就能够利用极度比荧屏宽的暗许viewport,也正是说会产出横向滚动条。

其一name为viewport的meta标签到底有哪些东西吧,又都有何样意义吧?

meta viewport 标签首先是由苹果公司在其safari浏览器中引进的,目标便是削株掘根移动设备的viewport难题。后来安卓以至各大浏览器厂商也都烦恼效仿,引进对meta viewport的帮衬,事实也作证这么些东西依旧那几个实用的。

在苹果的正经中,meta viewport 有6个属性(暂时把content中的那多少个东西叫做二个天性质和值),如下:

width 设置layout viewport  的宽度,为一个正整数,或字符串”width-device”
initial-scale 设置页面的初始缩放值,为一个数字,可以带小数
minimum-scale 允许用户的最小缩放值,为一个数字,可以带小数
maximum-scale 允许用户的最大缩放值,为一个数字,可以带小数
height 设置layout viewport  的高度,这个属性对我们并不重要,很少使用
user-scalable 是否允许用户进行缩放,值为”no”或”yes”, no 代表不允许,yes代表允许

这一个属性能够同有时候利用,也能够独自使用或混合使用,多个天性同临时间接选举取时用逗号隔断就行了。

别的,在安卓中还扶植  target-densitydpi  这一个私有属性,它表示指标设备的密度等第,功能是调控css中的1px意味着有一点物理像素

target-densitydpi 值可以为一个数值或 high-dpi 、 medium-dpi、 low-dpi、 device-dpi 这几个字符串中的一个

极度表达的是,当 target-densitydpi=device-dpi 时, css中的1px会等于物理像素中的1px。

因为这么些性情只有安卓辅助,並且安卓已经调节要遗弃target-densitydpi  这几个性情了,所以这性格格我们要防止实行利用  。

 

五、把当下的viewport宽度设置为 ideal viewport 的增长幅度

要博取ideal viewport就亟须把暗中认可的layout viewport的小幅度设为移动设备的荧屏宽度。因为meta viewport中的width能调控layout viewport的宽窄,所以我们只须要把width设为width-device那些极度的值就行了。

XHTML

<meta name="viewport" content="width=device-width">

1
<meta name="viewport" content="width=device-width">

下图是那句代码在各大移动端浏览器上的测量检验结果:

图片 9

能够见到通过width=device-width,所有浏览器都能把当前的viewport宽度产生ideal viewport的幅度,但要注意的是,在iphone和ipad上,无论是竖屏照旧横屏,宽度都以竖屏时ideal viewport的大幅。

这么的写法看起来什么人都会做,没吃过猪肉,何人还没见过猪跑啊~,确实,大家在付出活动道具上的网页时,不管你明不领悟哪些是viewport,恐怕您只必要那样一句代码就够了。

而是你一定不通晓

JavaScript

<meta name="viewport" content="initial-scale=1">

1
<meta name="viewport" content="initial-scale=1">

那句代码也能实现和前一句代码同样的魔法,也得以把当下的的viewport变为 ideal viewport。

呵呵,愣住了啊,因为从理论上来讲,那句代码的作用只是不对当前的页面实行缩放,也等于页面本该是多大就是多大。那为啥会有 width=device-width 的功力啊?

要想领悟这件业务,首先你得弄驾驭这一个缩放是争持于怎样来缩放的,因为此地的缩放值是1,也正是没缩放,但却达成了 ideal viewport 的功效,所以,那答案就唯有四个了,缩放是相对于 ideal viewport来拓宽缩放的,当对ideal viewport实行百分百的缩放,也正是缩放值为1的时候,不就拿走了 ideal viewport吗?事实申明,的确是那般的。下图是各大活动端的浏览器当设置了<meta name=”viewport” content=”initial-scale=1″> 后是或不是能把当前的viewport宽度造成 ideal viewport 的宽度的测验结果。

图片 10

测验结果评释 initial-scale=1 也能把近日的viewport宽度产生 ideal viewport 的增进率,但那第2轮到了windows phone 上的IE 无论是竖屏照旧横屏都把宽度设为竖屏时ideal viewport的大幅。但那点小弱点已经无关首要了。

但假诺width 和 initial-scale=1相同的时候出现,况且还现出了矛盾吧?比方:

XHTML

<meta name="viewport" content="width=400, initial-scale=1">

1
<meta name="viewport" content="width=400, initial-scale=1">

width=400代表把当前viewport的大幅设为400px,initial-scale=1则意味着把当下viewport的增长幅度设为ideal viewport的增长幅度,那么浏览器到底该遵从哪个命令呢?是书写顺序在后头的那么些吗?不是。当碰到这种气象时,浏览器会取它们两个中非常大的不行值。比方,当width=400,ideal viewport的宽度为320时,取的是400;当width=400, ideal viewport的宽窄为480时,取的是ideal viewport的幅度。(ps:在uc9浏览器中,当initial-scale=1时,无论width属性的值为多少,此时viewport的肥瘦永久都是ideal viewport的大幅)

最终,计算一下,要把前段时间的viewport宽度设为ideal viewport的肥瘦,不仅能够安装 width=device-width,也得以安装 initial-scale=1,但那二者各有贰个小瑕玷,就是iphone、ipad以至IE 会横竖屏不分,通通以竖屏的ideal viewport宽度为准。所以,最健全的写法应该是,两个都写上去,那样就 initial-scale=1 减轻了 iphone、ipad的病痛,width=device-width则化解了IE的毛病:

XHTML

<meta name="viewport" content="width=device-width, initial-scale=1">

1
<meta name="viewport" content="width=device-width, initial-scale=1">

 

六、关于meta viewport的更加的多文化

1、关于缩放以致initial-scale的暗许值

先是大家先来研商一下缩放的难题,前边已经涉及过,缩放是相持于ideal viewport来缩放的,缩放值越大,当前viewport的增加率就能越小,反之亦然。举个例子在iphone中,ideal viewport的小幅度是320px,假若我们设置 initial-scale=2 ,此时viewport的宽度会成为独有160px了,那也好领悟,放大了一倍嘛,便是原来1px的事物变为2px了,但是1px改成2px并非把原先的320px变为640px了,而是在骨子里增长幅度不改变的意况下,1px变得跟原先的2px的长度同样了,所以推广2倍后原来必要320px技巧填满的上涨的幅度今后只须求160px就达成了。因而,大家得以吸取三个公式:

visual viewport宽度 = ideal viewport宽度 / 当前缩放值 当前缩放值 = ideal viewport宽度 / visual viewport宽度

1
2
3
visual viewport宽度 = ideal viewport宽度  / 当前缩放值
 
当前缩放值 = ideal viewport宽度  / visual viewport宽度

ps: visual viewport的小幅度指的是浏览器可视区域的宽度。

大多浏览器都适合这么些理论,可是安卓上的原生浏览器乃至IE某些难点。安卓自带的webkit浏览器唯有在 initial-scale = 1 乃至没有安装width属性时才是显示符合规律的,也就一定于那理论在它身上基本没用;而IE则根本不甩initial-scale这几个脾性,无论你给他安装哪些,initial-scale展现出来的效能永世是1。

好了,现在再来讲下initial-scale的暗中同意值难点,正是不写那么些特性的时候,它的暗许值会是有个别呢?很醒目不会是1,因为当 initial-scale = 1 时,当前的layout viewport宽度会被设为 ideal viewport的上升的幅度,但近日说了,各浏览器暗中同意的 layout viewport宽度相似都是980啊,1024哟,800哟之类这个个值,未有一初步就是ideal viewport的宽度的,所以 initial-scale的默许值肯定不是1。安卓设备上的initial-scale暗中认可值好像一直不办法能够拿走,大概便是干脆它就一向不暗中同意值,一定要你来得的写出来这么些事物才会起作用,大家不管它了,这里大家重点说一下iphone和ipad上的initial-scale暗中认可值。

据他们说测量试验,大家得以在iphone和ipad上获得一个结论,便是随便你给layout viewpor设置的大幅是有个别,而又尚未点名初阶的缩放值的话,那么iphone和ipad会自动测算initial-scale那么些值,以保障当前layout viewport的宽窄在缩放后正是浏览器可视区域的幅度,相当于说不会油可是生横向滚动条。比方说,在iphone上,大家不安装任何的viewport meta标签,此时layout viewport的大幅为980px,但大家得以看见浏览器并不曾出现横向滚动条,浏览器私下认可的把页面收缩了。分局方的公式,当前缩放值 = ideal viewport宽度  / visual viewport宽度,我们可以得出:

时下缩放值 = 320 / 980

约等于现阶段的initial-scale暗中认可值应该是 0.33那规范。当你钦赐了initial-scale的值后,这些默许值就不起效率了。

简来说之记住这么些结论就行了:在iphone和ipad上,无论你给viewport设的宽的是稍稍,若无一些名暗中同意的缩放值,则iphone和ipad会自动测算那一个缩放值,以到达当前页面不会晤世横向滚动条(或许说viewport的宽度正是显示器的宽窄)的目标。

图片 11    图片 12     图片 13

 

2、动态改造meta viewport标签

第一种方式

能够行使document.write来动态输出meta viewport标签,譬喻:

JavaScript

document.write('<meta name="viewport" content="width=device-width,initial-scale=1">')

1
document.write('<meta name="viewport" content="width=device-width,initial-scale=1">')

第二种方法

通过setAttribute来改变

XHTML

<meta id="testViewport" name="viewport" content="width = 380"> <script> var mvp = document.getElementById('testViewport'); mvp.setAttribute('content','width=480'); </script>

1
2
3
4
5
<meta id="testViewport" name="viewport" content="width = 380">
<script>
var mvp = document.getElementById('testViewport');
mvp.setAttribute('content','width=480');
</script>

 

安卓2.3自带浏览器上的一个bug

XHTML

<meta name="viewport" content="width=device-width"> <script type="text/javascript"> alert(document.documentElement.clientWidth); //弹出600,平日景况应当弹出320 </script> <meta name="viewport" content="width=600"> <script type="text/javascript"> alert(document.documentElement.clientWidth); //弹出320,符合规律景况应当弹出600 </script>

1
2
3
4
5
6
7
8
9
10
11
<meta name="viewport" content="width=device-width">
 
<script type="text/javascript">
alert(document.documentElement.clientWidth); //弹出600,正常情况应该弹出320
</script>
 
<meta name="viewport" content="width=600">
 
<script type="text/javascript">
alert(document.documentElement.clientWidth); //弹出320,正常情况应该弹出600
</script>

测量检验的无绳电话机ideal viewport 宽度为320px,第一遍弹出的值是600,但这些值应该是第行meta标签的结果啊,然后第1回弹出的值是320,那才是第一行meta标签所完成的功力啊,所以在安卓2.3(只怕是独具2.x版本中)的自带浏览器中,对meta viewport标签实行覆盖或改变,会现出令人极其迷糊的结果。

 

七、结语

说了那么多废话,最终还是有须求总计一点低价的出来。

率先倘诺不设置meta viewport标签,那么移动设备上浏览器暗中同意的宽窄值为800px,980px,1024px等这个,可想而知是超过显示器宽度的。这里的幅度所用的单位px都是指css中的px,它跟代表实际显示屏物理像素的px不是三遍事。

其次、每一个移动设备浏览器中都有贰个神奇的幅度,这一个美好的肥瘦是指css中的宽度,跟设备的大意宽度未有提到,在css中,那些幅度就一定于百分之百的所代表的老大宽度。大家能够用meta标签把viewport的上升的幅度设为那一个能够的上涨的幅度,若是不知晓那个设备的完美宽度是稍微,那么用device-width那一个古怪值就行了,同时initial-scale=1也会有把viewport的宽度设为理想宽度的功用。所以,我们得以选用

XHTML

<meta name="viewport" content="width=device-width, initial-scale=1">

1
<meta name="viewport" content="width=device-width, initial-scale=1">

来赢得二个佳绩的viewport(也正是近期说的ideal viewport)。

为啥要求有精良的viewport呢?比方二个分辨率为320×480的无绳电话机完美viewport的增加率是320px,而另三个显示屏尺寸一样但分辨率为640×960的无绳电话机的绝妙viewport宽度也是为320px,那为什么分辨率大的这一个手提式有线电话机的美丽宽度要跟分辨率小的百般手提式无线电话机的精美宽度同样吗?那是因为,唯有这么技艺确认保障平等的网站在区别分辨率的设施上看起来没什么不一致或大致的。实际上,将来市情上即使有那么多分裂类型不一样品牌区别分辨率的无绳电话机,但它们的优质viewport宽度归结起来无非也就 320、360、384、400等三种,都以可怜临近的,理想宽度的好像也就表示大家针对有个别设备的地道viewport而做出的网站,在此外装置上的显现也不会离开比相当多还是是表现一致的。

1 赞 8 收藏 评论

图片 14

移步端 h5开垦相关内容总计:CSS篇

2016/01/24 · CSS, HTML5 · 1 评论 · 移动端

本文小编: 伯乐在线 - zhiqiang21 。未经小编许可,幸免转发!
应接出席伯乐在线 专辑小编。

移动前端第二弹:善用meta

2016/04/19 · CSS · Meta

原来的文章出处: 杜瑶(@doyoe)   

浏览器渲染原理

在研商 Composite 在此之前,有须要先轻巧领会下一些浏览器(本文只是对准 Chrome 来讲)的渲染原理,方便对之后有的定义的通晓。更加的多详细的原委可以参阅 GPU Accelerated Compositing in Chrome

注:由于 Chrome 对 Blank 引擎有个别达成的修改,有些大家事先熟习的类名有了改造,举个例子 RenderObject 变成了 LayoutObject,RenderLayer 形成了 PaintLayer。感兴趣的看以参阅 Slimming Paint。

在浏览器中,页面内容是积存为由 Node 对象组成的树状结构,也便是 DOM 树。每三个 HTML element 成分都有多个 Node 对象与之对应,DOM 树的根节点永恒都以 Document Node。那一点亲信我们都很通晓了,但实则,从 DOM 树到最终的渲染,需求开展局地转移映射。

图片 15

一、CSS是门重经验重积攒的课程

上边那张截图是自家转发一篇z-index相关文章时候的褒贬,因为自个儿加了一句“学习了”,以作者之见其实很健康的,因为自个儿的确不知道opacitytransform等新属性会潜移暗化因素的z-index

图片 16

CSS的求学,就本人个人看来,是有别于JavaScript这张守旧程序语言的读书的。自个儿品质就多,值也多,区别性别质在一道表现也差别,差别属性和见仁见智类型的HTML标签在一同又区别样,再加上包容性差别和未定义行为。就好像很八个不分明因素,有着Infiniti多的整合和或者。精通这么些不肯定,看书是纯属缺乏的,一定是要多多推行,多多思索,多多储存。对于底层机理的敞亮,也是索要明确的纯天然的。

之所以,就是协调非常多年直接与CSS紧凑打交道,学习它,也可能有比比较多不明了的,通晓不透顶,大概说因为要学习和考虑的事物太多,还不如估量到一些品质可能申明。

举个例子说本文要介绍的word-break:break-allword-wrap:break-word, 纵然皆有利用,都照过面,实际上,却一向尚未机缘能够完美看看这多个究竟有啥样分别,各样浏览器的宽容性怎么着,等等。换句话说,便是尖锐掌握。

1.移动端开拓视窗口的丰盛

h5端开垦上面这段话是必须配备的

XHTML

meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">

1
meta name="viewport" content="width=device-width, initial-scale=1, user-scalable=no">

别的有关布署内容如下:

  • width viewport 宽度(数值/device-width)
  • height viewport 高度(数值/device-height)
  • initial-scale 初叶缩放比例
  • maximum-scale 最大缩放比例
  • minimum-scale 最小缩放比例
  • user-scalable 是或不是同意顾客缩放(yes/no)
  • minimal-ui iOS 7.1 beta 2 中新扩张属性(注意:iOS8中曾经删除),可以在页面加载时最小化上下状态栏。

前言

在移步前端第一弹:viewport详解中,大家讲了viewport,那是一个有关meta的典故。这一次我们会就将meta以此旧事讲得更遍布、越来越有趣一些。

写过HTML的童鞋,应该都对那些不不熟悉,或用它来定义页面编码,或用它来定义寻找引擎抓取格局,或用它定义页面关键字,描述等等。

从 Nodes 到 LayoutObjects

DOM 树中得每一种 Node 节点都有多少个应和的 LayoutObject 。LayoutObject 知道什么在荧屏上 paint Node 的从头到尾的经过。

二、了解word-break属性

MDN上呈现的语法为:

CSS

/* 关键字值 */ word-break: normal; word-break: break-all; word-break: keep-all; /* 全局值 */ word-break: inherit; word-break: initial; word-break: unset;

1
2
3
4
5
6
7
8
9
/* 关键字值 */
word-break: normal;
word-break: break-all;
word-break: keep-all;
 
/* 全局值 */
word-break: inherit;
word-break: initial;
word-break: unset;

多少个关键字值的意义如下:

normal
动用暗中同意的换行准绳。

break-all
同意大肆非CJK(Chinese/Japanese/Korean)文本间的单词断行。

keep-all
不容许CJK(Chinese/Japanese/Korean)文本中的单词换行,只好在半角空格或连字符处换行。非CJK文本的行为其实和normal一致。

其中,break-all其一值全部浏览器都援救。可是keep-all就不这么了,就算有一定的前行和发展 – Chrome44行业内部扶植了,不过,iOS下的Safari8/9都还不扶植(下表均酱色的意味不帮助keep-all)。换句话说,基本上今后运动端还不符合利用word-break:keep-all.图片 17

上边的包容性数据最小面这行文字很有趣:

Chrome, Safari and other WebKit/Blink browsers also support the unofficial break-word value which is treated like word-wrap: break-word.

翻译成简体中文就是:

Chrome, Safari乃至任何WebKit/Blink浏览器还协理费官方正规的break-word值,其表现就和word-wrap: break-word一样。

OK,其他二个男二号登台了,word-wrap.

2.媒体询问的精雕细琢

在此以前在做活动端支出的时候,为了适配多显示屏。使用的是rem 单位。那年就须要基于荧屏的尺码来来动态的安装根节点htmlfont-size 值。那样能够消除多显示屏适配的主题素材。
譬喻说上面包车型客车 传播媒介询问代码

XHTML

html { //iphone5 font-size: 62.5%; } @media (max-width: 414px) { html { //iphone6+ font-size: 80.85%; } } @media (max-width: 375px) { html { //iphone6 font-size: 73.24%; } }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
html {
    //iphone5
    font-size: 62.5%;
}
@media (max-width: 414px) {
    html {
        //iphone6+
        font-size: 80.85%;
    }
}
@media (max-width: 375px) {
    html {
        //iphone6
        font-size: 73.24%;
    }
}

如此这般做的结果,有多个很显著的缺点

  • 适配显示器的尺码不是三番四回的。
  • 在大团结的 css 文件中丰盛大段的那样查询代码。扩大了 css 文件的容量。

新兴仿效天猫移动端页面适配准则,使用 js 获取顾客端的幅度,根据设计稿的原型动态的估测计算font-size 的值。

详见的开始和结果请看这里 逸事索尼爱立信6设计稿动态总结rem值

meta列表

好的meta动用,能更加好地抓好页面包车型客车可用性及被搜寻的可能率。

此间并不会列出富有的meta运用办法,只选拔部分常用及实际意义十分的大的出口,当然也满含部分厂商私有定制的。

 

从 LayoutObjects 到 PaintLayers

常常的话,具备一致的坐标空间的 LayoutObjects,属于同多个渲染层(PaintLayer)。PaintLayer 最先是用来促成 stacking contest(层叠上下文),以此来担保页面成分以科学的逐条合成(composite),这样能力正确的显得成分的重叠以至半晶莹剔透成分等等。由此满意形成层叠上下文条件的 LayoutObject 一定会为其创建新的渲染层,当然还应该有任何的部分分歧平常境况,为部分不一样日常的 LayoutObjects 创造八个新的渲染层,比方 overflow != visible 的因素。根据创立 PaintLayer 的原委莫衷一是,能够将其分为常见的 3 类:

  • NormalPaintLayer
    • 根元素(HTML)
    • 有总之的固化属性(relative、fixed、sticky、absolute)
    • 透明的(opacity 小于 1)
    • 有 CSS 滤镜(fliter)
    • 有 CSS mask 属性
    • 有 CSS mix-blend-mode 属性(不为 normal)
    • 有 CSS transform 属性(不为 none)
    • backface-visibility 属性为 hidden
    • 有 CSS reflection 属性
    • 有 CSS column-count 属性(不为 auto)或者 有 CSS column-width 属性(不为 auto)
    • 当下有对于 opacity、transform、fliter、backdrop-filter 应用动画
  • OverflowClipPaintLayer
    • overflow 不为 visible
  • NoPaintLayer
    • 没有需求 paint 的 PaintLayer,比方四个未有视觉属性(背景、颜色、阴影等)的空 div。

满意以上原则的 LayoutObject 会具备独立的渲染层,而任何的 LayoutObject 则和其首先个具备渲染层的父成分共用三个。

三、了解word-wrap属性

MDN上展现的语法为:

CSS

/* 关键字值 */ word-wrap: normal; word-wrap: break-word; /* 全局值 */ word-wrap: inherit; word-wrap: initial; word-wrap: unset;

1
2
3
4
5
6
7
8
/* 关键字值 */
word-wrap: normal;
word-wrap: break-word;
 
/* 全局值 */
word-wrap: inherit;
word-wrap: initial;
word-wrap: unset;

多少个关键字值的意思如下:

normal
不畏大家平日见得最多的平常化的换行准则。

break-word
一行单词中实际未有别的可信赖的换行点的时候换行。

word-wrap属性其实也是很有传说的,此前由于和word-break长得太像,难免会令人记不住搞混淆,晕头转向,于是在CSS3正规里,把那一个特性的称呼给改了,叫做:overflow-wrap. 哎哎,这么些新属性名称分明语义更加纯粹,也更易于差别和回忆。

只是呢,恕小编赵嘉咳两声,也就Chrome/Safari等WebKit/Blink浏览器援救。

就此,尽管换了个美观好用的新名字,为了合营使用,近年来,依然婴儿使用word-wrap啊。宽容性见下表(暗黄色的象征不扶植overflow-wrap新的职业属性的):图片 18

3.a标签内容语义化

非常多时候大家都会给一片区域丰裕点击跳转的法力。如下图:

图片 19

一点都不小概大家商品区域都以使用的div 标签。很轻松大家会给最外层加上一个 a 标签。因为a 是行内成分,是绝非宽和高的。无法把容器撑开。
一种消除办法正是给a 标签设置block 属性。如下:

XHTML

<style> a{display:block;} </style> <a> <div></div> </a>

1
2
3
4
5
6
7
<style>
    a{display:block;}
</style>
 
<a>
    <div></div>
</a>

功效上业已平常。不过在语义化的框框上,上面的代码是不职业的。

最棒的做法正是做如下的更改,那样不会使和睦的 html 代码显的太意料之外:

XHTML

<style> a{display:block;} span{dispaly:block;} </style> <a> <span></span> <span></span> <span></span> </a>

1
2
3
4
5
6
7
8
9
10
<style>
a{display:block;}
span{dispaly:block;}
</style>
 
<a>
    <span></span>
    <span></span>
    <span></span>
</a>

常规

从 PaintLayers 到 GraphicsLayers

少数特殊的渲染层会被以为是合成层(Compositing Layers),合成层具备独立的 GraphicsLayer,而此外不是合成层的渲染层,则和其首先个颇负 GraphicsLayer 父层公用一个。

各样 GraphicsLayer 都有三个 GraphicsContext,GraphicsContext 会负担输出该层的位图,位图是积攒在分享内部存储器中,作为纹理上传到 GPU 中,最终由 GPU 将多少个位图进行合成,然后 draw 到显示屏上,此时,大家的页面也就显示到了显示屏上。

渲染层提高为合成层的案由有须臾间三种:

注:渲染层提高为合成层有三个先决条件,该渲染层必须是 SelfPaintingLayer(基本可感觉是上文介绍的 NormalPaintLayer)。以下所评论的渲染层提高为合成层的气象都是在该渲染层为 SelfPaintingLayer 前提下的。

  • 直接原因(direct reason)
    • 硬件加快的 iframe 成分(举个例子 iframe 嵌入的页面中有合成层)demo
    • video 元素
    • 蒙面在 video 成分上的录像调节栏
    • 3D 或然 硬件加快的 2D Canvas 成分
      • demo:普通 2D Canvas 不会进级为合成层
      • demo:3D Canvas 进步为合成层
    • 硬件加快的插件,比如 flash 等等
    • 在 DPI 较高的显示器上,fix 定位的要素会活动地被提高到合成层中。但在 DPI 好低的设施上却其实不然,因为那个渲染层的进步会使得字体渲染格局由子像素变为灰阶(详细内容请仿照效法:Text Rendering)
    • 有 3D transform
    • backface-visibility 为 hidden
    • 对 opacity、transform、fliter、backdropfilter 应用了 animation 或许 transition(需倘诺 active 的 animation 可能 transition,当 animation 或然 transition 效果未初步或收尾后,升高合成层也会失效)
      • demo:animation
      • demo:transition图片 20
    • will-change 设置为 opacity、transform、top、left、bottom、right(当中 top、left 等急需设置分明的一贯属性,如 relative 等)demo
  • 子孙成分原因
    • 有合成层后代相同的时间自己有 transform、opactiy(小于 1)、mask、fliter、reflection 属性 demo
    • 有合成层后代同一时间笔者 overflow 不为 visible(假设本身是因为断定的原则性因素产生的 SelfPaintingLayer,则必要 z-index 不为 auto) demo
    • 有合成层后代同有的时候候自己 fixed 定位 demo
    • 有 3D transfrom 的合成层后代同不常候自己有 preserves-3d 属性 demo
    • 有 3D transfrom 的合成层后代同有的时候间本人有 perspective 属性 demo
  • overlap 重叠原因怎会因为重叠原因此发出合成层呢?举个轻巧的板栗。图片 21灰白的矩形重叠在荧光色矩形之上,同一时候它们的父成分是一个GraphicsLayer。此时就算古铜黑矩形为八个 GraphicsLayer,就算 overlap 不可能提拔合成层的话,那么樱桃红矩形不会提高为合成层,也就能够和父成分公用三个GraphicsLayer。图片 22此刻,渲染顺序就能发出错误,因而为保障渲染顺序,overlap 也改为了合成层产生的来由,约等于之类的正常境况。图片 23自然 overlap 的原因也会细分为几类,接下去大家会详细看下。
    • 臃肿只怕说部分重叠在三个合成层之上。那什么样究竟重叠呢,最常见和轻松精晓的正是因素的 border box(content + padding + border) 和合成层的有重合,比如:demo,当然 margin area 的交汇是船到江心补漏迟的(demo)。其余的还有局地临时见的场合,也终于同合成层重叠的规范化,如下:
      • filter 效果同合成层重叠 demo
      • transform 转换后同合成层重叠 demo
      • overflow scroll 景况下同合成层重叠。即只要一个 overflow scroll(不管 overflow:auto 还是 overflow:scrill,只即便能 scroll 就可以) 的元素同多个合成层重叠,则其可视子成分也同该合成层重叠 demo
    • 倘诺重叠在三个合成层之上(assumedOverlap)。那些原因听起来有一点虚,什么叫要是重叠?其实也相比好驾驭,比方贰个成分的 CSS 动画功效,动画运转时期,成分是有相当的大希望和任何因素有臃肿的。针对于这种景色,于是就有了 assumedOverlap 的合成层发生原因,示例可知:demo。在本 demo 中,动画元素视觉上并不曾和其兄弟成分重叠,但因为 assumedOverlap 的源委,其兄弟成分照旧进步为了合成层。要求留意的是该原因下,有叁个很独特的情况:借使合成层有内联的 transform 属性,会产生其兄弟渲染层 assume overlap,进而进步为合成层。比如:demo。

四、回归第一,word-break:break-all和word-wrap:break-word的差异

尼玛,说这三个表明不是手足都没人信,都有word都有break,地方都还一致,三个有2个break, 一个有2个word, 妥妥儿的用来糊弄大家的。笔者是花了非常多年才未有把那三个记混淆,此前,每趟用到都要查一下,晕死人的要~

图片 24

那四个证明都能是三翻五次英语字符换行,那差别在何地呢?

您能够狠狠地方击这里:word-break:break-all和word-wrap:break-word的区别demo

会意识附近下图的法力:
图片 25

能够开采,word-break:break-all正如其名字,全数的都换行。毫不留情,一点空子都不放过。而word-wrap:break-word则含有怜悯之心,假若这一行文字有能够换行的点,如空格,或CJK(Chinese/Japanese/Korean)(汉语/法语/希伯来语)之类的,则就不打拉脱维亚语单词或字符的主心骨了,让那些换行点换行,至于对不对齐,好不佳看,则不爱戴,因此,很轻便出现一片一片水肿同样的空域的意况。

OK, 应该很轻松get那个tips的。

有关怎么着回想那八个CSS评释呢?

首字母走起:wbba(微博吧), wwbw(小编五百万).

4.为投机的页面设置最大开间和微小宽度

倘使大家运用的是rem 单位,使用 js 动态总结font-size 值的话,大家得以Infiniti适配最大和纤维的极端荧屏。可是当客商的显示器抢先一定的尺码以后还承继显示h5h5开辟有关内容总计,移动前端开采之viewport的深远领悟。页面包车型地铁话对客商会特不和睦。
我们参看下京东和天猫的h5 页面

图片 26
图片 27

大家来看了都是概念了页面包车型大巴最大和微小宽度。那样在荧屏超越一定的尺寸现在能够更友善的展现(本来那不是必得的)。

自个儿给协和的出品页面定义的最大的大幅和纤维宽度分别是:

CSS

{ max-width:640px; min-width:320px; }

1
2
3
4
{
    max-width:640px;
    min-width:320px;
}

宣示文书档案使用的字符编码

XHTML

<meta charset="utf-8" />

1
<meta charset="utf-8" />

该证明用来内定文书档案的编码,除了utf-8,可选值还会有:ISO-8859-1、BIG5、iso-8859-2, iso-2022-jp, iso-2022-kr, gb2312等

自然,你恐怕还见过使用别的一种艺术来定义文书档案字符编码:

XHTML

<meta http-equiv="content-type" content="text/html; charset=utf-8" />

1
<meta http-equiv="content-type" content="text/html; charset=utf-8" />

对峙于这种方法,更推荐你选择第1种,话里有话,正是引进应用HTML5

层压缩

大抵周边的一部分合成层的升官原因如上所说,你会发现,由于重叠的原由,恐怕Infiniti制就能够发生出大量合成层来,而各样合成层都要成本CPU 和内部存款和储蓄器财富,岂不是严重影响页面质量。那点浏览器也虚拟到了,因而就有了层压缩(Layer Squashing)的管理。若是三个渲染层同贰个合成层重叠时,这一个渲染层会被裁减到二个GraphicsLayer 中,防止备出于重叠原因形成可能现身的“层爆炸”。具体可以看如下 demo。一齐始,深橙方块由于
translateZ 提高为了合成层,别的的四方成分因为重叠的案由,被核减了一块儿,大小就是带有这3 个方块的矩形大小。

图片 28

当我们 hover 紫灰方块时,会给其安装 translateZ 属性,导致鲜蓝方块也被提高为合成层,则剩下的三个被削减到了一道,大小就减弱为带有这2 个方块的矩形大小。

图片 29

自然,浏览器的机动的层压缩亦非万能的,有那个特定情景下,浏览器是力不胜任张开层压缩的,如下所示,而这么些情状也是大家理应尽量防止的。(注:以下情况都是依靠重叠原由此言)

  • 心有余而力不足进展会打破渲染顺序的减弱(squashingWouldBreakPaintOrder)示比方下:demo
CSS

#ancestor { -webkit-mask-image:
-webkit-linear-gradient(rgba(0,0,0,1), rgba(0,0,0,0)); }
#composited { width: 100%; height: 100%; transform: translateZ(0);
} #container { position: relative; width: 400px; height: 60px;
border: 1px solid black; } #overlap-child { position: absolute;
left: 0; top: 0 ; bottom: 0px; width: 100%; height: 60px;
background-color: orange; }

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-8">
8
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-9">
9
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-10">
10
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-11">
11
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-12">
12
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-13">
13
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-14">
14
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-15">
15
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-16">
16
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-17">
17
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-18">
18
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-19">
19
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-20">
20
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-21">
21
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-22">
22
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-23">
23
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-24">
24
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201886f149137440-25">
25
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201886f149137440-26">
26
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6d201886f149137440-1" class="crayon-line">
  #ancestor {
</div>
<div id="crayon-5b8f6d201886f149137440-2" class="crayon-line crayon-striped-line">
    -webkit-mask-image: -webkit-linear-gradient(rgba(0,0,0,1), rgba(0,0,0,0));
</div>
<div id="crayon-5b8f6d201886f149137440-3" class="crayon-line">
  }
</div>
<div id="crayon-5b8f6d201886f149137440-4" class="crayon-line crayon-striped-line">
  
</div>
<div id="crayon-5b8f6d201886f149137440-5" class="crayon-line">
  #composited {
</div>
<div id="crayon-5b8f6d201886f149137440-6" class="crayon-line crayon-striped-line">
    width: 100%;
</div>
<div id="crayon-5b8f6d201886f149137440-7" class="crayon-line">
    height: 100%;
</div>
<div id="crayon-5b8f6d201886f149137440-8" class="crayon-line crayon-striped-line">
    transform: translateZ(0);
</div>
<div id="crayon-5b8f6d201886f149137440-9" class="crayon-line">
  }
</div>
<div id="crayon-5b8f6d201886f149137440-10" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6d201886f149137440-11" class="crayon-line">
  #container {
</div>
<div id="crayon-5b8f6d201886f149137440-12" class="crayon-line crayon-striped-line">
    position: relative;
</div>
<div id="crayon-5b8f6d201886f149137440-13" class="crayon-line">
    width: 400px;
</div>
<div id="crayon-5b8f6d201886f149137440-14" class="crayon-line crayon-striped-line">
    height: 60px;
</div>
<div id="crayon-5b8f6d201886f149137440-15" class="crayon-line">
    border: 1px solid black;
</div>
<div id="crayon-5b8f6d201886f149137440-16" class="crayon-line crayon-striped-line">
  }
</div>
<div id="crayon-5b8f6d201886f149137440-17" class="crayon-line">
 
</div>
<div id="crayon-5b8f6d201886f149137440-18" class="crayon-line crayon-striped-line">
  #overlap-child {
</div>
<div id="crayon-5b8f6d201886f149137440-19" class="crayon-line">
    position: absolute;
</div>
<div id="crayon-5b8f6d201886f149137440-20" class="crayon-line crayon-striped-line">
    left: 0;
</div>
<div id="crayon-5b8f6d201886f149137440-21" class="crayon-line">
    top: 0 ;
</div>
<div id="crayon-5b8f6d201886f149137440-22" class="crayon-line crayon-striped-line">
    bottom: 0px;
</div>
<div id="crayon-5b8f6d201886f149137440-23" class="crayon-line">
    width: 100%;
</div>
<div id="crayon-5b8f6d201886f149137440-24" class="crayon-line crayon-striped-line">
    height: 60px;
</div>
<div id="crayon-5b8f6d201886f149137440-25" class="crayon-line">
    background-color: orange;
</div>
<div id="crayon-5b8f6d201886f149137440-26" class="crayon-line crayon-striped-line">
  }
</div>
</div></td>
</tr>
</tbody>
</table>




XHTML

&lt;div id="container"&gt; &lt;div id="composited"&gt;Text behind
the orange box.&lt;/div&gt; &lt;div id="ancestor"&gt; &lt;div
id="overlap-child"&gt;&lt;/div&gt; &lt;/div&gt; &lt;/div&gt;

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6d201887b075031864-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201887b075031864-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201887b075031864-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201887b075031864-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6d201887b075031864-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d201887b075031864-6">
6
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6d201887b075031864-1" class="crayon-line">
&lt;div id=&quot;container&quot;&gt;
</div>
<div id="crayon-5b8f6d201887b075031864-2" class="crayon-line crayon-striped-line">
  &lt;div id=&quot;composited&quot;&gt;Text behind the orange box.&lt;/div&gt;
</div>
<div id="crayon-5b8f6d201887b075031864-3" class="crayon-line">
  &lt;div id=&quot;ancestor&quot;&gt;
</div>
<div id="crayon-5b8f6d201887b075031864-4" class="crayon-line crayon-striped-line">
    &lt;div id=&quot;overlap-child&quot;&gt;&lt;/div&gt;
</div>
<div id="crayon-5b8f6d201887b075031864-5" class="crayon-line">
  &lt;/div&gt;
</div>
<div id="crayon-5b8f6d201887b075031864-6" class="crayon-line crayon-striped-line">
&lt;/div&gt;
</div>
</div></td>
</tr>
</tbody>
</table>
  • video 成分的渲染层不能够被削减同一时间也力所比不上将别的渲染层压缩到 video 所在的合成层上(squashingVideoIsDisallowed)demo
  • iframe、plugin 的渲染层不只怕被压缩同不常候也力不能够及将其余渲染层压缩到其所在的合成层上(squashingLayoutPartIsDisallowed)demo
  • 不能回降有 reflection 属性的渲染层(squashingReflectionDisallowed)demo
  • 不恐怕回降有 blend mode 属性的渲染层(squashingBlendingDisallowed)demo
  • 当渲染层同合成层有两样的剪裁容器(clipping container)时,该渲染层无法回降(squashingClippingContainerMismatch)。示举例下:demo
CSS

.clipping-container { overflow: hidden; height: 10px;
background-color: blue; } .composited { transform: translateZ(0);
height: 10px; background-color: red; } .target { position:absolute;
top: 0px; height:100px; width:100px; background-color: green; color:
#fff; }

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-4">
4
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-5">
5
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-6">
6
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-7">
7
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-8">
8
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-9">
9
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-10">
10
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-11">
11
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-12">
12
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-13">
13
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-14">
14
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-15">
15
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-16">
16
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-17">
17
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-18">
18
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-19">
19
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-20">
20
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-21">
21
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018880297868155-22">
22
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018880297868155-23">
23
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6d2018880297868155-1" class="crayon-line">
.clipping-container {
</div>
<div id="crayon-5b8f6d2018880297868155-2" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6d2018880297868155-3" class="crayon-line">
    overflow: hidden;
</div>
<div id="crayon-5b8f6d2018880297868155-4" class="crayon-line crayon-striped-line">
    height: 10px; 
</div>
<div id="crayon-5b8f6d2018880297868155-5" class="crayon-line">
    background-color: blue;
</div>
<div id="crayon-5b8f6d2018880297868155-6" class="crayon-line crayon-striped-line">
  }
</div>
<div id="crayon-5b8f6d2018880297868155-7" class="crayon-line">
 
</div>
<div id="crayon-5b8f6d2018880297868155-8" class="crayon-line crayon-striped-line">
  .composited {
</div>
<div id="crayon-5b8f6d2018880297868155-9" class="crayon-line">
 
</div>
<div id="crayon-5b8f6d2018880297868155-10" class="crayon-line crayon-striped-line">
    transform: translateZ(0); 
</div>
<div id="crayon-5b8f6d2018880297868155-11" class="crayon-line">
    height: 10px; 
</div>
<div id="crayon-5b8f6d2018880297868155-12" class="crayon-line crayon-striped-line">
    background-color: red;
</div>
<div id="crayon-5b8f6d2018880297868155-13" class="crayon-line">
  }
</div>
<div id="crayon-5b8f6d2018880297868155-14" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6d2018880297868155-15" class="crayon-line">
  .target {
</div>
<div id="crayon-5b8f6d2018880297868155-16" class="crayon-line crayon-striped-line">
 
</div>
<div id="crayon-5b8f6d2018880297868155-17" class="crayon-line">
    position:absolute; 
</div>
<div id="crayon-5b8f6d2018880297868155-18" class="crayon-line crayon-striped-line">
    top: 0px; 
</div>
<div id="crayon-5b8f6d2018880297868155-19" class="crayon-line">
    height:100px; 
</div>
<div id="crayon-5b8f6d2018880297868155-20" class="crayon-line crayon-striped-line">
    width:100px; 
</div>
<div id="crayon-5b8f6d2018880297868155-21" class="crayon-line">
    background-color: green;
</div>
<div id="crayon-5b8f6d2018880297868155-22" class="crayon-line crayon-striped-line">
    color: #fff;
</div>
<div id="crayon-5b8f6d2018880297868155-23" class="crayon-line">
  }
</div>
</div></td>
</tr>
</tbody>
</table>




XHTML

&lt;div class="clipping-container"&gt; &lt;div
class="composited"&gt;&lt;/div&gt; &lt;/div&gt; &lt;div
class="target"&gt;不会被压缩到 composited div 上&lt;/div&gt;

<table>
<colgroup>
<col style="width: 50%" />
<col style="width: 50%" />
</colgroup>
<tbody>
<tr class="odd">
<td><div class="crayon-nums-content" style="font-size: 13px !important; line-height: 15px !important;">
<div class="crayon-num" data-line="crayon-5b8f6d2018884301689224-1">
1
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018884301689224-2">
2
</div>
<div class="crayon-num" data-line="crayon-5b8f6d2018884301689224-3">
3
</div>
<div class="crayon-num crayon-striped-num" data-line="crayon-5b8f6d2018884301689224-4">
4
</div>
</div></td>
<td><div class="crayon-pre" style="font-size: 13px !important; line-height: 15px !important; -moz-tab-size:4; -o-tab-size:4; -webkit-tab-size:4; tab-size:4;">
<div id="crayon-5b8f6d2018884301689224-1" class="crayon-line">
&lt;div class=&quot;clipping-container&quot;&gt;
</div>
<div id="crayon-5b8f6d2018884301689224-2" class="crayon-line crayon-striped-line">
  &lt;div class=&quot;composited&quot;&gt;&lt;/div&gt;
</div>
<div id="crayon-5b8f6d2018884301689224-3" class="crayon-line">
&lt;/div&gt;
</div>
<div id="crayon-5b8f6d2018884301689224-4" class="crayon-line crayon-striped-line">
&lt;div class=&quot;target&quot;&gt;不会被压缩到 composited div 上&lt;/div&gt;
</div>
</div></td>
</tr>
</tbody>
</table>


本例中 .target 同 合成层 `.composited` 重叠,但是由于
.composited`在一个 overflow: hidden 的容器中,导致 .target 和合成层有不同的裁剪容器,从而 `.target` 无法被压缩。`
  • 对峙于合成层滚动的渲染层不能被核减(scrollsWithRespectToSquashingLayer)示比方下:demo

CSS

body { height: 1500px; overflow-x: hidden; } .composited { width: 50px; height: 50px; background-color: red; position: absolute; left: 50px; top: 400px; transform: translateZ(0); } .overlap { width: 200px; height: 200px; background-color: green; position: fixed; left: 0px; top: 0px; }

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
body {
    height: 1500px;
    overflow-x: hidden;
  }
 
  .composited {
 
    width: 50px;
    height: 50px;
    background-color: red;
    position: absolute;
    left: 50px;
    top: 400px;
    transform: translateZ(0);
  }
 
  .overlap {
    width: 200px;
    height: 200px;
    background-color: green;
    position: fixed;
    left: 0px;
    top: 0px;
  }

XHTML

<div class="composited"></div> <div class="overlap"></div>

1
2
<div class="composited"></div>
<div class="overlap"></div>

本例中,红色的 .composited提升为了合成层,绿色的.overlapfix 在页面顶部,一开始只有.composited合成层。

![]()

当滑动页面,.overlap重叠到.composited上时,.overlap` 会因重叠原因进步为合成层,相同的时候,因为绝对于合成层滚动,由此不大概被减去。

![]()

  • 当渲染层同合成层有例外的富有 opacity 的祖先层(叁个设置了 opacity 且低于 1,叁个并未有安装 opacity,也终归分歧)时,该渲染层无法回退(squashingOpacityAncestorMismatch,同 squashingClippingContainerMismatch)demo
  • 当渲染层同合成层有不相同的具有 transform 的祖宗层时,该渲染层无法回降(squashingTransformAncestorMismatch,同上) demo
  • 当渲染层同合成层有例外的富有 filter 的祖宗层时,该渲染层不可能回退(squashingFilterAncestorMismatch,同上)demo
  • 当覆盖的合成层正在周转动画时,该渲染层不能够回退(squashingLayerIsAnimating),当动画未起头依旧运营完毕之后,该渲染层才得以被压缩 demo图片 30

五、结束语,扯下word-spacing和white-space

word-spacing是单词之间间距的,white-space是字符是还是不是换行展现的。

OK,困了,不开展了。

最终,问咱们四个难点……

大家有未有感到……

下边那张图……

图片 31

长得很像……尔康?

图片 32

1 赞 2 收藏 2 评论

图片 33

5.去掉 a,input 在活动端浏览器中的私下认可样式

阐明页面刷新或跳转

XHTML

<meta http-equiv="refresh" content="10" /> <meta http-equiv="refresh" content="10; url=" />

1
2
<meta http-equiv="refresh" content="10" />
<meta http-equiv="refresh" content="10; url=http://www.doyoe.com" />

该表明用来钦点页面自刷新只怕跳转到别的页面,此中的年华单位是s

编辑:云顶娱乐 本文来源:h5开辟有关内容总计,移动前端开采之viewport的深

关键词: