当前位置: 首页 > Web前端 > CSS

《CSS世界》注5:CSS级联规则与元素隐藏

时间:2023-03-30 13:33:24 CSS

上一篇:《CSS世界》注4:流保护与销毁先容《CSS世界》本书还剩下六章,不过本书的精华部分主要是前面的内容。这里只展示博客中后续章节中相对重要的内容。想认识更多的朋友,不如看原文。毕竟一本300多页的书可不是几篇文章而已。博客可以非常清楚地说明这一点。《CSS世界》读书笔记系列博客到此也算是完结了。虽然是“二进宫”,但收获还是满满的。毕竟,每次你读一本好书,你都能读到新的东西。我还是要在这里吐槽一下。很多前端岗位的同学(当然不包括大帅哥!)对CSS关注度不高。不就是布局吗?记住几个属性就可以实现一个网页布局,但是就是这些同学,经常在做适配和页面调整的时候不停的抱怨,或者调整的时候差点重构,CSS代码一点都不健壮。殊不知合理使用CSS属性和健壮的布局能为你省去很多工作,甚至帮你省下很多js代码。看来“CSS重要性”断言写到这里了,哈哈!1、CSS世界中的级联规则声明:在CSS中,不仅仅只有z-index可以决定元素的z轴顺序。1.1元素堆叠层次补充说明:底部的背景/边框特指堆叠上下文元素的边框和背景色(后面会详细说明)。每个堆叠顺序规则只适用于当前堆叠上下文元素的小世界;inlinehorizo??ntalbox指的是inline/inline-block/inline-table元素的“堆叠顺序”,都在同一层;单纯从堆叠层面上看,其实z-index:0和z-index:auto可以看成是一样的。其实两者在级联上下文领域是有本质区别的。内联会高于标准的流盒和浮动盒元素。一旦成为定位元素,它的z-index就是默认的auto。根据上面的堆叠顺序表,会覆盖inline或者block或者float元素。1.2堆栈上下文(stackingcontext)堆栈上下文是一个类似于“BlockFormattingContext”(BFC)的概念。但是,这个概念相对虚构和抽象。为了便于理解,我们需要将其形象化。什么样的比喻方法?我们可以将层叠上下文理解为一种“层叠结界”,自成一个小世界。世界上可能还有其他“层叠壁垒”,自己也可能在其他“层叠壁垒”中。如何创建级联上下文(1)Innate:页面的根元素天生带有级联上下文,称为根级联上下文(html标签)(2)Orthodox:定位元素的传统“级联上下文”带有一个position的z-index值是相对/绝对的,在Firefox/IE(不包括Chrome)下position:fixed声明元素在其z-index值不是auto时将创建级联上下文。一个flex布局元素(父元素显示:flex|inline-flex),而z-index值不是auto,元素的opacity值不是1,元素的transform值不是none,mix-blend-mode值不正常,元素的filter值不为noneisolation值为isolate元素的will-change属性值,为以上2~6中的任意一项(如will-change:opacity,will-chang:transform,etc.)元素的-webkit-overflow-scrolling设置为touchCSS3以创建级联上下文引用:Bug由于分层问题:描述:有一个绝对定位的黑色半透明层覆盖图像。但是,一旦图片开始使用fadeIn的css3动画,文字就会跑到图片后面,因为文字一直是100%透明纯白,文字会因为跑到图片后面而淡出,而图片是半透明的,文字穿透Displayonly原因:fadeIn动画的本质是opacity透明度的变化。当“元素的不透明度值不为1”时,会创建一个堆叠上下文,为1时为普通元素。级联bug1.3级联黄金法则(重点)(1)谁大谁先:当有明显的级联层级标识时,比如有效的z-index属性值,在同一个级联上下文字段中,级联与水平值大的会覆盖值小的。(2)从后面来:当元素具有相同的堆叠级别和相同的堆叠顺序时,DOM流中位于后面的元素将覆盖位于前面的元素。下面有两种情况,两种情况的两个Cascading顺序如何:

答案:(1)1向上,2向下;(2)上面分析中bottom2中的1:z-index:auto所在的
元素是一个普通的定位元素,所以里面的两个元素的堆叠比较不受parent的影响,而两者直接套用“谁大谁大”为准则;而一旦z-index成为一个值,即使为0,也会建立级联上下文。这时候,遵循“层叠黄金法则”的另一个准则,“后来居上”,根据在DOM文档流中的位置来决定谁在思考:当未居中的层级紊乱时,可以找到父元素与目标元素的层级(或Parent层级)层级对比1.4zIndex可以为负值根据上面的层叠时序图我们可以知道,当zIndex为负时,处于后台和正常流之间盒子。随便看个例子,问下面的堆叠情况/*情况1*/son
/*情况2*/son.father{width:200px;高度:200px;背景色:rgba(0,0,255,.7);}.son{位置:相对;z-指数:-1;宽度:200px;高度:100px;背景色:rgba(255,0,0,.7);}.transform{margin-top:20px;transform:scale(1);}分析:案例一:.father为普通元素时,.son元素所在的堆叠上下文元素为.father的祖先元素;.son是z-index为负的元素,.father是块元素,也就是说.son应该在.显示父元素的背面,所以.son会被.father元素的蓝色背景覆盖;情况2:当.father是堆叠上下文元素时,具有负z-index的元素位于堆叠上下文元素的背景上,因此,.son在.father元素的蓝色背景上;2.元素隐藏2.1元素的各种隐藏方式(1)如果你想让元素不可见,不占空间,辅助设备无法访问,但是资源已经加载,DOM可以访问,那么可以直接使用display:none隐藏.dn{display:none;}(2)如果想让元素不可见,不占空间,辅助设置无法访问设备,但隐藏时可以有过渡淡入淡出效果。隐藏{position:absolute;visibility:hidden;}(3)如果你想让元素不可见,不能点击,辅助设备不能访问,但是占用的空间是预留的,那么可以使用visibility:hidden来hide.vh{visibility:hidden;}(4)如果希望元素不可见、不可点击、不占空间,但键盘可访问,可以使用clip裁剪来隐藏。clip{position:absolute;clip:rect(0000);}(5)如果你想让元素不可见,不可点击,但占用空间,键盘可访问,可以试试relativehidden例如,如果条件允许,即在它和堆叠上下文之间有一个设置了背景色的父元素,你也可以使用更友好的z-index负值来hide.lower{position:relative;z-index:-1;}(6)如果想让元素不可见,但是可以点击,不占用空间,可以使用transparency.opacity{position:absolute;不透明度:0;filter:Alpha(opacity=0);}(7)如果只是简单的想让元素不可见,但是位置预留了,还是可以点击选中,那么直接让透明度为0.opacity{opacity:0;filter:Alpha(opacity=0);}2.2display和visibilityhidden比较spaceoccuption:display:none隐藏后元素不占用任何空间visibility:hidden隐藏元素空间仍然有后代隐藏原则:当display属性value为none时,该元素及其所有后代元素都被隐藏当visibility属性值被隐藏时,子元素也会不可见,因为子元素继承了visibility:hidden,所以当子元素设置visibility:visible;时,子元素元素将再次出现List1
  • List2
  • List3
  • List4最终list1和list4还是会显示3.总结CSS堆叠的各种方法和对比上下文理解和CSS堆叠的创建顺序和规则元素隐藏