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

中的层叠上下文初探,掩瞒页面成分的

时间:2019-11-04 06:26来源:云顶娱乐
CSS3硬件加速也会有坑 2015/09/20 · CSS ·硬件加快 原稿出处: 张云龙(英文名:Leon卡塔 尔(阿拉伯语:قطر‎(@前端村里人工)    常听人说: 移步端要想动漫质量流畅,应该使用3d硬件

CSS3硬件加速也会有坑

2015/09/20 · CSS · 硬件加快

原稿出处: 张云龙(英文名:Leon卡塔 尔(阿拉伯语:قطر‎(@前端村里人工)   

常听人说:

移步端要想动漫质量流畅,应该使用3d硬件加快

近年浓郁明白了有些浏览器内核的细节,感到那中间其实有坑啊。。。

政工要从眼下看的《WebKit殊技艺术内部原因》聊到,第二章介绍了网页的组织,当中涉嫌了Webkit硬件加快的法子,会把要求渲染的因素放到一定的『Composited Layer』中,在chrome的调控台能够如此开启:

图片 1

分选『Show composited layer borders』现在,就能够看出有动漫3d调换的成分会被一个艳情的边框圈起来,表示放到了一个新的『复合层(composited layer卡塔尔国』中渲染,差相当少长这些样子:

图片 2

品绿的细线是浏览器渲染时候的『瓦片』,浏览器绘制页面的时候只会绘制可视区域一定约束内的瓦片,以节约品质费用,而水泥灰的边框框起来的,就象征了那一个因素被平放特殊的复合层中渲染,跟主文书档案不在一个层中

然后本人以为那一个视图挺风趣的,就拿来看了黄金时代晃本国某项目,不看不知道,生龙活虎看被吓尿:

图片 3

本条项目怎么时候搞成具备因素都用3d加速了?!

周全排查了那么些被框出来的成分,完全未有别的索要复合层渲染的迹象,笔者当成哔了狗了。。。小编起来一个个删减成分,简化代码,相当的慢就发现,原来罪魁祸首在此边:

图片 4

尾部的格外轮播动漫元素的存在以致会导致上边全部相对和相对定位的要素都被放到复合层中。。。

查了部分 资料:

层创造标准

什么动静下能使元素获得本人的层?即便 Chrome 的启迪式方法(heuristic)随着年华在持续前进发展,然则从脚下来讲,知足以下任性景况便会创立层:

  • 3D 或透视转换(perspective transform) CSS 属性
  • 利用加速录像解码的 成分
  • 不无 3D (WebGL) 上下文或加紧的 2D 上下文的 成分
  • 掺杂插件(如 Flash)
  • 对自个儿的 opacity 做 CSS 动漫或行使贰个动漫 webkit 转换的成分
  • 全数加快 CSS 过滤器的要素
  • 要素有三个含有复合层的儿孙节点(换句话说,便是二个要素具有叁个子成分,该子成分在团结的层里)
  • 要素有三个 z-index 相当低且包括一个复合层的小朋友成分(换句话说正是该因素在复合层上边渲染)

首假如最终一条,我觉着它的汉译不是很规范,原版的书文其实是:

Element has a sibling with a lower z-index which has a compositing layer (in other words the it’s rendered on top of a composited layer)

这句话的意味是,假如有三个要素,它的汉子儿成分在复合层中渲染,而那个兄弟成分的z-index超级小,那么这几个成分(不管是还是不是利用了硬件加快样式卡塔尔也会被置于复合层中。

最恐怖的是,浏览器有相当的大希望给复合层之后的持有相对或相对定位的成分都成立一个复合层来渲染,于是就有了下面拾贰分项目截图的那种效果。早先一向奇异为啥这几个页面滚动很卡,明明未有稍稍DOM,今后简来讲之难题就在这里边了!

于是作者写了一个页面,让大家看看那东西到底有多大威力:

图片 5

本身在上头这么些页面中放置了七个h1标题,应用了translate3d动漫,使得它被放置composited layer中渲染,然后在这里个因素前边创造了2003个list,每种list中都有叁个图片,三个标题和贰个日子彰显,个中图片和日期展现是纯属定位,父容器li是周旋固化,然后,各位能够遵从前述的证实张开chrome的『show composited layer borders』选项看看这么些页面包车型大巴源委复合层分布:

图片 6

正是那些鸟样子,很难想象,那样的页面滚动起来会卡成什么样。笔者用的是mac机器,连忙拖动滚动条chrome已经非常费劲了,然后作者写了叁个精简的滚动条移动操作:

setInterval(‘document.body.scrollTop++’, 0);

接下来用timeline抓一下页面质量:

图片 7

三次『Composite Layers』的思量依旧要 96.206 ms !!那仍然在作者的mac系统上哦,手提式无线电电话机上真正会卡出翔。

作者在页面上停放了三个开关『为卡通成分设置z-index』,那一个checkbox点击之后,会用js给这个动漫的h1成分加 position:relative 和 z-index: 1 ,这种做法的原理是人为升高动漫成分的z-index,让浏览器知道那些成分的层排序,就不会很傻逼的把别的z-index比它高的因素也弄到复合层中了,看看那些作用:

图片 8

单独给动漫成分设置三个高级中学一年级些的z-index,就能够一蹴而就这种无厘头扩张复合层的难点,略无奈。。。化解之后,再用滚动条移动函数抓一下页面质量:

完全苏醒平常了有木有!

世家可以用协助『硬件加快』的『安卓』手提式有线电话机浏览器测量检验上述页面,给动漫成分加z-index前后的性情差异非常鲜明。

只是亦不是享有浏览器都有这几个标题,小编在mac上的Safari、firefox都还未显著反差,安卓手机上的QQ浏览器好像也健康,猎豹、UC、欧朋、webview等浏览器差别分明,更加多测量检验就靠大家来开采吗。

末段总括一下:

行使3D硬件加快进步动漫性能时,最棒给成分增加三个z-index属性,人为困扰复合层的排序,能够使得压缩chrome创设无需的复合层,提高渲染质量,移动端优化效用进一层明显。

大家能够往天就每一个考察一下那类难题,特别是用了轮播、动漫loading的页面,现身那标题很宽泛。别的推荐在追查品质难题的时候张开『show composited layer borders』选项,假如页面有数不清色情的框鲜明是不对的。

末尾,再一次推荐一下《Webkit才具内情》这本书。浏览器内核之于前端程序猿,就像同操作系统之于后端技术员,终究是大家程序运维的宿主情状,多询问部分,很多主题素材轻易想通。

1 赞 1 收藏 评论

图片 9

行内格式化上下文中的各类中度总结

2015/10/11 · CSS · 高度

原稿出处: HaoyCn   

前言碎碎语:标题难题在不久前干扰了小编十分久比较久,早晨把题目关系了各网络也暂时尚未回复。因为前日要早起飞他乡参预一场校招面试,作者依然很紧张的,但奈何难点不清除神魂颠倒……所以依然卯起劲重新思虑这几个标题,算是一时有了二个融洽相比承认甚至清晰的答案,与各位读者共享。如你有例外意见主见意见建议,恳请斧正!

标准斟酌此前,大家入眼一个场地(在 Chrome 下的变现,别的浏览器下的变现和计算恐怕有细微差距卡塔尔:

图片 10

上航海用教室对应的 HTML 是(之后的索求均依据此卡塔 尔(阿拉伯语:قطر‎:

<!DOCTYPE html> <html> <head> <meta charset="utf-8"/> <title>Line Height</title> <style> body { margin: 0; font: 32px/1 'Microsoft YaHei'; } div { width: 400px; margin: 30px auto; outline: 1px solid black; background: #008E59; } img { height: 80px; margin-top: 10px; } </style> </head> <body> <div> <span>Some Text</span> <img src="picture.jpg" alt=""/> </div> </body> </html>

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8"/>
<title>Line Height</title>
<style>
body {
    margin: 0;
    font: 32px/1 'Microsoft YaHei';
}
div {
    width: 400px;
    margin: 30px auto;
    outline: 1px solid black;
    background: #008E59;
}
img {
    height: 80px;
    margin-top: 10px;
}
</style>
</head>
<body>
    <div>
        <span>Some Text</span>
        <img src="picture.jpg" alt=""/>
    </div>
</body>
</html>

我们来估测计算下 DIV 和 SPAN 的万丈

JavaScript

document.getElementsByTagName('div')[0].offsetHeight //93 document.getElementsByTagName('span')[0].offsetHeight //42

1
2
3
4
document.getElementsByTagName('div')[0].offsetHeight
//93
document.getElementsByTagName('span')[0].offsetHeight
//42

对此此图,俺发生如下难题:

  • line-height  为 32px,为啥 SPAN 的惊人为 42px?
  • DIV 的莫大 93px,比 IMG 中度加外边距 90px 以致 SPAN 中度 42px 都要大,怎样总计的?
  • 图形和文件下的空白(虽然未有公文同样存在卡塔 尔(阿拉伯语:قطر‎是如何爆发的?

要是大家把 IMG 删除,HTML 部分改为:

<body> <div> <span>Some Text</span> </div> </body>

1
2
3
4
5
<body>
    <div>
        <span>Some Text</span>
    </div>
</body>

此刻来总括:

JavaScript

document.getElementsByTagName('div')[0].offsetHeight //32 document.getElementsByTagName('span')[0].offsetHeight //42

1
2
3
4
document.getElementsByTagName('div')[0].offsetHeight
//32
document.getElementsByTagName('span')[0].offsetHeight
//42

新主题材料又来了:

  • DIV 的子成分中度为 42px,为什么并没有“撑起” DIV 的中度?

如上难题便是本文要追究的了。覆盖了多少个知识点:

  1. 行内盒(或行内不可替换到分卡塔 尔(阿拉伯语:قطر‎的万丈
  2. 行内可替换来分的可观
  3. 行盒的中度
  4. 行距与行高
  5. 确立行内格式化上下文的块盒的 auto 高度

故此在探究在此之前,作者已假如您领略那一个概念:行内盒、行内不可替换到分、行内可替换来分、行盒、行内格式化上下文。假若你还不怎么不知晓,大家得以高速补习下:

可替换到分、不可替换来分

简易地讲,可替换到分是指须依据其标签和总体性来支配具体彰显内容的要素,如本文中会商讨的 I名爵 成分,其现实呈现内容由  src 等脾气决定; 不可替换来分则是内容一直表现的成分。如本文仲追究的 DIV 和 SPAN 等。

块盒

此概念是块格式化上下文的内容,要表明起来就更目不暇接啦,小编粗陋地给你三个呈报:块盒经常是  display: block 的不行替换来分。

行内级元素、行内级盒、行内盒、行内格式化上下文

display: inline|inline-table|inline-block  产生行内级成分。行内级元素生成行内级盒,而那一个盒会插足行内格式化上下文。

display 值是  inline 的不足替换来分会转移三个行内盒。

不是行内盒的行内级盒被称作原子行内级盒。

图片 11

行盒

在行内格式化上下文中,盒从满含块的最上端三个接二个地水平摆放。包罗了一站式里全数盒的矩形区域被称作行盒。贰个段子正是多少个行盒的垂直聚积。

从而,大家得以得到下图(大概描摹卡塔 尔(英语:State of Qatar):

图片 12

前天开班计算!

CSS 动画的 steps

2015/09/28 · CSS · 动画

正文作者: 伯乐在线 - 中的层叠上下文初探,掩瞒页面成分的。risker 。未经笔者许可,防止转发!
接待参加伯乐在线 专辑小编。

animation默认以ease主意接入,会以在各个关键帧之间插入补间动漫,所以动漫效果是连贯性的。easelinear等等等的连结函数都会为其插入补间。但稍事功用不要求补间,只必要关键帧之间的踊跃,这个时候应该运用steps接通方式。本文后边有案例。

用 CSS 掩盖页面成分的 5 种方式

2016/06/12 · CSS · 蒙蔽元素

原稿出处: Baljeet Rathi   译文出处:十年踪迹(@十年踪迹卡塔尔国   

用 CSS 掩盖页面元素有那个种格局。你能够将 opacity 设为 0、将 visibility 设为 hidden、将 display 设为 none 或者将 position 设为 absolute 然后将地点设到不可以看到区域。

您有未有想过,为何大家要有那样多本领来隐瞒元素,而它们看起来都落到实处的是一模一样的信守?每意气风发种办法其实与其余艺术之间都有一点点微薄的差别,那么些不一致决定了在一个特定的场面下利用哪二个办法。那篇教程将隐讳到那一个你要求牢牢记住的一线差异点,让你依据不一样意况接收方面那几个办法中切合的秘诀来隐敝成分。

CSS3 中的层叠上下文初探

2015/10/09 · CSS · 层叠上下文

原稿出处: HaoyCn   

前言:关于层叠上下文,作者还尚无去阅读更详尽的 W3C 标准来领会越来越精气神的原理(表打笔者,等自家校招得到 offer 了自己就读好伐 T_T卡塔尔国。一向据他们说 CSS3 里的层叠上下文有新景观,但没找到很好的参考资料,故自身实战生龙活虎把。鉴于小编水平有限,如有任何脱漏也许不当,则呼吁读者斧正。

1 行内可替换到分和文书档案流内行内块可替换到分中度总计

W3C 有醒目规范,如下:

万风流倜傥  height 和  width  总计值均为 auto 且该因素有固有中度,那么该固有中度为 height 使用值。

要不然,要是  height 总结值为  auto ,且该因素有贰个原始比例,则  height 的采取值为:

width 使用值 / 固有比例

否则,要是  height 总括值为  auto ,且该因素有固有高度,那么该固有高度为  height 使用值。

不然,假使  height 计算值为  auto ,但上述气象均不相符,那么  height  的使用值必得设定为二个最大矩形的莫斯中国科学技术大学学,该矩形比例为2:1,中度不超越150px,且升幅不超越设备宽度。

所以,在大家的实例中,I名爵 盒的莫斯中国科学技术大学学为 80+10 = 90px。

steps用法

轻易易行地说,就是原先一个境况向另二个状态的接入是平缓的,steps能够兑现布满过渡。steps用法 :

CSS

steps(n,[start | end])

1
steps(n,[start | end])

n是叁个自然数,steps函数把动漫分成n等份。

  • step-start 等同于 steps(1,start) ,动漫分成 1 步,动漫试行时以左手端点为早先
  • step-end 等同于 steps(1,end) ,动漫分成 1 步,动画试行时以最终端点为早先

没懂对不对?作者也没懂,上边是合法的传道。接着往下看呢

Opacity

opacity 属性的情致是安装二个因素的折射率。它不是为转移成分的边界框(bounding box卡塔 尔(阿拉伯语:قطر‎而规划的。那意味着将 opacity 设为 0 只可以从视觉上掩饰元素。而要素本人依然攻陷它本身的职位并对网页的布局起功能。它也将响应顾客人机联作。

CSS

.hide { opacity: 0; }

1
2
3
.hide {
  opacity: 0;
}

借让你策动利用 opacity 属性在读屏软件中隐蔽成分,很不幸,你并不能够通畅。成分和它富有的原委会被读屏软件阅读,就好像网页上的别样因素那样。换句话说,成分的一言一动就和它们不透明时同样。

本人还要提示一句,opacity 属性能够用来达成部分效果与利益很棒的动画片。任何 opacity 属性值小于 1 的要素也会成立叁个新的聚成堆上下文(stacking context)。

看下边包车型客车例子:

看 @SitePoint 提供的事例“用 opacity 蒙蔽成分”

当您的鼠标移到被埋伏的第 2 个的区块上,成分状态平滑地从一点一滴透明过渡到完全不透明。区块也将 cursor 属性设置为了 pointer,那表明了客户能够与它人机联作。

1 CSS2.1 中规定的层叠上下文图片 13

Background and borders — of the element forming the stacking context. The lowest level in the stack.

Negative Z-Index — the stacking contexts of descendants elements with negative z-index.

Block Level Boxes — in-flow non-inline-level non-positioned descendants.

Floated Boxes — non-positioned floats

Inline Boxes — in-flow inline-level non-positioned descendants.

Z-index: 0 — positioned elements. These form new stacking contexts.

Positive Z-index — positioned elements. The highest level in the stack.

图像和文字来源:http://webdesign.tutsplus.com/articles/what-you-may-not-know-about-the-z-index-property–webdesign-16892

今昔该小编上台翻译了!在演讲上边术语在此之前,供给表达七个术语:“定位”指的是 position 为 relative 、absolutefixed 的元素,“非定位”则相反。

  • 背景和边框:创立层叠上下文成分的背景和边框。层叠中的最低等
  • 负 Z-indexz-index 为负的儿孙成分组建的层叠上下文
  • 块级盒:文书档案流内非洲开发银行内级非固定后代成分
  • 浮动盒:非定点变化元素(作者注:即排除了 position: relative 的浮动盒卡塔 尔(英语:State of Qatar)
  • 行内盒:文书档案流内行内级非定点后代成分
  • Z-index: 0:定位成分。这个要素建设构造了新层叠上下文(小编注:不明确,详见后文卡塔 尔(英语:State of Qatar)
  • 正 Z-index:(z-index 为正的卡塔尔定位元素。层叠的万丈阶段

引文如上所表。但小编提醒各位读者一些,“Z-index: 0”级的定位成分不肯定就能够树立新的层叠上下文。因为:

CSS2.1:(z-index: auto)The stack level of the generated box in the current stacking context is 0. The box does not establish a new stacking context unless it is the root element.

当定位成分 z-index: auto,生成盒在近期层叠上下文中的层级为 0。但该盒不树立新的层叠上下文,除非是根成分。

正式是这么,但 IE6-7 有个 BUG,定位元素正是 z-index: auto 照样创制层叠上下文。

如上是依赖 CSS2.1 的层叠上下文介绍。下边要阐释的是在 CSS3 新条件下,层叠上下文的新调换。

编辑:云顶娱乐 本文来源:中的层叠上下文初探,掩瞒页面成分的

关键词: