IT技术博客大学习 共学习 共进步
全部 移动开发 后端 数据库 AI 算法 安全 DevOps 前端 设计 开发者

z-index和zoom这哥俩

灵感_idea 2016-02-18 23:53:30 累计浏览 1,888 次
本机暂存


   今天为什么要谈这个呢?出于一个页面仔的“窥探”欲吧,也可能不是,因为这些本来就是需要知道的,只是可能没有引起太多人注意。

   当然,每个“是什么”的背后都有一个“为什么”,很多人都遇到过“设置了z-index却无用“的问题。

   z-index是干嘛的呢?——设置元素在z轴方向的层级。那么怎么用它才是正确滴捏?

   先来看正常情况下

<div class="mod"><h2>z-index</h2><div class="up">我是上层,哈哈</div><div class="down">我是底层,呜呜</div></div>css.mod{background: #BEFFFC;/*position: relative;z-index: 0;*/}up,.down{    height: 50px;    left:0;}.up{/*position: relative;*/    top:0;    background:rgb(123,213,132);/*z-index: 0;*/}.down{/*position: relative;*/    top:0;    background:rgb(102,134,232);/*    z-index: 0;*/}

   如图

   原图已失效

   1、我们把z-index的注释去掉

   纹丝不动

   2、把up和down的定位加上

   依然纹丝不动,好吧是的,这个时候不动是正常的,它就不该动。

   3、为了能看出差别,父容器定位加上,子元素绝对定位

   如图

   原图已失效

   第一种情况出现了,视野之中,只剩下down,到这里为止,似乎也没跟我们要说的扯上什么关系,但其实是有关系的,我们给它们设置了z-index:0;那么它们现在就是在同样的层级,当是同样层级时,后面会覆盖前面。

   再来看

   4、去掉定位,使用margin负值把down拉上去

   原图已失效

   设置z-index,up为2,down为1,纹丝不动

   改为定位

   原图已失效

   旧景重现,but这个时候up在down上面。这是第二个注意点,需要使用定位,才能让z-index起作用!

   那么,哪种定位呢?我们来试试一个相对一个绝对,为了看得方便,给down设置绝对,并设置top值。层级仍然不变

   如图

   原图已失效

   如我们所愿,改一下试试,up为1,down为2

   如图

   原图已失效

   哇偶,没问题

   5、那如果想跟父元素调调呢?

   如元素设为2,子元素设为1

   如图

   原图已失效

   啊?!我真的没骗你,代码已经改了,可是为什么是这样,好吧难道是值不够大?那再改改,父元素改成10,还是不动,100,还是不动,使大招,999!!偶,还是不行,要吐血了。我们总是想使用暴力手段来尝试一些错误的东西,实际上是在跟自己过不去~这是为什么呢?

   因为,只要你的子元素使用了大于等于0的值,那么它就永远在父元素上面,不管父元素设置了多么大的z-index值,不信?那么是不是我们给z-index设置为0,子元素设置-1就可以了?

   看图

   原图已失效

   看来没有想的那么简单

   去掉父元素的z-index试试

   原图已失效

   哇,它们消失了,那么这个时候父元素的z-index值是多少呢?借助浏览器来看一下

   原图已失效

   好的,看来父元素跟子元素不玩儿这个,它们不互相攀比~

   6、还有一点,子元素的子元素会是个什么情况呢?

   我们索性来直接给它们里面直接套一层div,然后再看会是啥情况

   尝试设置up为2,down为1,up子元素为1,down子元素为2

   原图已失效

   好吧,我们又和哈哈见面了,可以看出,子元素设置了什么不重要,只要父元素设置了更低的z-index值,则子元素是无能为力的。

   然而这就这样结束了么?别忘了我们刚才没有给mod设置z-index值的时候,up和down是什么表现?

   是的,那么尝试不给down设置值,而只给它的子元素设置z-index,为了看得更清楚,给down定位到偏下位置。

   如下,设置为1

   原图已失效

   老朋友又见面了。。。

   设置为2

   原图已失效

   哇哈哈,down的子元素就酱紫完成了对父元素和up的超越,为什么同时超越了up?别忘了,down是在up之后。

   那如果把父元素的z-index清掉,只比较子元素呢,是的,它们同样遵循着”同级后在上,谁高谁在上“的原则。

   好了,说了这么多,来个小结:

   1、z-index起作用的前提是定位,这一点很重要,很多人设置z-index不起作用就是因为这个,更容易忘的是父子层叠的时候

   2、层级值的比较,只在同级元素或者同级元素的子元素之间,父子之间不会有这样的比较

   3、只要是子元素有着大于等于0的z-index值,那么它就在父元素之上,想在父元素之下,就设置为小于0的值,并且父元素z-index值为auto

   除此之外,还有一点需要注意,z-index的值不会继承,还有人说z-index的默认值是0,刚才大家看到的,不够严谨。

   z-index就说到这儿。

   其他可参考 z-index

   下面简单说说zoom

   zoom这个东西大家经常看到使用,而且是对IE浏览器使用。其实是用来缩放的。

   很多文章说它是IE专有属性,其实未必。在火狐和chrome下,它依然会起作用,其他的我没测,不好发表看法。

   这里是来自caniuse的兼容表

   原图已失效

   另外两点表现比较诡异,

   1、缩放了高度,宽度未变

   2、缩放只是看起来,而并未对元素进行真正的缩放

   上述两点也是它跟transform:scale表现的区别所在。

   可以对它设置数值,如1,也可以设置百分比,如200%。

   那它可以用来干嘛

   触发ie的hasLayout属性,清除浮动、清除margin的重叠

   有人说css3中它就会没了,显然不是,它还新增了一些东西,比如:

   zoom-in/zoom-out

   不要误会,它们是属性值,而不是属性,它俩是用来干嘛的呢?

   是改变鼠标的形状的,比如这样

   原图已失效

   具体可以看下张鑫旭的例子CSS3 cursor属性值zoom-in/zoom-out

   好了,由于时间紧迫,这篇文要结尾了。不知是否能够对你有所帮助,可能有所疏漏,下次有时间再来祥谈。

同分类推荐文章

  1. translateZ() (2026-06-25 21:18:56)
  2. translateY() (2026-06-25 21:17:56)
  3. translateX() (2026-06-25 21:16:01)

查看更多 前端 文章 →

建议继续学习

  1. 50个活力和动感的网页设计-颜色的灵感 (累计阅读 34,442)
  2. 我的 Sublime Text 2 笔记 (累计阅读 16,728)
  3. 视觉设计前瞻实用性研究(PNVD) 第二期 (累计阅读 12,977)
  4. 各公司对前端开发的职位描述 (累计阅读 10,405)
  5. iframe大小自适应 (累计阅读 10,056)
  6. 浏览器的渲染原理简介 (累计阅读 8,376)
  7. 解决IE6从Nginx服务器下载图片不Cache的Bug (累计阅读 8,354)
  8. 程序员眼里IE浏览器是什么样的 (累计阅读 8,010)
  9. 2010网页设计趋势 (累计阅读 7,818)
  10. Web前端工程师编程能力飞升之路 (累计阅读 7,690)