一、Display 几种隐藏方式

1、希望元素不可见、不占据空间、辅助设备无法访问、不渲染

使用<script>标签:

<script type=“text/html”>
    <img src=“1.jpg">
</script>

获取<script>标签隐藏的内容:
script.innerHTML

2、希望元素不可见、不占据空间、辅助设备无法访问、有资源加载、DOM可访问

使用display:none隐藏

3、希望元素不可见、不占据空间、辅助设备无法访问、隐藏的时候可以有transition淡入淡出效果
.hidden {
    position: absolute;
    visibility: hidden;
}
4、元素不可见、不能点击、辅助设备无法访问,但是占据空间
   visibility:hidden
5、元素不可见、不能点击、不占据空间,但是键盘可以访问,使用clip进行裁剪处理
.clip {
    position: absolute;
    clip: rect(0 0 0 0);  // clip 属性剪裁绝对定位元素,唯一合法的形状值是:rect (top, right, bottom, left)
} 
.out {
    position: relative;
    left: -999em;
 }
6、元素不可见、不能点击、占据空间、可被键盘访问,利用绝对定位和z-index来设置隐藏
.lower {
      position: relative;
      z-index: -1;
}
7、元素不可见、不占据空间、但是可以点击,可以使用透明度
.opacity {
    position: absolute; //position的作用是使元素脱离文档流,使其不占据空间
    opacity: 0;
    filter: Alpha(opacity=0);
}
8、单纯的想使元素不可见,位置保留也可以点击,可直接设置透明度为0
.opacity {
    opacity: 0;
    filter: Alpha(opacity=0);
}

Display:none显示隐藏不会影响animation动画,但是会影响transition过渡效果的执行,所以transition往往和visibility搭配

二、Visibility与元素的隐显

1、visibility继承性

父元素设置 visibility:hidden,子元素也会看不见,究其原因是继承性,子元素继承了 visibility:hidden,但是,如果子元素设置了 visibility:visible,则子元素又会显示出来,这个和 display 隐藏有着质的区别。

应用场景: 用户上传头像,实时显示并裁减
实现方式: 模块外部容器设置 visibility:hidden,剪裁区域里面放一个加载效果,设置visibility:visible。图片尺寸获取成功后,再正常初始化,然后让外部容器 visibility 属性重置为 visible。这样体验就会好很多,用户只会看到“加载中→剪裁界面”,而不是“占 位界面→加载中→最终操作界面”。

2、visibility与css计数器

visibility:hidden 不会影响计数器的计数

3、visibility与transition

hover属性下,下述代码会在hover时显示target子元素,但是不会有过渡效果

.box > .target {
    display: none;
    position: absolute;
    opacity: 0;
    transition: opacity .25s;
}
.box:hover > .target {
    display: block;
    opacity: 1;
 }

下面的代码可以实target子元素现淡入淡出的过渡效果,这是由于CSS3 transition支持的CSS属性中有visibility,但是并没有 display。

.box > .target {
    position: absolute;
    opacity: 0;
    transition: opacity .25s;
    visibility: hidden;
}
.box:hover > .target {
    visibility: visible;
    opacity: 1; 
}

Mmmy
145 声望14 粉丝

每天都要学习鸭!🦆